2017-10-23 9 views
0

私は私が合格私.net C# console appのExecuteNonQuery()は-1を返しOracleの手順

var SGCodProdInsert = new OracleCommand 
         { 
          Connection = con, 
          CommandText = ProductFirstInsert,         
          CommandTimeout = 15, 
          Transaction = dbContextTransaction 
         }; 
         var t = SGCodProdInsert.ExecuteNonQuery(); 

Oracleコマンド(ProductFirstInsert)内のコードの次の部分は、このようなものですしているから:

BEGIN 
INSERT INTO Products_TEST (ProductName,ProductCode) VALUES ('TEST','TEST'); 
INSERT INTO Products_TEST (ProductName,ProductCode) VALUES ('TEST1','TEST1'); 
INSERT INTO Products_TEST (ProductName,ProductCode) VALUES ('TEST2','TEST2'); 

tで結果

INSERT INTO Products_TEST (ProductName,ProductCode) VALUES ('TESTn','TESTn'); 
END; 

私が得る-1とだから私の質問は以下の通りです理由は...私は理解することができます: どのように私はオラクルからの私のテーブルに挿入されているどのように多くのレコードが単一の整数で取ることができます手続き?

+0

Oracleが行うには暗黙カーソルの属性を持っていると読んでいましたこの「SQL%ROWCOUNT」。これはDMLが発生した行の数を返します – XING

+0

@ XING ok ...だから私は自分のコードを変更する必要がありますか? –

+0

名前付きプロシージャまたは匿名ブロックを呼び出していますか?バインド変数に値を設定できますか? (私はC#を知らない) –

答えて

1

最も簡単な方法は、あなたのコマンドの前と後のcount(*)コマンドを実行することです:

var SGCodProdInsert = new OracleCommand 
{ 
    Connection = con, 
    CommandText = ProductFirstInsert, 
    CommandTimeout = 15, 
    Transaction = dbContextTransaction 
}; 
var CountTable = new OracleCommand 
{ 
    Connection = con, 
    CommandText = "select count(*) from Products_TEST", 
    CommandTimeout = 15, 
    Transaction = dbContextTransaction 
}; 
decimal beforeInsert = Convert.ToDecimal(CountTable.ExecuteScalar()); 
SGCodProdInsert.ExecuteNonQuery(); 
decimal afterInsert = Convert.ToDecimal(CountTable.ExecuteScalar()); 

Console.WriteLine($"Inserted rows: {afterInsert - beforeInsert}"); 

そうでなければあなたは一時的なOracle関数を作成する必要がありますし、SQL%ROWCOUNT

+0

私は解決策を見つけることができた。しかし、 'var test = SGCodProdInsert.ExecuteNonQuery();'のような単一のコマンドでできるかどうか不思議だった。しかしあなたの答えはinsertコマンドのためだけに機能します...しかし、Updateコマンドはどうですか?挿入と更新の両方に使える一般的なものがありますか?とにかく私は正しいとあなたの答えをマークします –

+1

私はあなたが一時的なOracle関数をインストールする必要がある更新カウントを確認する場合は、だと思います。参照:https://csharpdeveloper.wordpress.com/2009/01/14/getting-values-back-from-oracle-procedures-in-c-net/ – PinBack