我在本地運行Oracle 11g2 32b,並在代碼中連接到它。我使用VC++並與OLE DB連接。連接工作正常(最後),我可以插入數據到我的表沒有問題。使用OLEDB選擇語句獲取錯誤的值
但是,如果我遇到問題,那麼在提取數據時會遇到問題。我只有一個名爲ITEM的表格來測試我的東西。我使用CCommand。該命令執行並且我的命令實際上包含數據。實際上,它包含正確數量的列和行;但是,它似乎並不包含正確的數據。
當我運行這個時,我應該得到7行,編號爲4到10,而我反而會收到逐漸增加和遠離83 000 000和168 000 000之間的值。當我嘗試獲取列名時,我也會得到數字的字符串。
stringstream stream;
string str;
stream << "SELECT * FROM ITEM";
str = stream.str();
wstring commandText = s2ws(str);
hr = cmd.Open(session, commandText.c_str());
if(FAILED(hr)){
cout << "Select failed." << endl;
//Cropped for brevity, closes connection and returns -1
}else{
cout << "Selection successful." << endl;
hr = cmd.MoveFirst();
int counter = 0;
while(!FAILED(hr) && hr != DB_S_ENDOFROWSET){
counter++;
hr = cmd.MoveNext();
cout << *(long*)(cmd.GetValue(1)) << endl;
}
cout << "Number of entries : " << counter << endl;
}
我第一次,雖然它可能是一個數據類型的問題(在Oracle我列的數據類型爲整數),所以我嘗試不同的類型,而不是「長」,但無濟於事。
在此先感謝。
編輯:我能夠檢索另一個測試表上的VARCHAR,但我仍然在努力與數字。
編輯:進一步的測試表明,4個不同的數字DBTYPE都讀取不同的離羣數字。
編輯:我能夠讀取數字作爲字符串,並將其轉換回我的代碼中的int。這是完全荒謬的,但它有效。如果有人想出點什麼,我仍然想知道這樣做的正確方法,但在此之前,這是必須要做的。
作爲Oracle ...你甚至嘗試過使用OleDb提供商的Oracle客戶端提供商insead嗎? – DRapp 2012-01-20 18:48:15
你應該在這裏發表'descr your_table'。在你的代碼中,你將數字轉換爲'long'(對於long *的內容),但是,這些數字如何存儲在indatabase中?什麼是'typeof(cmd.GetValue(1))'?爲什麼你不直接cout cmd.GetValue(1):'cout << * cmd.GetValue(1)' – danihp 2012-01-21 15:48:49