sql server 的连接,数据的插入,数据取回

这篇博客介绍了如何使用C语言和ODBC API来连接SQL Server数据库,包括环境句柄、连接句柄和语句句柄的使用,并详细阐述了分配ODBC环境、设置环境、分配连接句柄以及连接数据库的过程。最后提到了资源释放的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

配置:Win7 64, SQL SERVER 2012

语言:C语言,ODBC API

       最近无事,想做点东西玩,要用到数据库,以前学过但是没有真正地的在项目中实践过,因为SQL SERVER比较简单所以直接就选择了SQL SERVER。

开始之前,先讲几个接下来要用到的几个句柄,

        SQLHENV henv;
	SQLHDBC hdbc;
	SQLHSTMT hstmt;
	SQLRETURN retCode;

第一个SQLHENV是环境句柄,主要用于设置环境,第二个SQLHDBC为连接句柄,用于连接,第三个SQLHSTMT为语句句柄,用户数据库操作。最后一个为函数返回值。

1.接下来分配ODBC环境

retCode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
	if(retCode != SQL_SUCCESS){
		printf("Can not allocate env handle\n");
	}
句柄分配函数 SQLAllocHandle()
SQLRETURN SQLAllocHandle(
      SQLSMALLINT   HandleType,
      SQLHANDLE     InputHandle,
      SQLHANDLE *   OutputHandlePtr);
第一个为句柄类型,有以下几种类型:
SQL_HANDLE_DBC

SQL_HANDLE_DBC_INFO_TOKEN

SQL_HANDLE_DESC

SQL_HANDLE_ENV

SQL_HANDLE_STMT
因为是分配环境句柄所以我们选择,SQL_HANDLE_ENV;

第二个参数为输入句柄(MSDN解释为):

[Input] The input handle in whose context the new handle is to be allocated. If HandleType is SQL_HANDLE_ENV, this is SQL_NULL_HANDLE. If HandleType is SQL_HANDLE_DBC, this must be an environment handle, and if it is SQL_HANDLE_STMT or SQL_HANDLE_DESC, it must be a connection handle.

意思是如果是分配环境句柄,第二个参数必须为SQL_NULL_HANDLE,如果分配连接句柄,必须为环境句柄,如果第一个参数为SQL_HANDLE_STMT或者SQL_HANDLE_DESC,则必须为连接句柄。

第三个参数为分配句柄的指针。

2.设置环境

retCode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, 
			(void*)SQL_OV_ODBC3, 0);
	if(retCode != SQL_SUCCESS){
		printf("Cannot set ODBC version\n");
	}
这里主要设置版本号。

3.分配连句柄

retCode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
	if(retCode != SQL_SUCCESS){
		printf("Cannot allocate connect handle\n");
	}
分配句柄前面已经讲过,这里就略过了。

    4.连接数据库

retCode = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, 0);

retCode = SQLConnect(hdbc, (SQLCHAR*)"test", SQL_NTS,
	        (SQLCHAR*)"sa", SQL_NTS, (SQLCHAR*)"holyshit", SQL_NTS );

第一行设置连接属性,可以略过,具体参考MSDN,第二行为连接,函数如下:

SQLRETURN SQLConnect(
     SQLHDBC        ConnectionHandle, //连接句柄
     SQLCHAR *      ServerName,	     //服务器名称//数据源::配置数据源进入管理工具->数据源(ODBC)->系统DSN->……如果系统为64位则->运行->C:\Windows\SysWOW64\odbcad32.exe步骤一样
     SQLSMALLINT    NameLength1,    //字符长度,如果以NULL结尾为SQL_NTS,以下同理
     SQLCHAR *      UserName,       //用户名
     SQLSMALLINT    NameLength2,   //用户长度
     SQLCHAR *      Authentication,  //密码
     SQLSMALLINT    NameLength3);    //密码长度
连接之后断开连接:SQLDisconnect(hdbc); 

依次释放句柄:SQLFreeHandle(SQL_HANDLE_DBC, hdbc);

先写到这儿,全部写完就太多了




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值