在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]