SqlCommand
にパラメータを入力する必要がありますが、いくつかの条件ではDBNull.Value
と入力し、それ以外の場合は値を入力します。三項演算子を使用してSqlCommandパラメータを入力する
私が必要とするのは、変数truckID == -1
をDBNull.Value
とし、それ以外の場合はtruckID
という値を入力することです。
これは私がしようとしたものです:
using (SqlCommand command = new SqlCommand(sql.ToString()))
{
command.CommandType = CommandType.Text;
command.Parameters.AddWithValue("@TruckID", truckID == -1 ? DBNull.Value : truckID);
しかし、コンパイラは私に語った:System.DBNull」の間の暗黙の変換が存在しないため、条件式の
エラーCS0173タイプを決定することができません'と' int型
は、私はこれを書きたい場合:
command.Parameters.AddWithValue("@TruckID", truckID == -1 ? 0 : truckID);
コンパイラは満足しています。したがって、3項演算子の場合、両方の可能な値が同じ型でなければならないようです。
これを行うにはどうすればよいでしょうか?
EDIT:
command.Parameters.Add
(new SqlParameter("@TruckID", SqlDbType.Int).Value = (import.TruckID == -1) ? (object)DBNull.Value : import.TruckID);
EDIT:
実際に上記のコードは、結局うまくいかなかった私にとって
作業コードこれです。
SqlParameterCollectionだけがDBNullは
オブジェクトだから私はこれにコードを修正し、それが最終的に私のために働いていない、null以外のSqlParameterタイプ オブジェクトを受け入れます:実行時に
私はこれを得ました。あなたが明示的にオブジェクトへのDBNull.Value
を唱えられる
command.Parameters.Add
(new SqlParameter("@PlaceID", SqlDbType.Int) { Value = (import.TruckID == -1) ? (object)DBNull.Value : import.TruckID });
正式なol「 'if'文はここで悪い考えですか? – maccettura
これらは同じタイプまたは暗黙的に変換する必要があります(IIRC)。実際のif文に分割するだけです。 –
'truckId == -1? (オブジェクト)DBNull.value:truckID'。 ['.AddWithValue'](https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/)は使わないでください。 –