1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > C/C++语言ODBC连接SqlServer数据库

C/C++语言ODBC连接SqlServer数据库

时间:2020-02-26 01:30:54

相关推荐

C/C++语言ODBC连接SqlServer数据库

C/C++连接SqlServer数据库

C或C++语言ODBC方式连接SqlServer数据库,需要先正确配置数据源才能连接。

VC6.0连接到数据库VC连接到数据库

数据库创建一数据表

use test_db;if exists(select * from sysobjects where id=object_id('test')) drop table testcreate table test(num int,name varchar(6),addr char(6),age int,primary key(num));go insert into test(num,name,addr,age) values(1,'小李','福州',23)go insert into test(num,name,addr,age) values(2,'小张','泉州',19)go insert into test(num,name,addr,age) values(3,'晓雪','福州',22)go insert into test(num,name,addr,age) values(4,'王梅','贵州',20)go insert into test(num,name,addr,age) values(5,'张三','厦门',25)go insert into test(num,name,addr,age) values(6,'谢雨','福清',24)goselect * from test;

VC6.0连接到数据库

//以下在 VC6.0可正常运行,如果在VS则需要修改相应的参数类型#include<stdio.h>#include<windows.h>#include<sql.h>#include<sqlext.h>#include<sqltypes.h>int main(){SQLRETURN ret;SQLHENV henv;SQLHDBC hdbc;SQLHSTMT hstmt;ret=SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv);//申请环境句柄ret=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);ret=SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);//申请数据库连接句柄//vc 6.0 使用: SQLCHAR*ret=SQLConnect(hdbc,(SQLCHAR*)"test_db",SQL_NTS,(SQLCHAR*)"sa",SQL_NTS,(SQLCHAR*)"666666",SQL_NTS);/*data_test为配置的ODBC数据源名称,这里根据自己的配置进行修改*/if(!(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO)){printf("连接数据库失败!\n");return -1;}else{printf("连接数据成功!\n");}ret=SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);SQLCHAR sql2[]="select num,name,addr,age from test_db.dbo.test";ret=SQLExecDirect(hstmt,sql2,SQL_NTS);if(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO){SQLCHAR str1[20],str2[20],str3[20],str4[20];//VC 6.0SQLINTEGER len_str1, len_str2, len_str3,len_str4;//SQLLEN len_str1, len_str2, len_str3;printf("编号\t姓名\t地址\t年龄\n");while(SQLFetch(hstmt)!=SQL_NO_DATA){SQLGetData(hstmt,1,SQL_C_CHAR,str1,50,&len_str1); //获取第一列数据SQLGetData(hstmt,2,SQL_C_CHAR,str2,50,&len_str2); SQLGetData(hstmt,3,SQL_C_CHAR,str3,50,&len_str3); SQLGetData(hstmt,4,SQL_C_CHAR,str4,50,&len_str4); printf("%s\t%s\t%s\t%s\n",str1,str2,str3,str4);}}SQLFreeHandle(SQL_HANDLE_DBC,hdbc);//释放连接句柄SQLFreeHandle(SQL_HANDLE_ENV,henv);//释放环境句柄return 0;}

运行结果:

VC连接到数据库

//VS连接测试#include<stdio.h>#include<windows.h>#include<sql.h>#include<sqlext.h>#include<sqltypes.h>int main(){SQLRETURN ret;SQLHENV henv;SQLHDBC hdbc;SQLHSTMT hstmt;ret=SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv);//申请环境句柄ret=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);ret=SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);//申请数据库连接句柄//vs 使用: SQLWCHAR*SQLWCHAR db[] = L"test_db";SQLWCHAR user[] = L"sa";SQLWCHAR password[] = L"666666";//VS上,这是正确连接用法ret = SQLConnect(hdbc, db, SQL_NTS, user, SQL_NTS, password, SQL_NTS);//错误做法:ret = SQLConnect(hdbc, (SQLWCHAR*)"test_db", SQL_NTS, (SQLWCHAR*)"sa", SQL_NTS, (SQLWCHAR*)"666666", SQL_NTS);//这样转换(SQLWCHAR*)"test_db"将无法连接//vc 6.0 要使用:ret=SQLConnect(hdbc,(SQLCHAR*)"DB_61",SQL_NTS,(SQLCHAR*)"sa",SQL_NTS,(SQLCHAR*)"666666",SQL_NTS);if(!(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO)){printf("连接数据库失败!\n");return -1;}ret=SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);//vc 6.0 要使用:SQLCHAR sql1[]="use DB_61";//VS用的是 SQLWCHARSQLWCHAR sql2[]=L"select * from test_db.dbo.test";//ret=SQLExecDirect(hstmt,sql1,SQL_NTS);ret=SQLExecDirect(hstmt,sql2,SQL_NTS);if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO){SQLCHAR str1[20], str2[20], str3[20], str4[20];//VC 6.0SQLINTEGER len_str1, len_str2, len_str3, len_str4;//SQLLEN len_str1, len_str2, len_str3;printf("编号\t姓名\t地址\t年龄\n");while (SQLFetch(hstmt) != SQL_NO_DATA){SQLGetData(hstmt, 1, SQL_C_CHAR, str1, 50, &len_str1); //获取第一列数据SQLGetData(hstmt, 2, SQL_C_CHAR, str2, 50, &len_str2);SQLGetData(hstmt, 3, SQL_C_CHAR, str3, 50, &len_str3);SQLGetData(hstmt, 4, SQL_C_CHAR, str4, 50, &len_str4);printf("%s\t%s\t%s\t%s\n", str1, str2, str3, str4);}}SQLFreeHandle(SQL_HANDLE_DBC,hdbc);//释放连接句柄SQLFreeHandle(SQL_HANDLE_ENV,henv);//释放环境句柄return 0;}

结果相同:

如需深入了解相关知识,可以参考ODBC官方文档。以上如有问题,欢迎批评指正!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。