0

.NETでOracleを使用するのは初めてです。私は過去にSQLを使用したことがありますが、この問題は発生していません。この接続文字列で接続するOracleサーバーがあります。

<add key="Test" value="Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=xxxx)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=xxx))); User Id=xxxxxxx;Password=xxxxxx;"/>

   private OracleConnection Testconnection = new OracleConnection((string)new System.Configuration.AppSettingsReader().GetValue("Test", typeof(string)));

次に、接続を開いて、開いているかどうかを確認し、次のoracleコマンドを実行してみます。

  var accountOpenDate = new OracleCommand("select creationDate from tbl_user where id=:userid", this.Testconnection);
        getIsbAaccountOpenDate.Parameters.Add(":userid", this.IsbUserId);
        string isbAccountOpenDate = getIsbAaccountOpenDate.ExecuteNonQuery().ToString();

Oracleコマンドは適切であり、SQL Developerで実行すると機能しますが、コードを実行すると、isbAccountOpenDateの値は-1になります。私はすべてを試したので、もう何をすべきかわからない。

前もって感謝します

4

2 に答える 2

1

私はODPの専門家ではありませんが、これがあなたの問題だと思います。

getIsbAaccountOpenDate.Parameters.Add(":userid", this.IsbUserId); 
.                                      ^

コロンは、バインド変数を識別するためにSQLステートメントで使用されるため、SQLコンパイラーUSERIDはそのスコープで呼び出されたものを検索しないことを認識します。しかし、それは名前の一部ではありません。パラメータ割り当てからコロンを削除すると、コードが機能するはずです。または、少なくとも他の理由で失敗します:)


ちなみに、あなたはSELECTステートメントを発行しているのに、なぜあなたは訴えているのexecuteNonQuery()ですか?そうではないexecuteScalar()ですか?executeReader()(複数のレコードを返すクエリ用である 必要があります。)

于 2012-05-04T09:38:47.513 に答える
0

SQLスクリプトでパラメータを識別するにはコロンを使用する必要がありますが、これはパラメータ名の一部ではありません。さらに、データベースがスカラー値を返す正しいメソッドはですExecuteScalar。これで問題を解決できます。

var stm = "SELECT creationDate FROM tbl_user WHERE id=:userid;";
var cmd = new OracleCommand(stm, this.Testconnection);
cmd.Parameters.Add("userid", this.IsbUserId);
var result = (string) cmd.ExecuteScalar();

完全なリファレンスはSystem.Data.OracleClient、MSDNにあります:OracleParameterCollectionOracleCommand.ExecuteScalarOracleCommand.ExecuteNonQuery

于 2012-05-04T09:39:08.947 に答える