3

OleDbParameter名前付きパラメータを (その性質上) 使用しないのに、.NETOleDbParameterクラスが名前を期待するのはなぜですか?(string parametername ...)

すべてのコンストラクターにはパラメーター名が必要ですが、どのような名前を付ければよいかわかりません。私の名前は大丈夫ですか?または私の祖母の名前?

4

3 に答える 3

3

OleDb / Odbcプロバイダーは、名前付きパラメーターの代わりに位置パラメーターを使用しますが-

  1. パラメータを参照する必要がある場合は、OleDbParameterコレクション内で何らかの方法でパラメータを識別する必要があります。

  2. 重要なのは、パラメーター化されたsqlステートメントが作成されるときに、各パラメーターの変数が宣言され、それぞれの値が割り当てられることです。次に、実行されるsqlステートメントで使用されます。

たとえば、次のようにします。

string sql = "SELECT * FROM MyTable WHERE Field = ?";
OleDbCommand cmd = new OleDbCommmand(sql, sqlConnection);
cmd.Parameters.Add("@FieldValue", OleDbType.Int32, 42);
OleDbDataReader dr = cmd.ExecuteReader();

実行されるSQLは次のようになります(または私が思うに近い):

DECLARE @FieldValue INT;
SET @FieldValue = 42;
SELECT * FROM MyTable WHERE Field = @FieldValue

操作対象の列の名前に最も一致するパラメーター名を使用することをお勧めします。

于 2008-12-23T18:16:32.150 に答える
1

プログラミングの他のすべてと同じように、コンテキストにとって意味のある名前を付けてください。(名前、orderid、cityなど)。

名前を使用して、c#コード内で名前を使用してパラメーターコレクションにアクセスします。

OleDbCommand command = new OleDbCommand();
...//Add your parameters with names, then reference them later if you need to:
command.Parameters["name"].Value = "your name or your grandmothers name here";

これは、ステートメントの実行後にOUTパラメーターを使用して値を抽出する場合にも役立ちます。

OleDbParameter outParam = new OleDbParameter();
outParam.Direction = ParameterDirection.Output;
outParam.DbType = DbType.Date;
outParam.ParameterName = "outParam";
command.Parameters.Add(outParam);
command.ExecuteNonQuery();
DateTime outParam = Convert.ToDateTime(command.Parameters["outParam"].Value);
于 2008-12-23T18:15:49.547 に答える
1

IDataParameter、DbParameter、DbProviderFactory など、データ アクセスのための基になるプロバイダーの独立性を提供するためのインターフェイスとファクトリがあります。

これをサポートするために、基礎となるプロバイダーで名前が使用されていない場合でも、すべてのパラメーターに名前を付けることができます。

于 2008-12-23T18:49:26.110 に答える