大神求教!我用VC2010 编了个小系统,用ODBC方式连接SQL Server

大神求教!我用VC2010 编了个小系统,用ODBC方式连接SQL Server,第1张

代码连接方法:

string strCon="Driver=数据库提供程序名;Server=数据库服务器名;Trusted_Connection=yesDatabase=数据库名;";

OdbcConnection odbcconn=new OdbcConnection(strCon)

连接了之后调用就可以了 如果还是不懂 可以找个小例子看下就明白了~

VC++中无法直接嵌入SQL。某些数据库产品提供在C语言中嵌入SQL的工具(如Oracle的Pro*C),这些工具一般是对嵌入SQL的VC++代码进行预编译,生成符合C++语法规则的代码再交给C++编译器进行编译。

对于你的情况,你需要决定采用哪种数据库和连接方式。VC++支持DAO、ODBC、ADO等多种连接方式,自身支持Access等数据库,也可以通过前面的几种连接方式连接大型数据库。不管哪种方式,一般都是先建立数据集,然后调用数据集的某个方法来执行SQL语句。例如:

CDatabase db

db.OpenEx(_T("DSN=PubsUID=saPWD="))

CRecordset rs(db)

rs.Open( CRecordset::dynaset,

_T( "Select L_Name from Customer" ) )

===解答2====

这个问题,我不知道你的基础有多少,大体说一下,你先编一个文件,名叫ODBCTest.c

在VC++6.0中新建一个Win32 Console Application的项目,并将项目命名为ODBCTest.

然后,将已经写好的ODBCTest.c文件加入到该项目的Source Files中,编译并且执行.执行完成后,SQL Server中Student表的数据即为Kingbase中Student表的数据备份.

实验源代码.以下源码,给出了一些注释,供参考.

#include

#include

#include

#include

#include

#include

#define SNO_LEN 30

#define NAME_LEN 50

#define DEPART_LEN 100

#define SSEX_LEN 5

int main()

{

/* Step 1 定义句柄和变量 */

//以king开头的表示的是连接KINGBASEES的变量

//以server开头的表示的是连接SQLSERVER的变量

SQLHENV kinghenv, serverhenv//环境句柄

SQLHDBC kinghdbc,serverhdbc//连接句柄

SQLHSTMT kinghstmt,serverhstmt//语句句柄

SQLRETURN ret

SQLCHAR sName[NAME_LEN], sDepart[DEPART_LEN],sSex[SSEX_LEN],sSno[SNO_LEN]

SQLINTEGER sAge

SQLINTEGER cbAge = 0, cbSno = SQL_NTS, cbSex = SQL_NTS,cbName = SQL_NTS,cbDepart = SQL_NTS

/* Step 2 初始化环境 */

ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &kinghenv)

ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &serverhenv)

ret = SQLSetEnvAttr(kinghenv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0)

ret = SQLSetEnvAttr(serverhenv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0)

/* Step 3 :建立连接 */

ret = SQLAllocHandle(SQL_HANDLE_DBC, kinghenv, &kinghdbc)

ret = SQLAllocHandle(SQL_HANDLE_DBC, serverhenv, &serverhdbc)

ret = SQLConnect(kinghdbc,

"KingbaseES ODBC",SQL_NTS,

"SYSTEM",SQL_NTS,

"MANAGER",SQL_NTS)

if (!SQL_SUCCEEDED(ret)) //连接失败时返回错误值

return -1

ret = SQLConnect(serverhdbc,

"SQLServer",SQL_NTS,

"sa",SQL_NTS,

"sa",SQL_NTS)

if (!SQL_SUCCEEDED(ret)) //连接失败时返回错误值

return -1

/* Step 4 :初始化语句句柄 */

ret = SQLAllocHandle(SQL_HANDLE_STMT, kinghdbc, &kinghstmt)

ret = SQLSetStmtAttr(kinghstmt,SQL_ATTR_ROW_BIND_TYPE,(SQLPOINTER)SQL_BIND_BY_COLUMN,SQL_IS_INTEGER )

ret = SQLAllocHandle(SQL_HANDLE_STMT, serverhdbc, &serverhstmt)

/* Step 5 :两种方式执行语句 */

/* 预编译带有参数的语句 */

ret = SQLPrepare(serverhstmt,"INSERT INTO STUDENT (SNO,SNAME,SSEX,SAGE,SDEPT) VALUES ( , , , , )", SQL_NTS)

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

{

ret = SQLBindParameter(serverhstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR,SQL_CHAR, SNO_LEN, 0, sSno, 0, &cbSno)

ret = SQLBindParameter(serverhstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR,SQL_CHAR, NAME_LEN, 0, sName, 0, &cbName)

ret = SQLBindParameter(serverhstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR,SQL_CHAR, 2, 0, sSex, 0, &cbSex)

ret = SQLBindParameter(serverhstmt, 4, SQL_PARAM_INPUT, SQL_C_LONG,SQL_INTEGER, 0, 0, &sAge, 0, &cbAge)

ret = SQLBindParameter(serverhstmt, 5, SQL_PARAM_INPUT, SQL_C_CHAR,SQL_CHAR, DEPART_LEN, 0, sDepart, 0, &cbDepart)

}

/*执行SQL语句*/

ret = SQLExecDirect(kinghstmt,"SELECT * FROM STUDENT",SQL_NTS)

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

{

ret = SQLBindCol(kinghstmt, 1, SQL_C_CHAR,sSno,SNO_LEN, &cbSno)

ret = SQLBindCol(kinghstmt, 2, SQL_C_CHAR, sName, NAME_LEN, &cbName)

ret = SQLBindCol(kinghstmt, 3, SQL_C_CHAR, sSex, SSEX_LEN, &cbSex)

ret = SQLBindCol(kinghstmt, 4, SQL_C_LONG, &sAge, 0, &cbAge)

ret = SQLBindCol(kinghstmt, 5, SQL_C_CHAR, sDepart, DEPART_LEN, &cbDepart)

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/6804074.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-28
下一篇2023-03-28

发表评论

登录后才能评论

评论列表(0条)

    保存