0

使用: .NET 4、ODP.NET 11.2.0.3.0、Oracle Database 10g リリース 10.2.0.3.0

私のdeleteステートメントが機能しない理由を突き止めようとしています。おそらく、ここにいる誰かが私を助けてくれるでしょう。

動作するコードは次のとおりです。

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

0

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;
}

`

于 2013-09-02T08:49:46.620 に答える