MFC中使用CreateInstance实例化ADO连接对象

最近在学习使用ADO连接SQLServer2000数据库,用的是MFC基于对话框的应用程序。在学习《VisualC++实践与提高---数据库开发与工程应用篇》(原奕著)书... 最近在学习使用ADO连接SQL Server 2000数据库,用的是MFC基于对话框的应用程序。
在学习《Visual C++实践与提高---数据库开发与工程应用篇》(原奕 著)书中第四章《影碟出租信息系统》例子

的时候,总是提示hr=m_pConnection.CreateInstance(__uuidof(Connection));不成功

我就是按照书中的例子编写的:
(1)在StdAfx.h中添加:
#pragma warning(disable:4146)
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
#pragma warning(disable:4146)

(2)在CRentDlg::OnInitDialog()函数中添加
//初始化数据库连接
HRESULT hr;
try
{
//实例化连接对象
//hr=m_pConnection.CreateInstance(__uuidof(Connection));
hr=m_pConnection.CreateInstance(__uuidof(Connection));
if(SUCCEEDED(hr))
{
//设置连接串属性为UDL文件
m_pConnection->ConnectionString="File Name=my_data1.udl";
//设置等待连接打开的时间为20s
m_pConnection->ConnectionTimeout=20;
hr=m_pConnection->Open("","","",adConnectUnspecified);

if(FAILED(hr))
{
AfxMessageBox("Open Fail!");
return TRUE;
}
}
else
{
AfxMessageBox("Create Instance of Connection Fail!");
return TRUE;
}
}
catch(_com_error e)
{
//给出异常信息
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
AfxMessageBox(bstrSource+bstrDescription);
return TRUE;
}

(3)在CRentApp::InitInstance()中添加初始化:
::CoInitialize(NULL);

(4)在CRentApp::ExitInstance()中添加:
::CoUninitialize();

后来我又试着使用:
AfxOleInit函数也不行,提示出错。

并且通过my_data1.udl连接数据库也提示成功,用的是MDAC2.7版本。可是就是不成功,总提示Create Instance

of Connection Fail! 想请大家帮忙看一下是什么问题,如果是VC6.0或是系统的问题应如何解决,谢谢了!!
展开
 我来答
匿名用户
2011-04-20
展开全部
行SQL语句-》获得查询结果-》关闭数据库连接,不同的数据库访问技术有不同的要求,比如用C API诘问MySql数据库的时候还得释放查询结果集。

现在用VC、MFC访问数据库常用的技术是ADO,很实用!

导入ADO库
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "adoEOF")
2、用导入的动态库的指针操作数据库.
打开数据库连接
_ConnectionPtr m_pConn; // 数据库连接指针
// 创建Conneciton对象
m_pConn.CreateInstance(_T("ADODB.Connection"));
用ConnectionPtr 的open方法m_pConn->Open(_bstr_t(m_sConn),
_T(""), _T(""), lOptions));
m_sConn为你连接数据库的信息,你应该按照你的要求打开数据库

然后你用打开的那个连接进行操作数据库。比如
_RecordsetPtr pRec = m_pConn->Execute(_bstr_t(pszSql), NULL, CmdText);
pszSql 就你要操作数据库的SQL语句。在这个SQL语句里你可以创建表、更新表等。

用ADO访问的时候要求初始他COM库和释放COM对象
// 初始化COM环境(库)
::CoInitialize(NULL);
//释放COM对象
::CoUninitialize();
另外,虚机团上产品团购,超级便宜
dexahh
推荐于2018-05-06 · TA获得超过354个赞
知道答主
回答量:216
采纳率:100%
帮助的人:290万
展开全部
在hr=m_pConnection.CreateInstance(__uuidof(Connection));之前加::CoInitialize(NULL);
然后在退出的时候加::CoUninitialize();
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
JarodGao
2011-04-18 · 超过27用户采纳过TA的回答
知道答主
回答量:51
采纳率:0%
帮助的人:41.7万
展开全部
将C:\Program Files\Common Files\System 目录下的DLL全部重新注册试下。
追问
我试过了,但提示找不到模块
追答
。。。。。。。请问你怎么注册的?怎么会提示找不到模块。。

regsvr32 "动态库路径"
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式