はOleDbParameter
名前付きパラメータを (その性質上) 使用しないのに、.NETOleDbParameter
クラスが名前を期待するのはなぜですか?(string parametername ...)
すべてのコンストラクターにはパラメーター名が必要ですが、どのような名前を付ければよいかわかりません。私の名前は大丈夫ですか?または私の祖母の名前?
はOleDbParameter
名前付きパラメータを (その性質上) 使用しないのに、.NETOleDbParameter
クラスが名前を期待するのはなぜですか?(string parametername ...)
すべてのコンストラクターにはパラメーター名が必要ですが、どのような名前を付ければよいかわかりません。私の名前は大丈夫ですか?または私の祖母の名前?
OleDb / Odbcプロバイダーは、名前付きパラメーターの代わりに位置パラメーターを使用しますが-
パラメータを参照する必要がある場合は、OleDbParameterコレクション内で何らかの方法でパラメータを識別する必要があります。
重要なのは、パラメーター化された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
操作対象の列の名前に最も一致するパラメーター名を使用することをお勧めします。
プログラミングの他のすべてと同じように、コンテキストにとって意味のある名前を付けてください。(名前、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);
IDataParameter、DbParameter、DbProviderFactory など、データ アクセスのための基になるプロバイダーの独立性を提供するためのインターフェイスとファクトリがあります。
これをサポートするために、基礎となるプロバイダーで名前が使用されていない場合でも、すべてのパラメーターに名前を付けることができます。