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或是系统的问题应如何解决,谢谢了!! 展开
在学习《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或是系统的问题应如何解决,谢谢了!! 展开
3个回答
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();
另外,虚机团上产品团购,超级便宜
现在用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();
另外,虚机团上产品团购,超级便宜
展开全部
在hr=m_pConnection.CreateInstance(__uuidof(Connection));之前加::CoInitialize(NULL);
然后在退出的时候加::CoUninitialize();
然后在退出的时候加::CoUninitialize();
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
将C:\Program Files\Common Files\System 目录下的DLL全部重新注册试下。
追问
我试过了,但提示找不到模块
追答
。。。。。。。请问你怎么注册的?怎么会提示找不到模块。。
regsvr32 "动态库路径"
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询