C语言连接以及操作SQL Server 2005数据库

时间:2022-06-01 17:57:40
目前有一段用C语言编写的代码,数据都是存放在txt文件中,然后读入存放到程序中的多维数组中。
现在,想拿大数据量做实验,这些数据存放在SQL Server 2005数据库中。
我想问一下,如何用C语言连接以及操作SQL Server 2005数据库?
以实现读取、改写其中数据的目的?
目前的操作平台是VC++6.0,VS.net2003也可以。
只知道可以通过ODBC来实现,具体如何操作我还搞不清楚。


10 个解决方案

#1


google.

#2


引用 1 楼 quwei197874 的回复:
google.

谢谢,正在google。
下面是我找到的两段代码:
1,http://simpledev.iteye.com/blog/339537;
2,http://www.rupeng.com/forum/thread-3059-1-1.html。
均给出了如何用C连接SQL Server 2005数据库的方法,其实我想请教的是读取数据库时,要在
C代码里嵌入SQL语句吗?没读一次都要嵌入一次?
然后就能像查询数组中的元素一样进行读取吗?
不好意思,我对于连接数据库这方面不懂。

#3


该回复于2011-04-07 17:30:51被版主删除

#4


odbc,odbc api或者ADO都可以
用VC的话,如果不用数据库控件,读取数据库都是要在代码里写sql语句的
至于你说的每读一次都要嵌入一次,我表示没看懂

#5


引用 4 楼 ionstorm2 的回复:
odbc,odbc api或者ADO都可以
用VC的话,如果不用数据库控件,读取数据库都是要在代码里写sql语句的
至于你说的每读一次都要嵌入一次,我表示没看懂

谢谢,了解了。

#6


谁能推荐一些书或文献,关于如何用C语言连接、读取数据库吗?

#7


谁能推荐一下介绍C语言连接Sql server 2005方面的书籍或资料吗?

#8


该回复于2012-05-14 10:46:58被版主删除

#9


刚开始学习数据库
但是不知道如何把 SQL server2005 与 C语言连起来
想必您现在一定会了 求帮一下忙

#10


我从网上学习了一些,说用ODBC,可用或不用数据源的方法。
但是在sqldriverconnect()的时候,我老是返回-1,不知道为什么。
// compile with: odbc32.lib
#include <stdio.h>
#include <windows.h>
#include <sqlext.h>
#include <sqltypes.h>
#include <odbcss.h>

SQLHENV henv = SQL_NULL_HENV;
SQLHDBC hdbc1 = SQL_NULL_HDBC;
SQLHSTMT hstmt1 = SQL_NULL_HSTMT;

int main()
{
RETCODE retcode;
//SQLCHAR ConnStr[255] = "DRIVER={SQL Server};SERVER=192.168.20.251:1433;UID=demo;PWD=demo;Trusted_Connection=yes;DATABASE=BJGWF;";
SQLCHAR ConnStr[255] = "DIRVER={SQL Server};SERVER=127.0.0.1;UID=demo;PWD=demo;Trusted_Connection=yes;DATABASE=JHS;";
SQLWCHAR outConnStr[255];
SQLSMALLINT OutConnStrLen;

//环境句柄
retcode = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
}
//连接句柄
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1);
}
//连接数据库
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
//retcode = SQLDriverConnect(hdbc1, NULL, (SQLTCHAR*)ConnStr, SQL_NTS, outConnStr, 255, &OutConnStrLen, SQL_DRIVER_NOPROMPT);
retcode = SQLDriverConnect(hdbc1, NULL, (SQLTCHAR*)ConnStr, SQL_NTS, NULL, NULL, NULL, SQL_DRIVER_NOPROMPT);
}
//判断是否连接成功
if( (retcode != SQL_SUCCESS)&&(retcode != SQL_SUCCESS_WITH_INFO) )
printf("连接失败");
else
printf("连接成功");
return 0;
}

#1


google.

#2


引用 1 楼 quwei197874 的回复:
google.

谢谢,正在google。
下面是我找到的两段代码:
1,http://simpledev.iteye.com/blog/339537;
2,http://www.rupeng.com/forum/thread-3059-1-1.html。
均给出了如何用C连接SQL Server 2005数据库的方法,其实我想请教的是读取数据库时,要在
C代码里嵌入SQL语句吗?没读一次都要嵌入一次?
然后就能像查询数组中的元素一样进行读取吗?
不好意思,我对于连接数据库这方面不懂。

#3


该回复于2011-04-07 17:30:51被版主删除

#4


odbc,odbc api或者ADO都可以
用VC的话,如果不用数据库控件,读取数据库都是要在代码里写sql语句的
至于你说的每读一次都要嵌入一次,我表示没看懂

#5


引用 4 楼 ionstorm2 的回复:
odbc,odbc api或者ADO都可以
用VC的话,如果不用数据库控件,读取数据库都是要在代码里写sql语句的
至于你说的每读一次都要嵌入一次,我表示没看懂

谢谢,了解了。

#6


谁能推荐一些书或文献,关于如何用C语言连接、读取数据库吗?

#7


谁能推荐一下介绍C语言连接Sql server 2005方面的书籍或资料吗?

#8


该回复于2012-05-14 10:46:58被版主删除

#9


刚开始学习数据库
但是不知道如何把 SQL server2005 与 C语言连起来
想必您现在一定会了 求帮一下忙

#10


我从网上学习了一些,说用ODBC,可用或不用数据源的方法。
但是在sqldriverconnect()的时候,我老是返回-1,不知道为什么。
// compile with: odbc32.lib
#include <stdio.h>
#include <windows.h>
#include <sqlext.h>
#include <sqltypes.h>
#include <odbcss.h>

SQLHENV henv = SQL_NULL_HENV;
SQLHDBC hdbc1 = SQL_NULL_HDBC;
SQLHSTMT hstmt1 = SQL_NULL_HSTMT;

int main()
{
RETCODE retcode;
//SQLCHAR ConnStr[255] = "DRIVER={SQL Server};SERVER=192.168.20.251:1433;UID=demo;PWD=demo;Trusted_Connection=yes;DATABASE=BJGWF;";
SQLCHAR ConnStr[255] = "DIRVER={SQL Server};SERVER=127.0.0.1;UID=demo;PWD=demo;Trusted_Connection=yes;DATABASE=JHS;";
SQLWCHAR outConnStr[255];
SQLSMALLINT OutConnStrLen;

//环境句柄
retcode = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
}
//连接句柄
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1);
}
//连接数据库
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
//retcode = SQLDriverConnect(hdbc1, NULL, (SQLTCHAR*)ConnStr, SQL_NTS, outConnStr, 255, &OutConnStrLen, SQL_DRIVER_NOPROMPT);
retcode = SQLDriverConnect(hdbc1, NULL, (SQLTCHAR*)ConnStr, SQL_NTS, NULL, NULL, NULL, SQL_DRIVER_NOPROMPT);
}
//判断是否连接成功
if( (retcode != SQL_SUCCESS)&&(retcode != SQL_SUCCESS_WITH_INFO) )
printf("连接失败");
else
printf("连接成功");
return 0;
}