簡體   English   中英

ODP.NET delete語句不能將DBNull作為參數值傳遞

[英]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,但它不會改變任何東西。

請幫忙。

當x為null時AND x = NULL不等於true。

嘗試使用IS NULLisnull()函數。

有關詳細信息,請參閱NULL上的不等於<>!=運算符

您可以對任何可為空的參數執行以下操作。

  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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM