2012-05-04 5 views
0

Oracle on .NETで作業しているときに新規です。私は過去にSQLで作業してきましたが、この問題に遭遇していませんでした。 は、私は、この接続文字列に接続するOracleサーバーを持っています。そこで、私はそれが開かれた(それは)、以下のOracleコマンドを実行しようとされているかどうかを確認し、接続を開封しております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))); 

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開発者でそれを実行すると、それは動作しますが、私はコードを実行するときisbAccountOpenDateは値を持ち-1。 私はすべてを試したので、もう何をすべきか分かりません。コロンは、バインド変数をidenifyするSQL文で使用されている

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

ことなので、私はODPの専門家ではないが、私はこれがあなたの問題だと思う事前

答えて

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(); 

あなたがMSDNでSystem.Data.OracleClientについての完全なリファレンスを見つけることができます::OracleParameterCollection、、OracleCommand.ExecuteNonQueryこれはあなたの問題を解決することができます。

+0

申し訳ありませんが、そうではありません。そして、私はさらに文のISBuseridの値を追加しようとしましたが、私はまだ同じ結果を得ます。 – schumitza

+0

@APCが正しいです、 'ExecuteNonQuery'メソッドはコマンドを実行し、影響を受ける行の数を返します。文が 'INSERT'、' UPDATE'、 'DELETE'でなければ常に' -1'を返します。代わりに 'ExecuteScalar'メソッドを使うべきです(私は既に提案したソリューションを更新しました)。私は間違ったメソッドの使用に気付かなかったというパラメータ渡しを心配していました。 –

+0

多くのおかげで、私は同じ反復的なロジックで立ち往生し、それを壊すことができませんでした。 – schumitza

1

感謝SQLコンパイラーは、その範囲にUSERIDという名前のものを探すべきではないことを知っています。しかしそれは名前の一部ではありません。パラメータの割り当てからコロンを削除すると、コードが機能するはずです。あるいは、少なくともいくつかの他の理由で失敗:)


をところで、あなたは、SELECT文を発行しているので、なぜあなたはexecuteNonQuery()を訴えていますか?それはexecuteScalar()ではありませんか?

+0

@Gerardo Lima、APCは答えに感謝しますが、これは私の問題を解決しません。ちょうどコード ":"と同じ結果をデバッグしました。 – schumitza

+0

OracleCommandまたは他のコマンドのための 'ExecuteQuery'メソッドはありません。これは、 "接続オブジェクトに対してSQL文を実行する"ものです – schumitza

+2

私が言ったように、私は専門家ではありませんが、私はexecuteNonQuery()がselect文に対して間違っていると考えています。 – APC

関連する問題