使用C连接SQLServer数据库(sqlserver链接c)

2023-04-15 08:15:41 数据库 连接 链接

在使用C语言开发应用程序时,我们可能会遇到数据库操作,使用C语言向SQLServer数据库读取或保存信息。这里介绍两种向SQLServer数据库连接的方法,一种是不使用第三方库,一种则是使用open source库。

### 不使用第三方库

首先,在不使用第三方库的情况下,要使用C语言连接SQLServer数据库,我们需要使用Microsoft SQL Server Native Client 10.0(以下简称SQLNCLI10)底层库以及TSQL语句访问数据库。首先需要引入SQLNCLI10的头文件,如下:

#include  //SQLServer 2008
#include //SQLServer 2008 R2

然后,我们就可以使用SQLNCLI10提供的API实现功能,例如通过SQLServer登录一个数据库:

//通过SQLServer登录一个数据库
SQLHANDLE hEnv; //定义一个句柄
SQLHANDLE hDbc; //定义一个句柄
SQLRETURN sqlReturn = 0; //返回值
//初始化环境
sqlReturn = sqlReturn = SQLAllocHandle (SQL_HANDLE_ENV,SQL_NULL_HANDLE,&hEnv);
if (sqlReturn!=SQL_SUCCESS&& sqlReturn != SQL_SUCCESS_WITH_INFO)
printf("alloc fail");
ifOWGnive=SQL_OVERSH^*_CREDENTIALS_ON;
if (sqlReturn != SQL_SUCCESS && sqlReturn != SQL_SUCCESS_WITH_INFO)
printf("set env fail");
//建立连接
sqlReturn = SQ6U3K Handle (SQL_HANDLE_DBC, hEnv, &hDbc);
if (sqlReturn != SQL_SUCCESS && sqlReturn != SQL_SUCCESS_WITH_INFO)
printf("set conn fail");
//建立数据库连接,使用用户名及密码
sqlReturn = SQILoginW(hDbc,"uid","pw",NULL,NULL,0,NULL,0)

### 使用Open source库

当不使用第三方库操作SQLServer时候,开发工作极其繁琐,易出错,而使用open source库可以显著减少我们的开发难度和出错率,目前比较流行的open source库有libpq和unixODBC。以下分别介绍这两个库的使用方法。

#### Libpq

Libpq是一款专为PostgreSQL开发的框架,他可以使SQLServer数据库受到支持,使用的步骤如下:

首先引用libpq的头文件:

#include 

其次,定义一个链接句柄,并建立一个连接:

//建立连接
PGconn *conn = PQconnectdb("hostaddr='127.0.0.1' port=5432 dbname='testdb' user='user' password='password'");

if (PQstatus(conn) != CONNECTION_OK) {
printf("数据库连接失败
");
// 关闭连接
PQfinish(conn);
return;
}

最后,使用API发送SQL语句:

// 使用API发送SQL语句
PGresult *res = NULL;

res = PQexec(conn, "SELECT version()");

if (PQresultStatus(res) != PGRES_TUPLES_OK) {
printf("查询失败");
}

#### unixODBC

UnixODBC是跨平台的ODBC API的实现,是一个基于ODBC的平台无关的开源应用程序,以下将介绍使用UnixODBC向SQLServer连接的方法:

首先需要引用UnixODBC的头文件:

#include  //SQL Server 2008
#include //SQL Server 2008
#include //SQL Server 2008

其次,定义一个句柄,并建立一个连接:

//建立连接
SQLHANDLE hEnv;
SQLRETURN sqlReturn;
//初始化环境句柄
sqlReturn = SQLAllocHandle (SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);
if (sqlReturn!=SQL_SUCCESS&& sqlReturn != SQL_SUCCESS_WITH_INFO) {
printf("alloc fail");
return;
}
SQLHANDLE hDbc;
//设置环境句柄的属性
sqlReturn = SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER *)SQL_OV_ODBC3, SQL_IS_UINTEGER);
if (sqlReturn != SQL_SUCCESS && sqlReturn != SQL_SUCCESS_WITH_INFO) {
printf("set env fail");
return;
}
//建立数据库连接
sqlReturn = SQLAllocHandle (SQL_HANDLE_DBC, hEnv, &hDbc);
if (sqlReturn != SQL_SUCCESS && sqlReturn != SQL_SUCCESS_WITH_INFO) {
printf("set conn fail");
return;
}
//建立连接,使用用户名及密码

相关文章