2009-07-30 22 views
2

いくつかのヌル値を受け入れるテーブルに値を挿入するために、パラメータリストにヌル値を追加しました。ここに私のコード例があります:null可能な値を持つIDbDataParameterを作成する方法は?

bool sql = true; 
// .... 
List<IDbDataParameter> parameters = new List<IDbDataParmeter>(); 
// adding values... 
object objVal = 1; 
parameters.Add(
    sql ? new SqlParameter("@colIntA", objVal) : 
      new OracleParamer(":colIntA", objVal)); 
// this would not work, what should I add? 
objVal = string.Empty; 
parameters.Add(
    sql ? new SqlParameter("@colIntB", objVal) : 
      new OracleParamer(":colIntB", objVal)); 

DB固有のDbNull値を使用していて、これもSQLまたはOracle固有のものであるかどうかわかりませんか?

答えて

1

DbNull.Valueを使用してください。 DbNull値に遭遇したときに何をすべきかを知っているのはプロバイダーの責任であるため、ADO.NET互換のデータソース(SQLプロバイダーとOracleプロバイダーの両方)で動作します。

2

空の文字列( '')をintパラメータに代入しようとしているので、うまく動作しません。

データベースに依存しないNULL値を表すには、DbNull.Valueを使用します。

new SqlParameter("colIntB", DbNull.Value) 

(私はSqlparametersと私の経験で働く「@」を、オフに残してきたことに注意してください、私はあなたと同じことを行うことができるかどうかわからない。「:」。Oracle用)

追加のヒント:接続を使用してコマンドを作成し、コマンドを使用してパラメータを作成します。これは、基礎となる接続のタイプに応じて適切なクラスのインスタンスを作成します:

IDbConnection conn = sql ? new SqlConnection(...) : new OracleConnection(...); 

// this will give you either an SqlCommand or an OracleCommand 
IDbCommand cmd = conn.CreateCommand(); 

// this will give you either an SqlParameter or an OracleParameter 
IDbDataParameter param1 = cmd.CreateParameter(); 
param1.ParameterName = "colIntB"; 
param1.Value = objVal; 

cmd.Parameters.Add(param1); 
+0

パラメータを取得する上で非常に興味深い点です。パラメータのリストがある場合は、ループを作成して名前を設定し、値を設定し、必要に応じて方向を設定する必要があります。ありがとう! –

+0

David - 私のAddInputParameters拡張メソッドも見てください。本当に簡単にする:http://www.madprops.org/blog/adding-idbcommand-parameters-with-anonymous-types/ –

+0

実際に私のケースではパラメータが作成されたクラスにあり、IdbConnectionもIDbCommandも使用できません。 IDbDataParameterのコレクションを作成するためのSQLParameterクラスがあります。私はSQLまたはOracleに関する情報を持っています。ダミー接続を作成してパラメータを取得することはできますか? –

関連する問題