在使用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;}//建立连接,使用用户名及密码