C编程操作MSSQL数据库技巧

1. 简介

随着科技的不断进步,互联网数据量呈现不断攀升之势,而关系型数据库(如MSSQL)的应用也逐渐普及。C语言是常用编程语言,也支持操作MSSQL数据库,可以使用ODBC(开放式数据库连接)或ADO(活动数据对象)连接MSSQL。

2. 安装ODBC驱动程序

ODBC驱动程序是操作MSSQL数据库的重要方式之一,安装ODBC驱动程序后,C语言就能够连接到MSSQL并执行SELECT、INSERT或UPDATE等SQL语句。

2.1 下载ODBC驱动程序

下载ODBC驱动程序并执行安装程序,常用的ODBC驱动程序包括“ODBC Driver for SQL Server”和“ODBC Driver for Microsoft Access”。可以从Microsoft官方网站下载对应版本,安装过程中需要按照提示进行,完成后需要在控制面板->ODBC数据源中添加连接信息。

2.2 添加ODBC数据源

在Windows中,可以在控制面板中找到“ODBC数据源”图标,双击进入后可以添加ODBC数据源,也可以在C语言代码中使用SQLConnect函数来建立ODBC数据源连接。

//使用ODBC连接数据库

#define SQL_RESULT_LEN 240

#define SQL_RETURN_CODE_LEN 1000

#define SQL_COLUMN_NAME_LEN 64

#define SQL_QUERY_LEN 100

void SELECT_UsingODBC(char *query)

{

SQLHENV env; //定义ODBC环境

SQLHDBC dbc; //定义ODBC数据库连接

SQLHSTMT stmt; //定义ODBC语句指针

SQLRETURN ret; //定义ODBC函数返回值

SQLCHAR col_name[SQL_COLUMN_NAME_LEN];

SQLCHAR query_string[SQL_QUERY_LEN];

SQLRETURN retcode;

SQLCHAR result[SQL_RESULT_LEN];

SQLLEN num_cols=0, num_rows=0;

SQLINTEGER col_width[10];

SQLSMALLINT col_type[10];

int row = 0;

SQLCHAR server[] = "your_server_name"; //服务器名称

SQLCHAR database[] = "your_database_name"; //数据库名称

SQLCHAR username[] = "your_username"; //用户名

SQLCHAR password[] = "your_password"; //密码

//分配ODBC环境句柄

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

//将ODBC环境版本号设置为3,用于兼容低版本ODBC头文件

ret = SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);

//分配ODBC连接句柄

ret = SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);

//连接到ODBC数据源

ret = SQLConnect(dbc, (SQLCHAR*)server, SQL_NTS, (SQLCHAR*)username, SQL_NTS, (SQLCHAR*)password, SQL_NTS);

fprintf(stderr, "Connection Successful!\n");

//分配ODBC语句句柄

ret = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);

sprintf_s((char*)query_string, SQL_QUERY_LEN, "%s", query);

retcode = SQLExecDirect(stmt, (unsigned char*)query_string, SQL_NTS);

fprintf(stdout, "Query : %s\n", query);

fprintf(stdout, "Result : \n");

ret = SQLNumResultCols(stmt, &num_cols);

for (int col=1; col<=num_cols; col++)

{

SQLDescribeCol(stmt, col, col_name, SQL_COLUMN_NAME_LEN, NULL, NULL, NULL, NULL, NULL);

fprintf(stdout, "%s\t", col_name);

}

fprintf(stdout,"\n");

while (retcode == SQL_SUCCESS)

{

ret = SQLFetch(stmt);

if(ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)

{

for(int col=1; col<=num_cols; col++)

{

ret = SQLGetData(stmt, col, SQL_C_CHAR, result, SQL_RESULT_LEN, (SQLLEN *) &col_width[col-1]);

if (retcode != SQL_SUCCESS)

{

fprintf(stdout, "\nSQLGetData Error : %d\n", ret);

return;

}

fprintf(stdout, "%s\t",result);

}

row++;

num_rows++;

fprintf(stdout, "\n");

}

else

fprintf(stdout, "fetch over\n");

}

fprintf(stdout, "num_rows %d\n",num_rows);

fprintf(stdout, "Selecting done!\n\n");

SQLFreeHandle(SQL_HANDLE_STMT, stmt);

SQLDisconnect(dbc);

SQLFreeHandle(SQL_HANDLE_DBC, dbc);

SQLFreeHandle(SQL_HANDLE_ENV, env);

}

3. 使用ADO连接MSSQL

ADO是活动数据对象的缩写,也是连接MSSQL数据库的一种常用方法。ADO方式的优点是连接MSSQL更加方便,可以减少许多代码量。

3.1 ADO的优点

使用ADO建立与MSSQL的连接时,通常采取以下代码:

_Connect *conn;

_Recordset *rec;

_Bstr_t strCon("your_server_name"), strUserID("your_username"), strPWD("your_password"), strDBName("your_database_name");

//初始化COM库

CoInitialize(NULL);

//新建AOD连接对象

conn = new _Connection();

conn->Provider = "sqloledb";

//指定连接字符串

conn->ConnectionString = "Data Source=" + (_bstr_t)strCon + ";Initial Catalog=" + (_bstr_t)strDBName +";User ID=" +

(_bstr_t)strUserID + ";Password=" + (_bstr_t)strPWD + ";";

//打开连接对象

conn->Open((_bstr_t)strCon, (_bstr_t)strUserID, (_bstr_t)strPWD, adModeUnknown);

//新建Recordset对象

rec = new _Recordset();

//打开Recordset对象

rec->Open((_bstr_t)query, conn.GetInterfacePtr(), adOpenStatic, adLockReadOnly, adCmdUnknown);

值得注意的是,ADO方式需要引用ado与com库,使用COM接口,要求安装Visual Studio等开发环境。

4. 结论

C编程连接MSSQL数据库有多种方式,包括ODBC和ADO。使用ODBC需要先安装ODBC驱动程序,然后在代码中使用SQL代替MSSQL语句来执行MSSQL查询,相对复杂;使用ADO方式连接MSSQL,需要使用COM与ado库,使用起来相对简单,但需要安装对应的开发环境。

数据库标签