1
我正在構建我的第一個MFC應用程序。我已成功連接到數據庫,但是當我嘗試執行查詢時,hResult
變爲DB_E_NOTABLE
。MFC SQL查詢返回DB_E_NOTABLE
這是我的代碼:
class CCitiesTable : public CTable<CAccessor<CCitiesTableAccessor> >
{
public:
bool SelectAll(CCitiesArray& oCitiesArray)
{
CDataSource oDataSource;
CSession oSession;
CCitiesTable oCitiesTable;
try
{
HRESULT hResult = CoInitialize(0);
if (FAILED(hResult))
{
//Message(_T("Unable to CoInitialize COM Interface."));
return FALSE;
}
CDBPropSet oDBPropSet(DBPROPSET_DBINIT);
oDBPropSet.AddProperty(DBPROP_INIT_DATASOURCE, _T("LENOVO2\\SQL2008")); // сървър
oDBPropSet.AddProperty(DBPROP_AUTH_USERID, _T("sa"));
oDBPropSet.AddProperty(DBPROP_AUTH_PASSWORD, _T("massive"));
oDBPropSet.AddProperty(DBPROP_INIT_CATALOG, _T("PhoneBookDB"));
oDBPropSet.AddProperty(DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO, false);
oDBPropSet.AddProperty(DBPROP_INIT_LCID, 1033L);
oDBPropSet.AddProperty(DBPROP_INIT_PROMPT, static_cast<short>(4));
// Свързваме се към базата данни
hResult = oDataSource.Open(_T("SQLOLEDB.1"), &oDBPropSet);
if (FAILED(hResult))
{
//Message(_T("Unable to connect to SQL Server database. Error: %d"), hResult);
return FALSE;
}
//Open session
hResult = oSession.Open(oDataSource);
if (FAILED(hResult))
{
//Message(_T("Unable to open session. Error: %d"), hResult);
oDataSource.Close();
return FALSE;
}
//Make query
CString strQuery;
strQuery = _T("SELECT * FROM dbo.CITIES");
// Execute query
hResult = oCitiesTable.Open(oSession, strQuery);
執行上面的HRESULT代碼後是DB_E_NOTABLE。除了桌子在那裏。數據庫:PhoneBookDB架構:dbo表:CITIES。查詢在SQL Server Management Studio中工作得很好。
你確定你需要的dbo.CITIES並不僅僅是城市 –
伊夫試圖與dbo.CITIES,城市和PhoneBookDB.dbo.CITIES。他們都不工作。 – VTodorov
'oCitiesTable'從哪裏來?您顯示的代碼中唯一的地方就是結尾。另外:查詢不一定是一個表。您可以打開一個表格,也可以執行查詢,但可能需要不同的對象類型。 – crashmstr