OleDbCommand パラメーターの順序と優先順位: 期待値が一致していないケース
OleDbCommand を使用してクエリを構築する場合、パラメーターの順序を正確に保証することが重要ですSQL ステートメント内のシーケンスに従います。よくある誤解は、名前付きパラメーターによってこの要件が排除されるという仮定を中心に展開されています。ただし、詳細なデバッグ セッションで明らかになったように、CommandType が Text に設定されている場合、OleDbCommand は名前付きパラメーターをサポートしていません。
指定された例では:
SELECT * FROM tblSomeThing WHERE id = @id AND debut = @dtDebut AND fin = @dtFin
パラメーターは次のように追加されます。次の順序:
cmd.Parameters.Add("@id", OleDbType.Integer).Value = idSociete; cmd.Parameters.Add("@dtFin", OleDbType.Date).Value = dateTraitementFin; cmd.Parameters.Add("@dtDebut", OleDbType.Date).Value = dateTraitementDebut;
ただし、結果は返されず、矛盾があることを示しています。 SQL ステートメントと一致するようにパラメーターを並べ替えると、クエリは正常に実行されます。
cmd.Parameters.Add("@id", OleDbType.Integer).Value = idSociete; cmd.Parameters.Add("@dtDebut", OleDbType.Date).Value = dateTraitementDebut; cmd.Parameters.Add("@dtFin", OleDbType.Date).Value = dateTraitementFin;
これは、http://msdn.microsoft.com/en-us/library/system.data のドキュメントと一致しています。 oledb.oledbcommand.parameters.aspx。これは、OleDbCommand がテキスト モードの SQL ステートメントの名前付きパラメーターをサポートしないことを明示的に示しています。代わりに、疑問符 (?) プレースホルダーを使用する必要があり、コレクション内の OleDbParameter オブジェクトの順序は、コマンド テキスト内の配置と厳密に一致する必要があります。
以上がCommandType が Text の場合、OleDbCommand パラメーターの順序は重要ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。