ADO简单问题求教,解决问题立即送分,绝不食言!

TAlucard 2002-06-03 01:26:01
简单连结数据库,代码如下:
_ConnectionPtr m_pConnection;
HRESULT hr;

if (!AfxOleInit())
{
printf("ole 初始化错误");
return FALSE;
}

try {
hr = m_pConnection.CreateInstance
("ADODB.Connection");///创建Connection对象
if(SUCCEEDED(hr)) {
hr=m_pConnection->Open ("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=tsqd;Data Source=GENJURO","","",adModeUnknown);
}
}
catch(_com_error e)///捕捉异常
{
printf("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());///显示错误信息
}
这是个简单的console程序,可是每次运行到m_pConnection.CreateInstance时候返回hr总是失败,为什么?

另外,stdafx包含了如下语句
#include <afxdisp.h>

#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")

请知道的朋友帮个忙,谢谢
...全文
45 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
TAlucard 2002-06-03
  • 打赏
  • 举报
回复
dyw(旺仔)说得很对,我缺少了CoInitialize(NULL);
加上就对了
结贴给分
public 2002-06-03
  • 打赏
  • 举报
回复
【学习】¤¤¤¤¤¤¤¤¤¤【学习】
cityyokel 2002-06-03
  • 打赏
  • 举报
回复
同意dyw(旺仔)的观点。
ConInitianlize(NULL);
应该就可以了
Everyday 2002-06-03
  • 打赏
  • 举报
回复
msdn library-......../Platform SDK/Data Services/Microsoft Data Access Components(MDAC) SDK/Microsoft ActiveX Data Objects (ADO)/ADO Programmer's Guide/Section V:Appendixes/Appendix C:Programming with ADO/Using ADO with Microsoft Visual C++(到这里双击这个主题,你就可以选择你所想要的东西了)

其实很多东西,还是MSDN里面最全,自己看吧
smppms 2002-06-03
  • 打赏
  • 举报
回复
MSSQLServer runing?
JeasonZhao 2002-06-03
  • 打赏
  • 举报
回复
m_pConnection.CreateInstance(__uuidof(Connection));
dyw 2002-06-03
  • 打赏
  • 举报
回复
#include "stdafx.h"
#include <stdio.h>

#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")

int main(int argc, char* argv[])
{
HRESULT hr;
CoInitialize(0);
// if (!AfxOleInit())
// {
// printf("ole 初始化??");
// return FALSE;
// }

try {
_ConnectionPtr m_pConnection;
hr = m_pConnection.CreateInstance
("ADODB.Connection");///?建Connection?象
if(SUCCEEDED(hr)) {
MessageBox(NULL, "ok", "", MB_OK);
} else {
CString str;
str.Format("hr=0x%08x", hr);
MessageBox(NULL, str, "", MB_OK);
}
}
catch(_com_error e)///捕捉?常
{
printf("?接数据?失?!\r\n??信息:%s",e.ErrorMessage());///?示??信息
}

CoUninitialize();
return 0;
}

1)AfxOleInit内部可能未调用CoInitialize;直接使用CoInitialize。
2)注意m_pConnection的声明范围问题--COM库的初始化与释放
另一做法:
CoInitialize(0);
{
_ConnectionPtr m_pConnection;
...
}
CoUninitialize();


alpasino 2002-06-03
  • 打赏
  • 举报
回复
_ConnectionPtr m_pConnection;

AfxOleInit()
把这两个位置换一下,我想是这个问题!!!
TAlucard 2002-06-03
  • 打赏
  • 举报
回复
这是个console程序,AfxOleInit已经放在main的一开始了
Pipi0714 2002-06-03
  • 打赏
  • 举报
回复
注意:你的初始化Com应该放在你的程序一开始执行的部分。比如说:在...App中的Init....初始化部分试试

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧