0

使用:.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,这意味着没有受影响的行)。我真的不明白这里可能是什么问题。我尝试将“计算机”参数 IsNullable 设置为 True,但它并没有改变任何东西。

请帮忙。

4

2 回答 2

2

AND x = NULL当 x 为空时不等于 true。

尝试使用IS NULLisnull()功能。

有关更多信息,请参见NULL 上的不等于 <> != 运算符

于 2013-09-02T08:47:26.833 回答
0

您可以对任何可为空的参数执行以下操作。

  oleDBCmd.Parameters.Add(new OracleParameter("computer", OracleType.NVarChar));`

if(string.IsNullOrEmpty(toStr)) {
    oleDBCmd.Parameters["computer"].Value = DBNull.Value;
} else {
    oleDBCmd.Parameters["computer"].Value = toStr;
}

`

于 2013-09-02T08:49:46.620 回答