基于C语言与MSSQL自增的表格管理

介绍

在C语言中,与数据库有关的操作需要调用相应的库,例如Microsoft SQL Server(简称MSSQL)需要调用 sqloledb 库。在本文中,将通过使用C语言和MSSQL数据库,来实现表格自增的管理。

前置条件

1.环境搭建

在开始之前,我们需要确保以下事项已经完成:

拥有本地的MSSQL数据库,并正确安装与配置了MSSQL服务。

在安装了Visual Studio或其他C语言编译环境。

2.引入sqloledb库

在VS中,我们需要引入 sqloledb 库以实现与MSSQL的操作。按以下步骤操作:

打开项目:

#include <stdio.h>

#include <windows.h>

#include <sql.h>

#include <sqlext.h>

int main()

{

//code here

return 0;

}

设置项目属性:

右键项目,选择“属性”:

选择“VC++目录”标签页,设置包含目录、库目录、库文件:

选择“链接器”-“输入”标签页,添加“sqloledb.lib”:

表格自增管理实现

我们假设我们要创建一个包含自增id、姓名、年龄、性别的表格,并且实现对其增、删、改、查的功能。

1.连接数据库

首先,我们需要连接MSSQL数据库。下面是我给大家的示例:

HENV henv=NULL ;

HDBC hdbc=NULL ;

//为环境句柄分配空间

ret=SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv) ;

//设置版本

ret=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER) ;

//为连接句柄分配空间

ret=SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc) ;

//连接数据库

ret=SQLConnectW(hdbc,L"msdb",SQL_NTS,L"sa",SQL_NTS,L"123",SQL_NTS) ;

其中,由SQLConnectW()函数连接数据库,

第二个参数是数据库名(msdb);

第四个参数是用户名(sa);

第六个参数是密码(123)。

我们可以通过返回值来判断是否成功连接数据库:

if (SQL_SUCCESS!=ret && SQL_SUCCESS_WITH_INFO!=ret){

//连接失败

//do something...

}

else{

//连接成功

//do something...

}

以下是对上述代码的一些解释:

SQL_SUCCESS:操作成功

SQL_SUCCESS_WITH_INFO:操作成功并返回一些信息

SQL_INVALID_HANDLE:无效的句柄(例如连接失败)

SQL_ERROR:操作失败

2.创建表格

下一个步骤是创建表格。下面是表格创建语句的示例:

CREATE TABLE dbo.UserTable(

id INT IDENTITY(1,1) PRIMARY KEY,

name VARCHAR(20) NOT NULL,

age TINYINT NOT NULL,

sex VARCHAR(20) NOT NULL

)

在本示例中,我们创建了一个名为UserTable的表格,有自增的id、name、age、sex四个字段。下面我们可以调用以下SQLExecDirect()函数在MSSQL中创建表格:

char sql[] = "CREATE TABLE dbo.UserTable("

"id INT IDENTITY(1,1) PRIMARY KEY,"

"name VARCHAR(20) NOT NULL,"

"age TINYINT NOT NULL,"

"sex VARCHAR(20) NOT NULL"

");";

SQLExecDirectW(hstmt,(SQLWCHAR*)(s2ws(sql).c_str()),SQL_NTS);

这里s2ws()函数的作用是将char类型字符串转换成wchar_t类型。为什么要转换?因为SQLExecDirectW()函数要求的第二个参数是SQLWCHAR指针类型,而不是char指针类型。

在这里需要注意,我们需要调用SQLExecDirect()函数后才能创建表格,如果表格已经存在,那么将会返回错误。

3.增加数据

增加数据的操作一般包括以下几个步骤:

插入数据到表格中;

提交数据。

下面是一个包含三个字段的插入操作的示例:

char sql[] = "INSERT INTO dbo.UserTable (name,age,sex) VALUES ('张三',28,'男');";

//插入数据

SQLExecDirectW(hstmt,(SQLWCHAR*)(s2ws(sql).c_str()),SQL_NTS);

//提交数据

SQLEndTran(SQL_HANDLE_DBC,hdbc,SQL_COMMIT);

这里需要注意,所有的插入、删除、修改操作需要调用SQLEndTran()函数来提交数据。同时需要注意的是,只有提交后才能看到数据的变化。

4.删除数据

与增加数据的过程非常相似,删除数据的操作一般包括以下几个步骤:

发送删除语句;

提交数据。

下面是一个包含条件的删除数据示例:

char sql[] = "DELETE FROM dbo.UserTable WHERE name='张三';";

//发送删除语句

SQLExecDirectW(hstmt,(SQLWCHAR*)(s2ws(sql).c_str()),SQL_NTS);

//提交数据

SQLEndTran(SQL_HANDLE_DBC,hdbc,SQL_COMMIT);

在这个示例中,我们选择了名字为"张三"的数据行,并将其删除。与前面的插入示例相同,我们需要调用SQLEndTran()函数提交数据。

5.修改数据

修改数据的操作也很类似,以下是一个示例:

char sql[] = "UPDATE dbo.UserTable SET name='李四',age=29,sex='女' WHERE id=1;";

//发送修改语句

SQLExecDirectW(hstmt,(SQLWCHAR*)(s2ws(sql).c_str()),SQL_NTS);

//提交数据

SQLEndTran(SQL_HANDLE_DBC,hdbc,SQL_COMMIT);

在这个示例中,我们选择了id为1的数据行,并将其修改名字为"李四"、年龄为29、性别为"女"。

6.查询数据

最后一个操作就是查询表格中的数据了。以下是一个包含指定条件并返回结果的示例:

char sql[] = "SELECT * FROM dbo.UserTable WHERE age>20;";

//发送查询语句

SQLExecDirectW(hstmt,(SQLWCHAR*)(s2ws(sql).c_str()),SQL_NTS);

//处理结果

while ((ret=SQLFetch(hstmt))==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO)

{

//获取数据

char name[20];

int age;

char gender[20];

SQLGetData(hstmt,2,SQL_C_CHAR,&name,20,NULL) ;

SQLGetData(hstmt,3,SQL_C_SLONG,&age,sizeof(age),NULL) ;

SQLGetData(hstmt,4,SQL_C_CHAR,&gender,20,NULL) ;

//do something...

}

在这个示例中,我们选择了所有的年龄大于20岁的数据行,并将其返回。我们可以使用SQLGetData()函数去获取指定字段的数据。然后,我们需要将其存储到指定的变量中。

7.终止

完成对表格的管理后,我们需要关闭连接和句柄:

//关闭连接和句柄

SQLDisconnect(hdbc) ;

SQLFreeHandle(SQL_HANDLE_STMT, hstmt);

SQLFreeHandle(SQL_HANDLE_DBC,hdbc);

SQLFreeHandle(SQL_HANDLE_ENV,henv);

在这个示例中,我们使用了SQLDisconnect()函数来关闭连接,使用SQLFreeHandle()函数来释放句柄。

总结

通过C语言和MSSQL数据库的搭配,我们可以实现对表格的自增管理。我们可以通过连接数据库,创建表格,插入、删除、修改、查询数据来实现完整SQL语句的操作。当然,我们需要熟练掌握VS、sqloledb库的使用,才能顺利完成这些操作。

数据库标签