2012-01-11 24 views
2

我在本地運行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。這是完全荒謬的,但它有效。如果有人想出點什麼,我仍然想知道這樣做的正確方法,但在此之前,這是必須要做的。

+0

作爲Oracle ...你甚至嘗試過使用OleDb提供商的Oracle客戶端提供商insead嗎? – DRapp 2012-01-20 18:48:15

+0

你應該在這裏發表'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

回答