![]() |
#2
qianyou2012-10-24 16:39
问题终于解决了,代码再重新贴一遍
ADOConn.h ![]() #ifndef _ADOConn_H_ #define _ADOConn_H_ #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")// rename("EOF",) #pragma once class ADOConn { public: //ADOConn(void); //~ADOConn(void); ::_ConnectionPtr m_pConnection; ::_RecordsetPtr m_pRecordset; public: //初始化连接数据库 void OnInitADOConn(); //执行查询,返回结果集 ::_RecordsetPtr & GetRecordSet(_bstr_t bstrSQL); //执行sql语句,更新数据库 bool ExecuteSQL(_bstr_t bstrSQL); void ExitConnection(); }; #endif ADOConn.cpp ![]() #include "StdAfx.h" #include "ADOConn.h" #include <iostream> using namespace std; void ADOConn::OnInitADOConn() { ::CoInitialize(NULL); //初始化OLE/COM环境,为访问ADO接口做准备 //HRESULT hr; //发生链接错误 try { HRESULT hr = m_pConnection.CreateInstance(__uuidof(Connection)); //创建Connection对象 _bstr_t strConnection="Provider=SQLOLEDB;Persist Security Info=false/*是否window身份验证*/;Initial Catalog=shopping/*数据库名*/;Data Source=127.0.0.1/*IP地址*/"; m_pConnection->Open(strConnection,"sa/*这里写用户名*/","123/*密码*/",adModeUnknown); if(SUCCEEDED(hr)) { cout<<"成功连接数据库"<<endl; } } catch(_com_error e) //捕捉异常 { cout<<e.Description()<<"连接数据库失败"<<endl; // } } _RecordsetPtr & ADOConn::GetRecordSet(_bstr_t bstrSQL) { try { //连接数据库,如果Connection对象为空,重新连接数据库 if(m_pConnection == NULL) OnInitADOConn(); //创建记录集对象 m_pRecordset.CreateInstance(_uuidof(Recordset)); m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); } catch(_com_error e) { cout<<e.Description()<<endl; } //返回记录集 return m_pRecordset; } bool ADOConn::ExecuteSQL(_bstr_t bstrSQL) { try { //是否已经连接数据库 if(m_pConnection == NULL) OnInitADOConn(); m_pConnection->Execute(bstrSQL,NULL,adCmdText); return true; } catch(_com_error e) { cout<<e.Description()<<endl; return false; } } void ADOConn::ExitConnection() { //关闭记录集和连接 if(m_pRecordset != NULL) m_pRecordset->Close(); m_pConnection->Close(); //释放环境 ::CoInitialize(NULL); //关闭ole/com库,释放资源 } ADOTest.cpp ![]() // ADOTest.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "ADOConn.h" #include <iostream> using namespace std; void main() { ADOConn ado; _bstr_t bstrSQL; ado.OnInitADOConn(); return; ado.GetRecordSet(bstrSQL); ado.ExecuteSQL(bstrSQL); ado.ExitConnection(); } |

#include "StdAfx.h"
#include "ADOConn.h"
#include <iostream>
using namespace std;
void ADOConn::OnInitADOConn()
{
::CoInitialize(NULL); //初始化OLE/COM环境,为访问ADO接口做准备
HRESULT hr;
try
{
hr = m_pConnection.CreateInstance("ADO.Connection"); //创建Connection对象
_bstr_t strConnection="driver={sql server};server=(local);uid=sa;pwd=123;database=shopping";
hr = m_pConnection->Open(strConnection,"","",adModeUnknown);
if(SUCCEEDED(hr))
{
cout<<"成功连接数据库"<<endl;
}
}
catch(_com_error e) //捕捉异常
{
cout<<"连接数据库失败"<<endl;
}
}
_RecordsetPtr & ADOConn::GetRecordSet(_bstr_t bstrSQL)
{
try
{
//连接数据库,如果Connection对象为空,重新连接数据库
if(m_pConnection == NULL)
OnInitADOConn();
//创建记录集对象
m_pRecordset.CreateInstance(_uuidof(Recordset));
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(_com_error e)
{
cout<<e.Description()<<endl;
}
//返回记录集
return m_pRecordset;
}
bool ADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
try
{
//是否已经连接数据库
if(m_pConnection == NULL)
OnInitADOConn();
m_pConnection->Execute(bstrSQL,NULL,adCmdText);
return true;
}
catch(_com_error e)
{
cout<<e.Description()<<endl;
return false;
}
}
void ADOConn::ExitConnection()
{
//关闭记录集和连接
if(m_pRecordset != NULL)
m_pRecordset->Close();
m_pConnection->Close();
//释放环境
::CoInitialize(NULL); //关闭ole/com库,释放资源
}
这是我自己添加的连接SQL Server的类,在下面的主函数中进行调用

#include "stdafx.h"
#include "ADOConn.h"
#include <iostream>
using namespace std;
int main()
{
ADOConn ado;
_bstr_t bstrSQL;
//ado.AdoConn();
ado.OnInitADOConn();
//ado.GetRecordSet(bstrSQL);
//ado.ExecuteSQL(bstrSQL);
//ADOConn ExitConnection();
return 0;
}
请各位大虾多多指点啊,整了两天,人都烦死了