2012-02-15 3 views
-1

私はゆっくりとここに行きます...なぜこのSQLコードの平和は、SQL Developer からであり、C#からではないのですか?Oracle PL SQLはSQL Devから動作します。コードからではありません

declare x integer; 
begin 
insert into aspa2_counters (shortname, description, devicegroupid) values ('TEST0', 'DESC0', 61) returning counterid into x; 
INSERT ALL 
INTO aspa2_priceclass (from_num, to_num, price, fk_counterid) VALUES (0,100,0.22,x) 
INTO aspa2_priceclass (from_num, to_num, price, fk_counterid) VALUES (101,200,0.23,x) 
SELECT * FROM dual; 
end; 

コード内に複数の挿入が動的に生成されます。 助けてください...私はこの2日間過ごしました、そして、それはプロジェクトを遅くしています。 必要に応じて詳細を入力してください。

ありがとうございました!

編集:私は、エラーを書き留めて忘れてしまった:

ORA-06550: line 1, column 19: 
PLS-00103: Encountered the symbol "" when expecting one of the following: 

    begin function package pragma procedure subtype type use 
    <an identifier> <a double-quoted delimited-identifier> form 
    current cursor 
+3

uはそれがデバッグの目的のためにC#コード – tbone

+0

を投稿し、C#のから動作しませんと言うならば、私は上部のPLSQL文をハードコードしている...ので、私はコードが適切でないと推測します。 – dakt

+0

ハードコードされたステートメントをそのままC#コードに表示できますか?私は次のようなものを意味します:string sqlStr = "declare x integer; begin ..."; –

答えて

2

OK、私は最終的に解決問題。

Oracleのodp.netは、改行文字(「\ rをする\ n」&「\ n」は)に非常に敏感であるように見えるので、あなたは複数行の文字列のため、@を使用いけない を確認して、または(.replaceを使用してみてください)方法"\ r \ n"を "\ n"に置き換えます。

これは、それが最終的にどのように見えるかです:

string anonymousBlock = "declare x integer;" + 
         "begin " + 
         "insert into aspa2_counters (shortname, description, devicegroupid) values (:p1, :p2, :p3) returning counterid into x;" + 
          buildInsert.ToString() + 
         " end;"; 
+0

あなたは、素晴らしいです! – JDPeckham

0

はここにハードコードされた部分です:

string query = @"declare x integer; 
         begin 
         insert into aspa2_counters (shortname, description, devicegroupid) values ('TEST', 'OPIS', 61) returning counterid into x; 
         INSERT ALL 
          INTO aspa2_priceclass (from_num, to_num, price, fk_counterid) VALUES (0,100,0.22,x) 
          INTO aspa2_priceclass (from_num, to_num, price, fk_counterid) VALUES (101,200,0.23,x) 
         SELECT * FROM dual; 
         end;"; 

とコードのOracleコマンドコード:

  using (OracleCommand cmnd = new OracleCommand(cmndText, con)) 
      { 
       if (parameters != null) 
       { 
        foreach (OracleParameter p in parameters) 
        { 
         cmnd.Parameters.Add(p); 
        } 
       } 

       try 
       { 
        cmnd.ExecuteNonQuery(); 
       } 
       catch (Exception ex) 
       { 

       } 
      } 
関連する問題