_RecordsetPtr Open抛异常

sallan 2009-12-20 11:17:36
_RecordsetPtr Open抛异常
以下是相关代码

BOOL CAdoTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// 将“关于...”菜单项添加到系统菜单中。

// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}

// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标

// TODO: 在此添加额外的初始化代码
if (!AfxOleInit())
{
AfxMessageBox(_T("初始化失败!"));
return FALSE;
}

try
{
//´创建connection连接对象
// m_pConnection.CreateInstance("ADODB.Connection");
m_pConnection.CreateInstance(_uuidof(Connection));
//设置连接字符串
_bstr_t strConnect= "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Test;Data Source=孙健;Initial File Name=E:\\公司界面试验版\\AdoTest\\Test.mdf";
// AfxMessageBox(strConnect,0,0);
// SERVER 和 UID,PWD的设定需要根据自己的情况
m_pConnection->Open(strConnect, "", "", adModeUnknown);

}
//捕捉异常
catch(_com_error e)
{
//显示错误信息
AfxMessageBox(e.Description());
}

return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}

BOOL CAdoTestDlg::OpenRecordSet(_RecordsetPtr &recPtr, CString &strSQL)
{
CAdoTestApp* pApp = (CAdoTestApp*)AfxGetApp();
// 创建记录集对象
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
// 因为它有时会经常出现一些想不到的错误
try
{
// 从数据库中打开表
recPtr->Open(strSQL.AllocSysString(),
pApp->m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch (_com_error e)
{
CString strError;
strError.Format(_T("警告:打开数据表时发生异常。 错误信息: %s"),\
e.ErrorMessage());
AfxMessageBox(strError);
return FALSE;
}
return TRUE;

}

void CAdoTestDlg::OnBnClickedButtonInsert()
{
// TODO: Add your control notification handler code here
CString strSQL;
UpdateData(TRUE);
// 打开纪录集,选择表名
strSQL = "select * from Name";
if (!OpenRecordSet(m_pRecordset, strSQL))
{
AfxMessageBox(_T("没有成功打开数据表"));
return ;
}
try
{
m_pRecordset->AddNew();
m_pRecordset->PutCollect("Name", _variant_t(m_strInsert));
}
catch(_com_error e)
{
CString strError;
strError.Format(_T("警告:插入信息时发生异常。错误信息。%s"), e.ErrorMessage());
AfxMessageBox(strError);
}
m_pRecordset->Close();
m_pRecordset = NULL;
AfxMessageBox(_T("插入成功!"));
}

此处Open抛异常
// 从数据库中打开表
recPtr->Open(strSQL.AllocSysString(),
pApp->m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
请大家给予帮助,谢谢
还有一个问题,我最近刚学数据库,怎么在MSDN中没有发现_RecordsetPtr, _CommandPtr, _ConnetionPtr阿
如何查找它们阿
...全文
390 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
arong1234 2009-12-22
  • 打赏
  • 举报
回复
错误信息说你请求的操作已经无法完成。你这个句柄很可能根本没创建成功
你这里又有mdf文件,又有data source,看起来就不对
我对这个链接字符串不熟悉,楼主自己找找链接字符串的东西吧

如果不确信,建议不要用这种方法,而是采用创建CRecordset派生类的方法,让系统帮你设置
辛鹤 2009-12-20
  • 打赏
  • 举报
回复
com
arong1234 2009-12-20
  • 打赏
  • 举报
回复
你不是已经打印了错误信息么?它得错误到底是啥?
sallan 2009-12-20
  • 打赏
  • 举报
回复
错误信息:Unknown error 0x800A0E7D

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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