2011-01-20 21 views
0

バインドされた変数を扱うのが初めてのので、少し質問があります。 .NETアプリケーションでOracle DBとODP.NETを使用していますが、バインド変数を使用していますしかし、このいずれかで、何らかの理由でこのOracleバインドされた変数

string sql = "select * from table1 where loc=:pLoc and pno=:pPno and sno=:pSno union all select * from table2 where loc=:pLoc and pno=:pPno and sno=:pSno union all 
select * from table3 where loc=:pLoc and pno=:pPno and sno=:pSno"; 

    OracleCommand _cmd = new OracleCommand(sql, DBFacade.DbConnection); 

        OracleParameter pLoc = new OracleParameter(":pLoc", OracleDbType.Varchar2, 3); 
        pLoc.Value = loc; 
        OracleParameter pSno = new OracleParameter(":pSno", OracleDbType.Varchar2, 10); 
        pLoc.Value = sno; 
        OracleParameter pPno = new OracleParameter(":pPno", OracleDbType.Varchar2, 18); 
        pLoc.Value = pno; 

        _cmd.Parameters.Add(pLoc); 
        _cmd.Parameters.Add(pSno); 
        _cmd.Parameters.Add(pPno); 

        _odaContractPrices.SelectCommand = _cmd; 

のように、私は成功し、他のSQL文でバインド変数を使用しました(のような単純なクエリで「::のparam1とCOLUMN2 = PARAM2どこCOLUMN1 = TABLE1から選択*」)それは動作しません。誰も私の理由を説明することはできますか? ありがとうございます!

+2

「うまくいかない」とはどういう意味ですか?症状は何ですか? –

+0

私はそのアダプタを使ってデータセットを埋めます。 「動作しない」とは、空のデータセットを意味します。 – maephisto

+0

'OracleCommand _cmd =新しいOracleCommand(sql、loc、sno​​、pno)、DBFacade.DbConnection);'もコンパイルできません。 –

答えて

0

私はそれがエラーの原因だか分からないが、削除しよう:をOracleParameterのコンストラクタで、実際に、私はあなたの場合には、以下で十分だろうと思い

_cmd.BindByName = true; 

を使用します。

_cmd.Parameters.Add("pLoc", loc); 
_cmd.Parameters.Add("pSno", sno); 
_cmd.Parameters.Add("pPno ", pno); 
+0

すばらしい答え!それはとてもうまくいった!ありがとうございました! – maephisto

+0

@maephistoコメントを追加するだけで、ODPはデフォルトでオーダーでバインドされます。「ODP.NETでは、バインド変数で2つのモードを使用できます(デフォルトでバインドするか、名前でバインドする」[http://www.oracle.com /technetwork/issue-archive/2005/05-sep/o55odpnet-101704.html]これは混乱を招く可能性があります – Harrison

関連する問題