程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> ado連接sql數據庫-ADO的Recordset類的Open方法的用法

ado連接sql數據庫-ADO的Recordset類的Open方法的用法

編輯:編程綜合問答
ADO的Recordset類的Open方法的用法

在MFC裡用ADO連接數據庫
下面這一句是測試用的,是正確的:

m_pAdoRecordset->Open("select UserName from OJUser where UserName = 'admin'",_variant_t((IDispatch *)m_pAdoConnect,true),adOpenDynamic,adLockOptimistic,adCmdText);

但是因為我要根據輸入值來獲取查詢語句,所以我是這麼寫的:

CString strSQL;
    strSQL.Format(_T("select UserName from OJUser where UserName = ‘%s’"),m_Username);

測試的時候這一句也沒問題,獲得的strSQL也是正確的SQL語句
open方法我是這麼寫的:

m_pAdoRecordset->Open((_variant_t)strSQL,_variant_t(m_pAdoConnect,true),adOpenStatic,adLockOptimistic,adCmdText);

這裡運行的時候就會發生中斷,中斷文件在msado15.tli
中斷代碼在

inline HRESULT Recordset15::Open ( const _variant_t & Source, const _variant_t & ActiveConnection, enum CursorTypeEnum CursorType, enum LockTypeEnum LockType, long Options ) {
    HRESULT _hr = raw_Open(Source, ActiveConnection, CursorType, LockType, Options);
    if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
    return _hr;
}

的return處
繼續執行,下一次中斷在

inline FieldPtr Fields15::GetItem ( const _variant_t & Index ) {
    struct Field * _result = 0;
    HRESULT _hr = get_Item(Index, &_result);
    if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
    return FieldPtr(_result, false);
}

的return處
最後中斷在

inline _variant_t Field20::GetValue ( ) {
    VARIANT _result;
    VariantInit(&_result);
    HRESULT _hr = get_Value(&_result);
    if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
    return _variant_t(_result, false);
}

的 HRESULT _hr = get_Value(&_result);

我想知道這是為什麼?另外我用CString保存動態SQL語句後 open函數該怎麼用?
本人學生,懂的不多,希望各位大大說的詳細點,謝謝!

最佳回答:


可以用[url=http://blog.csdn.net/zyq5945/article/details/7998001]ADO助手[/url]試試你的數據庫連接字符串和SQL語句。
或者加異常捕獲看是什麼錯誤
[code=C/C++]try
{
//你的ADO代碼
}
catch (_com_error& e)
{
CString strMsg;
strMsg.Format(_T("錯誤描述:%s\n錯誤消息%s"),
(LPCTSTR)e.Description(),
(LPCTSTR)e.ErrorMessage());
AfxMessageBox(strMsg);
}
[/code]

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved