2017-07-20 18 views
0

SqlCommandにパラメータを入力する必要がありますが、いくつかの条件ではDBNull.Valueと入力し、それ以外の場合は値を入力します。三項演算子を使用してSqlCommandパラメータを入力する

私が必要とするのは、変数truckID == -1DBNull.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 }); 
+1

正式なol「 'if'文はここで悪い考えですか? – maccettura

+0

これらは同じタイプまたは暗黙的に変換する必要があります(IIRC)。実際のif文に分割するだけです。 –

+1

'truckId == -1? (オブジェクト)DBNull.value:truckID'。 ['.AddWithValue'](https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/)は使わないでください。 –

答えて

1

あなたはこの

SqlParameter param = new SqlParameter("@truckID", System.Data.SqlDbType.Int); 
param.Value = (truckID == -1) ? DBNull.Value : truckID; 
command.Parameters.Add(param); 

のように試すことができますまあ1つのライナーのバージョンが

SqlParameter param = new SqlParameter("@truckID", System.Data.SqlDbType.Int) 
          { Value = (truckID == -1) ? (object)DBNull.Value : truckID }; 
command.Parameters.Add(param); 

別のバージョンのようになります。

SqlParameter param = (truckID == -1) ? 
         new SqlParameter("@truckID", System.Data.SqlDbType.Int) { Value = DBNull.Value } 
         : new SqlParameter("@truckID", System.Data.SqlDbType.Int) { Value = truckID }; 
command.Parameters.Add(param); 
+0

はい、しかし私はコードの1行に残しておきたいです – GuidoG

+0

これは私が感謝の必要なものです。パラメータの最初の行はparameters.add() – GuidoG

+0

@GuidoGでしたか?それはあなたが元々持っていた同じ問題を持っている必要がありますさらに、1つのライナーのバージョンは私に非常に奇妙に見えます。コンパイルしないでください。 'SqlParameter param = new SqlParameter(" @ truckID "、System.Data.SqlDbType.Int){Value =(truckID == -1)? (オブジェクト)DBNull.Value:truckID}; –

1

command.Parameters.AddWithValue("@TruckID", truckID == -1 ? (object)DBNull.Value : truckID); 
+0

ありがとうございます – GuidoG