-1

私はここでゆっくりと気が狂います...なぜこのSQLコードの平和はC#からではなくSQL Developerから機能するのですか?

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
4

2 に答える 2

2

OK、私はついに問題を解決しました。

Oracleのodp.netは改行文字( "\ r \ n"& "\ n")に非常に敏感であるように見えるので、複数行の文字列に@を使用しないようにするか、 "\ rの代わりに.replace()メソッドを使用してみてください\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;";
于 2012-02-17T10:11:48.860 に答える
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)
                {

                }
            }
于 2012-02-17T08:36:31.307 に答える