以下这种方式可行:
HRESULT hr = S_OK;
_bstr_t str = L"Dirver={Oracle ODBC Dirver};DSN=sams;DATABASE=scott;";
str = str + L"UID=scott;";
str = str + L"PWD=tiger";
...
char *sSQL = "select max(EMPNO) as maxid from emp";
// hr=m_cmd.Open(m_Session,sSQL);
hr=m_cmd.Open(m_Session,sSQL,NULL, NULL, DBGUID_DEFAULT, false);
if(SUCCEEDED(hr)) {
hr=m_cmd.MoveFirst();
ULONG nColumns;
DBCOLUMNINFO* pColumnInfo;
// Get the column information from the opened rowset
m_cmd.GetColumnInfo(&nColumns, &pColumnInfo);
pColumnInfo[0].wType = DBTYPE_I4;
pColumnInfo[0].ulColumnSize = 4;
m_cmd.AddBindEntry(pColumnInfo[0]); m_cmd.Bind();
CoTaskMemFree(pColumnInfo); DWORD temp;
m_cmd.GetValue(1, &temp);
CString strValue;
strValue.Format("emp maxid=%d", temp);
MessageBox(strValue); m_cmd.Close();
}
HRESULT hr = S_OK;
_bstr_t str = L"Dirver={Oracle ODBC Dirver};DSN=sams;DATABASE=scott;";
str = str + L"UID=scott;";
str = str + L"PWD=tiger";
...
char *sSQL = "select max(EMPNO) as maxid from emp";
// hr=m_cmd.Open(m_Session,sSQL);
hr=m_cmd.Open(m_Session,sSQL,NULL, NULL, DBGUID_DEFAULT, false);
if(SUCCEEDED(hr)) {
hr=m_cmd.MoveFirst();
ULONG nColumns;
DBCOLUMNINFO* pColumnInfo;
// Get the column information from the opened rowset
m_cmd.GetColumnInfo(&nColumns, &pColumnInfo);
pColumnInfo[0].wType = DBTYPE_I4;
pColumnInfo[0].ulColumnSize = 4;
m_cmd.AddBindEntry(pColumnInfo[0]); m_cmd.Bind();
CoTaskMemFree(pColumnInfo); DWORD temp;
m_cmd.GetValue(1, &temp);
CString strValue;
strValue.Format("emp maxid=%d", temp);
MessageBox(strValue); m_cmd.Close();
}
调用顺序有问题:应先Bind()然后MoveFirst().m_cmd.Bind();
CoTaskMemFree(pColumnInfo);
hr=m_cmd.MoveFirst();