快速配置C语言操作MS SQL服务器

1. 简介

操作关系型数据库是企业级应用程序中必不可少的一环。MS SQL服务器是微软公司开发的关系型数据库管理系统,被广泛应用于企业中。本篇文章将介绍使用C语言编写MS SQL查询程序。

2. 安装ODBC驱动

在使用C语言操作MS SQL服务器之前,需要先安装对应的ODBC驱动。可以在微软官网上下载32位或64位版本的驱动程序并安装。下载地址为:

https://www.microsoft.com/en-US/download/details.aspx?id=36434

安装完成后,在控制面板中找到ODBC数据源(64位)或ODBC数据源(32位)并打开,如下图所示:

选择System DSN,然后点击添加,如下图所示:

选择SQL Native Client 11.0驱动程序,并点击完成,如下图所示:

设置数据源名称,描述及服务器信息,如下图所示:

选择Test Connecton检查是否连接成功,如下图所示:

如果成功,则可以点击确定完成设置。这样就完成了ODBC驱动的安装和配置。

3. 编写C程序

3.1 初始化数据库连接

#include

#include

#include

#include

int main(){

//初始化ODBC环境句柄

SQLHENV henv;

SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv);

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

//初始化数据库连接句柄

SQLHDBC hdbc;

SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);

//连接数据库

SQLCHAR *dsn = (SQLCHAR *)"DSN=data1;UID=sa;PWD=123";

SQLRETURN ret = SQLConnectA(hdbc,dsn,SQL_NTS,NULL,SQL_NULL_HANDLE,SQL_NULL_HANDLE);

if(ret == SQL_ERROR || ret == SQL_INVALID_HANDLE){

printf("Connect fail.\n");

return 1;

}

return 0;

}

上述代码片段完成了ODBC环境句柄的初始化和数据库连接句柄的初始化,并连接了数据库。其中dsn是ODBC驱动数据源名称,UID是连接数据库的用户名,PWD是连接数据库的密码。

3.2 执行SQL查询语句

在连接完成后,我们可以使用SQL语句查询数据库中的数据。下面的函数ExecSqlQuery可以用来执行SQL查询语句。

int ExecSqlQuery(SQLHDBC hdbc,char *sSql){

SQLHSTMT hstmt;

SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);

int ret = SQLExecDirectA(hstmt,(SQLCHAR*)sSql,SQL_NTS);

if(ret == SQL_ERROR || ret == SQL_INVALID_HANDLE){

SQLFreeHandle(SQL_HANDLE_STMT,hstmt);

printf("SQL query error.\n");

return 1;

}

int nColumn = 0;

SQLRETURN ret2 = SQLNumResultCols(hstmt,&nColumn);

if(ret2 == SQL_ERROR || ret2 == SQL_INVALID_HANDLE){

SQLFreeHandle(SQL_HANDLE_STMT,hstmt);

printf("SQL query column error.\n");

return 2;

}

SQLCHAR szName[100];

for(int i=1;i<=nColumn;i++){

SQLULEN uColumnSize=0;

SQLSMALLINT DataType=0;

SQLSMALLINT NameLen=0;

SQLDescribeColA(hstmt,i,szName,sizeof(szName),&NameLen,&DataType,&uColumnSize,NULL,NULL);

printf("%s\t",szName);

}

printf("\n\n");

while(1){

ret = SQLFetch(hstmt);

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

break;

}

for(int i=1;i<=nColumn;i++){

char szData[1024] = {0};

SQLGetData(hstmt,i,SQL_C_CHAR,szData,sizeof(szData),NULL);

printf("%s\t",szData);

}

printf("\n");

}

SQLFreeHandle(SQL_HANDLE_STMT,hstmt);

return 0;

}

在执行完SQL查询语句后,我们需要逐行读取查询结果,可以使用函数SQLFetchSQLGetData来实现。这两个函数均由ODBC提供。下面是具体使用方法:

使用函数SQLGetData获取指定行和列上的结果。

使用函数SQLFetch获取下一行。

当函数SQLFetch返回值不是SQL_SUCCESSSQL_SUCCESS_WITH_INFO时,表示查询结果已经全部读取完成。

下面是一个例子:

void main()

{

SQLHENV henv;

SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv);

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

SQLHDBC hdbc;

SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);

SQLCHAR *dsn = (SQLCHAR *)"DSN=data1;UID=sa;PWD=123";

SQLRETURN ret = SQLConnectA(hdbc,dsn,SQL_NTS,NULL,SQL_NULL_HANDLE,SQL_NULL_HANDLE);

if(ret == SQL_ERROR || ret == SQL_INVALID_HANDLE){

printf("Connect fail.\n");

return;

}

ExecSqlQuery(hdbc,"SELECT * FROM Products");

SQLDisconnect(hdbc);

SQLFreeHandle(SQL_HANDLE_DBC,hdbc);

SQLFreeHandle(SQL_HANDLE_ENV,henv);

}

上述代码片段使用了前面提到的函数ExecSqlQuery执行了SQL查询语句SELECT * FROM Products,并打印出查询结果。

4. 总结

本篇文章介绍了使用C语言操作MS SQL服务器的基本步骤。主要内容包括安装ODBC驱动、配置数据源、连接数据库和执行SQL查询等。这些知识点对于企业级应用程序开发都非常重要,希望对读者有所帮助。

数据库标签