2014-01-30 94 views
0

我有以下代碼:OracleDataReader HasRows拋出無效號碼特殊

int count = 0; 
OracleDataReader dr; 
parameters = new Dictionary<string, string>(); 
parameters.Add("Username", UserName); 

query = "Select KEY from TABLE1 where USERID=:Username AND KEY IN("; 

foreach (string Location in Locations) 
{ 
    query = query + ":Loc" + count.ToString() + ","; 

    parameters.Add("Loc" + count.ToString(), Location); 

    count++; 
} 
query=query.TrimEnd(','); 
query = query + ")"; 

dr=objConexion.ExecuteQuery(query, parameters, objConexion.OracleCnn); 


public OracleDataReader ExecuteQuery(String query, Dictionary<string,string> Parameters, OracleConnection oracleCnn) 
{ 
    OracleDataReader OracleDr; 
    OracleCommand OracleCmd; 
    try 
    { 


     OracleCmd = oracleCnn.CreateCommand(); 
     OracleCmd.CommandText = query; 


     foreach (KeyValuePair<string, string> kvp in Parameters) 
     { 

      OracleCmd.Parameters.AddWithValue(kvp.Key, kvp.Value); 

     } 

     OracleCmd.Prepare(); 
     OracleDr = OracleCmd.ExecuteReader(); 

    } 
    catch 
    { 
     OracleDr = null; 
    } 

    return OracleDr; 
} 

出於某種原因,代碼工作正常,有時和其他它doesn't,調試我發現後,當它doesn't工作中, Datareader的「HasRows」方法有一個例外,特別是一個無效數字例外。我試圖直接在DBMS上運行結果查詢,並且它執行完美,有誰知道爲什麼會發生這種異常?我錯過了什麼?

+0

你能提供例外嗎?或者它只是無效的號碼? - 當字符串轉換爲數字失敗時,在oracle中拋出InvalidNumber。請提供表格說明和列類型。 – Christian13467

+0

ORA-01722:數字無效,但在調試時只看到:HasRows \t'dr.HasRows'生成一個異常'System.Data.OracleClient.OracleException'。他們所選擇的Key列是一個INTEGER,UserID是一個varchar2 – user3255067

回答

0

執行以下操作找到問題:

OracleCmd.Parameters.AddWithValue(kvp.Key, int.Parse(kvp.Value)); 

我想,你傳遞一些 「壞整數」 的位置 的一個看到這個sql error "ORA-01722: invalid number"

並請,刪除

OracleCmd.Prepare(); 

另一件事,爲什麼你通過連接

public OracleDataReader ExecuteQuery(String query, 
            Dictionary<string,string> Parameters, 
            OracleConnection oracleCnn) 

執行前傳遞一個連接字符串並打開連接。使用適當CommandBehavior

MSDN:[CommandBehavior.CloseConnection]當執行命令時,當相關聯的DataReader對象被關閉相關聯的連接對象被關閉。

+0

問題不在參數上,因爲查詢有時會起作用,我反覆嘗試並得到了相同的結果(也嘗試刪除Prepare語句。因爲我有一個自定義連接對象,它包含不同的連接字符串(針對不同的環境),並根據參數打開適當的連接,在我發佈的代碼片段之前和之後的代碼中正在打開和關閉連接。它可能不是最好的方式,但這是我必須處理的。 – user3255067

+0

@ user3255067錯誤發生在哪行代碼? –

+0

管理髮現問題,它實際上在我發佈的代碼段之外,它是一個邏輯錯誤,那是發送字符串有時而不是整數作爲您建議的參數,謝謝。 – user3255067

相關問題