[英]ODP.NET delete statement can not pass DBNull as parameter value
使用:.NET 4,ODP.NET 11.2.0.3.0,Oracle數據庫10g 10.2.0.3.0版
我在試圖確定為什么我的刪除語句不起作用時會發瘋。 也許這里有人可以幫助我。
這里是一個沒有工作的代碼:
cmd = New OracleCommand("delete from u_parameters where pkey = :pkey and user_id = :user_id and computer is null", Con)
cmd.Parameters.Add("pkey", OracleDbType.NVarchar2).Value = "Test"
cmd.Parameters.Add("user_id", OracleDbType.Decimal).Value = 1
cmd.ExecuteNonQuery() ' -- this returns 1 as it should
下面是不起作用的代碼:
cmd = New OracleCommand("delete from u_parameters where pkey = :pkey and user_id = :user_id and computer = :computer", Con)
cmd.Parameters.Add("pkey", OracleDbType.NVarchar2).Value = "Test"
cmd.Parameters.Add("user_id", OracleDbType.Decimal).Value = 1
cmd.Parameters.Add("computer", OracleDbType.NVarchar2).Value = DBNull.Value
cmd.ExecuteNonQuery() ' -- this returns 0!!
通過不起作用我的意思是語句執行但數據庫中沒有任何反應(並且ExecuteNonQuery的結果為0,這意味着沒有受影響的行)。 我真的不明白這里可能出現什么問題。 我已經嘗試將'computer'參數IsNullable設置為True,但它不會改變任何東西。
請幫忙。
您可以對任何可為空的參數執行以下操作。
oleDBCmd.Parameters.Add(new OracleParameter("computer", OracleType.NVarChar));`
if(string.IsNullOrEmpty(toStr)) {
oleDBCmd.Parameters["computer"].Value = DBNull.Value;
} else {
oleDBCmd.Parameters["computer"].Value = toStr;
}
`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.