私はADO.NETを使用してODBCを介してOracle DBに接続しています。すべては、単純なSQLクエリにパラメータを結合以外に、正常に動作している:SQLクエリのWHERE句にパラメータを追加する
Connection.Open();
IDbCommand command = Connection.CreateCommand();
command.CommandText = "SELECT length FROM activity_type WHERE name = :name_of_activity";
var parameter = command.CreateParameter();
parameter.ParameterName = ":name_of_activity";
parameter.Value = "Short_break";
command.Parameters.Add(parameter);
int result = Convert.ToInt32(command.ExecuteScalar());
Connection.Close();
それは常に0結果(ExecuteScalar()
からヌル - 読者から同じ)を返します。しかし、私はこのような簡単なSQLクエリを置く場合:command.CommandText = "SELECT length FROM activity_type WHERE name = 'Short_break'"
それは魅力的なように動作します。さらに、私はINSERT INTO
節のコード全体に同様の構造を使用しましたが、それでも問題はありませんでした。
何か不足していますか? OdbcCommand.Parameters
のためのドキュメントから
を削除します。私は '?'前のプレースホルダ、運がない。それでも同じ結果。名前付きパラメータは、コードの他のすべての部分で機能します。元々 'Connection.Close()'が 'finally'節にあるので、プロジェクトからコードを抽出しました。 – mcmil
@M_F:これは本当に 'OdbcCommand'ですか?それは与えられたかなり一般的なコードから伝えるのは難しいです。残念ながら、さまざまなプロバイダが異なる形式のパラメータ化されたクエリをサポートしています。何が通過しているのかを確認するためにデータベースログを調べてみましたか? –
はい、OdbcCommandです。接続は 'IdbConnection Connection = new OdbcConnection(" DSN = oracle; UID = xxx; PWD = xxx ");'として作成されます。私はログにアクセスしようとします、ありがとう。 – mcmil