2013-08-28 75 views
0

首先,我測試了簡單的情況:爲什麼選擇查詢到Oracle(View)不起作用?

cmd.Parameters.Add(new OracleParameter(":paramCode", OracleDbType.NVarchar2)).Value = userCode; 
cmd.CommandText = "SELECT * FROM VIEWUSERDATA WHERE Codigo = :paramCode"; 
cmd.CommandType = System.Data.CommandType.Text; 
OracleDataReader reader = cmd.ExecuteReader(); 
while (reader.Read()) 
{ 
    //Works, retrieve data 
} 

另:

cmd.Parameters.Add(new OracleParameter(":paramRole", OracleDbType.NVarchar2)).Value = userRole; 
cmd.CommandText = "SELECT * FROM VIEWUSERDATA WHERE Role = :paramRole"; 
... 
while (reader.Read()) 
{ 
    //Also works 
} 

但加入的時候,不能正常工作。

cmd.Parameters.Add(new OracleParameter(":paramCode", OracleDbType.NVarchar2)).Value = userCode; 
cmd.Parameters.Add(new OracleParameter(":paramRole", OracleDbType.NVarchar2)).Value = userRole; 
cmd.CommandText = "SELECT * FROM VIEWUSERDATA WHERE Role = :paramRole AND Code = :paramCode"; 
... 
while (reader.Read())//don't retrieve anything 
{ 
} 

數據存在,如果我在外部查詢編輯器(窗口)查詢工作正常。

謝謝。

+0

當您執行最後一個查詢時是否有任何行返回?前2個查詢可能工作,但對於最後一個查詢,'where'條件是不同的。 – HappyLee

+0

userCode和userRole是什麼類型?只是絃樂? – paqogomez

+0

嘗試使用OR而不是AND,它應該工作。問題在於沒有包含該角色和該代碼的行。 – Casperah

回答

4

默認情況下,Oracle參數綁定是按位置而不是按名稱。在執行查詢之前,調用兩個cmd.Parameters.Add調用或設置cmd.BindByName = true;