MFC 中使用 ADO 连接 SQL Server 2008 R2
一、在工程中添加一个 MFC 类 ADO_Database,当然,你可以定义一个别的类
名,只要这个类名是合法的
二、在解决方案中找到 ADO_Database.h 文件,并在这个文件中进行一下步骤:
1、在头文件的最开始添加以下代码
#import "C:\Program Files\Common Files\System\ado\msado15.dll" \
no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF")
2、在 public 中
//添加一个指向 Connection 对象的指针
_ConnectionPtr m_pConnection;
//添加一个指向 Recordset 对象的指针
_RecordsetPtr m_pRecordset;
3、在 public 中
//添加三个函数
void OnInitADOConn(void);//连接到数据库
void ExitConnect(void);//与数据库断开连接
_RecordsetPtr GetRecordSet(_bstr_t bstrSQL);//获取数据集
三、在解决方案中找到 ADO_Database.cpp 文件,并在文件中进行以下步骤:
1、实现连接数据库方法
void ADO_Database::OnInitADOConn(void)
{
//初始化 OLE/COM 库环境
::CoInitialize(NULL);
try
{
//创建 connection 对象
m_pConnection.CreateInstance("ADODB.Connection");
//设置 SQL Server 的连接字符串,其中 Initial Catalog 为数据库名
称,Data Source 为//服务器名称,Open 函数的第 2、3 个参数分别为数据库的
用户名和密码
_bstr_t strConnect = "Provider=SQLOLEDB.1;Integrated
Security=SSPI;Persist Security Info=False;Initial
Catalog=NetWork_gobang;Data Source=TabbyCat-PC";
m_pConnection->Open(strConnect, "Project", "Project",
adModeUnknown);
}
//捕捉异常
catch (_com_error e)
//显示错误信息
AfxMessageBox(e.Description());
{
}
}
2、实现与数据库断开连接方法
void ADO_Database::ExitConnect(void)
{
//关闭记录集和连接
if (m_pRecordset != NULL)
m_pRecordset->Close();
m_pConnection->Close();
//释放环境
::CoUninitialize();
}
3、实现获取数据集方法
_RecordsetPtr ADO_Database::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)
{
}
e.Description();
//返回记录集
return m_pRecordset;
}
四、调用方法进行数据库操作
1、在头文件中引用并声明
#include "ADO_Database.h"
ADO_Database m_adodatabase;//定义数据库对象
2、使用方法实现数据库的连接、操作和关闭
m_adodatabase.OnInitADOConn();//连接到数据库
CString sql;
sql.Format(L"select* from Information");// Information 为数据表的名称
_RecordsetPtr m_pRecordset;
//打开记录集
m_pRecordset = m_adodatabase.GetRecordSet((_bstr_t)sql);
try
{
m_pRecordset->AddNew();
m_pRecordset->PutCollect("time", (_bstr_t)svtm);//向数据库中添
加 CString 类型的数//据
m_pRecordset->PutCollect("id", tcpPackage.id);//向数据库中添加
int 类型的数据
m_pRecordset->Update();
m_adodatabase.ExitConnect();//断开与数据库的连接
}
catch (...)
{
}
AfxMessageBox(L"写入数据失败!");
return;