如何实现c++/vc连接数据库 急求啊如何实现c++/vc连接数据库举个详细的实例,各位大侠,小弟刚学数据库,学的语言是出c++,谢谢各位大哥多多帮忙 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个问题,我不知道你的基础有多少,大体说一下,你先编一个文件,名叫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); } void smsLogon::InitSQLServer(CString server, CString db, CString UserName, CString Pwd){m_pConnection.CreateInstance("ADODB.Connection");CString strCn;strCn.Empty();strCn="provider=SQLOLEDB;data source="+server+";initial catalog="+db+";userID="+UserName+";PassWord="+Pwd;_variant_t bcnstr=_variant_t(strCn);_variant_t bunstr=_variant_t(UserName);_variant_t bpwdstr=_variant_t(Pwd);//打开一个连接try{m_pConnection->Open(_bstr_t(bcnstr),_bstr_t(bunstr),_bstr_t(bpwdstr),-1);//adOpenUnspecified}catch(_com_error e){CString errormessage;errormessage.Format("Warning: 连接数据库发生异常. 错误信息: %s; 文件: %s; 行: %d\n", e.ErrorMessage(), __FILE__, __LINE__);AfxMessageBox(errormessage);}catch(...){AfxMessageBox("Warning :连接数据库时发生未知错误");}} void smsLogon::ExitDB() //退出时关闭数据库连接{if(m_pConnection!=NULL){m_pConnection->Close();//关闭连接m_pConnection.Release();//释放对象}} #import "C:\Program Files\Common Files\System\ado\msado15.dll" \ no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF") class ADOConn {// 定义变量public: //添加一个指向Connection对象的指针: _ConnectionPtr m_pConnection; //添加一个指向Recordset对象的指针: _RecordsetPtr m_pRecordset;// 定义方法public: ADOConn(); virtual ~ADOConn(); // 初始化—连接数据库 void OnInitADOConn(); // 执行查询 _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL); // 执行SQL语句,Insert Update _variant_t BOOL ExecuteSQL(_bstr_t bstrSQL); void ExitConnect();}; void ADOConn::OnInitADOConn(){ // 初始化OLE/COM库环境 ::CoInitialize(NULL); try { // 创建Connection对象 m_pConnection.CreateInstance("ADODB.Connection"); // 设置连接字符串,必须是BSTR型或者_bstr_t类型 CString strSRC; strSRC="Driver=SQL Server;Server="; strSRC+="."; strSRC+=";Database="; strSRC+="csdn_test"; strSRC+=";UID=SA;PWD="; _bstr_t strConnect(strSRC); m_pConnection->Open(strConnect,"","",adModeUnknown);// AfxMessageBox("hi ,database !!"); } // 捕捉异常 catch(_com_error e) { // 显示错误信息 AfxMessageBox(e.Description()); }} vc的:使用odbc先建立一个odbc驱动 例如testCDatabase m_db在连接数据库的界面对应的类的初始化函数中if (!m_db.isopen()) m_db.open(_t"test")然后建立记录集对象Crecordset rs进行记录访问执行sql语句m_db.executesql("sql语句")最好找一些实例书看 如果提高数据检索效率。 求助 sql 使某一列在原有基础上增加一些内容 多个表合并的问题!超简单 复杂的连表查询,求大神指导 在同一个域中多个SQL2005 经常被其他DB select本机master库造成阻塞 关于分发/订阅?(有兴趣的帮忙up) 一个简单的动态Sql问题 sql server6.5中的dat文件导入7.0中是不是要格式转换一下? 找一个做VFP程序设计的朋友! HTML中的index()有什么用? 如何使用递归或其他方法获取父内容所有子内容。 游标问题
这个问题,我不知道你的基础有多少,大体说一下,你先编一个文件,名叫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);
}
void smsLogon::InitSQLServer(CString server, CString db, CString UserName, CString Pwd){m_pConnection.CreateInstance("ADODB.Connection");CString strCn;strCn.Empty();strCn="provider=SQLOLEDB;data source="+server+";initial catalog="+db+";userID="+UserName+";PassWord="+Pwd;_variant_t bcnstr=_variant_t(strCn);_variant_t bunstr=_variant_t(UserName);_variant_t bpwdstr=_variant_t(Pwd);//打开一个连接try{m_pConnection->Open(_bstr_t(bcnstr),_bstr_t(bunstr),_bstr_t(bpwdstr),-1);//adOpenUnspecified}catch(_com_error e){CString errormessage;errormessage.Format("Warning: 连接数据库发生异常. 错误信息: %s; 文件: %s; 行: %d\n", e.ErrorMessage(), __FILE__, __LINE__);AfxMessageBox(errormessage);}catch(...){AfxMessageBox("Warning :连接数据库时发生未知错误");}} void smsLogon::ExitDB() //退出时关闭数据库连接{if(m_pConnection!=NULL){m_pConnection->Close();//关闭连接m_pConnection.Release();//释放对象}}
no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")
{
// 定义变量
public:
//添加一个指向Connection对象的指针:
_ConnectionPtr m_pConnection;
//添加一个指向Recordset对象的指针:
_RecordsetPtr m_pRecordset;
// 定义方法
public:
ADOConn();
virtual ~ADOConn();
// 初始化—连接数据库
void OnInitADOConn();
// 执行查询
_RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);
// 执行SQL语句,Insert Update _variant_t
BOOL ExecuteSQL(_bstr_t bstrSQL);
void ExitConnect();
};
{
// 初始化OLE/COM库环境
::CoInitialize(NULL);
try
{
// 创建Connection对象
m_pConnection.CreateInstance("ADODB.Connection");
// 设置连接字符串,必须是BSTR型或者_bstr_t类型
CString strSRC;
strSRC="Driver=SQL Server;Server=";
strSRC+=".";
strSRC+=";Database=";
strSRC+="csdn_test";
strSRC+=";UID=SA;PWD=";
_bstr_t strConnect(strSRC);
m_pConnection->Open(strConnect,"","",adModeUnknown);
// AfxMessageBox("hi ,database !!");
}
// 捕捉异常
catch(_com_error e)
{
// 显示错误信息
AfxMessageBox(e.Description());
}
}
先建立一个odbc驱动 例如testCDatabase m_db
在连接数据库的界面对应的类的初始化函数中
if (!m_db.isopen())
m_db.open(_t"test")
然后建立记录集对象Crecordset rs进行记录访问执行sql语句
m_db.executesql("sql语句")最好找一些实例书看