2011-07-11 11 views
0

ASP.NET 2.0 WebサイトからOracle 10gデータベースのデータを削除する必要があります。asp.net Webサイトからoracle 10gを削除 - Commintを待ちますか?

方法DeleteMonthPlan私は実行コマンドを実行します。問題は、このコマンドが「ブラウザで」長時間実行されていて、最後にdeleteコマンドが実行されないということです。コミットするのを待つかもしれない?問題の根は何ですか?

このSQLコマンドDELETE C_PPC_PLAN WHERE MFG_MONTH = 'VALUE'はOKです。

MFG_MONTHカラムI型は、メソッドDeleteMonthPlanを呼び出して、私はInsertDatePlanを呼び出す必要以上必要VARCHAR2(16)

最初のものです。

private static void DeleteMonthPlan(string monthIndex) 
    { 
     try 
     { 
      using (var conn = new OracleConnection(GenerateConnectionString())) 
      { 
       conn.Open(); 

       var cmd = conn.CreateCommand(); 

       cmd.CommandText = string.Format("DELETE C_PPC_PLAN WHERE MFG_MONTH='{0}'", monthIndex); 

       cmd.ExecuteNonQuery(); 
      } 
     } 
     catch (Exception exception) 
     { 

      throw exception; 
     } 
    } 

たとえば、このメソッドを挿入時に使用しても問題ありません。

public void InsertDatePlan(DatePlan dp, 
     string monthIndex) 
    { 
     DeleteMonthPlan(monthIndex); 
     try 
     { 
      using (var conn = new OracleConnection(GenerateConnectionString())) 
      { 
       conn.Open(); 

       var cmd = conn.CreateCommand(); 

       cmd.Parameters.Add(":Site", OracleType.VarChar).Value = dp.Site; 
       cmd.Parameters.Add(":Week", OracleType.VarChar).Value = dp.MfgWeek; 
       cmd.Parameters.Add(":Month", OracleType.VarChar).Value = dp.MfgMonth; 
       cmd.Parameters.Add(":Year", OracleType.VarChar).Value = dp.MfgYear; 
       cmd.Parameters.Add(":Input", OracleType.Number).Value = dp.Input; 
       cmd.Parameters.Add(":Output", OracleType.Number).Value = dp.Output; 
       cmd.Parameters.Add(":LMUser", OracleType.VarChar).Value = dp.LmUser; 
       cmd.Parameters.Add(":PartNo", OracleType.VarChar).Value = dp.PartNo; 
       cmd.Parameters.Add(":PartNoDesc", OracleType.VarChar).Value = dp.PartNoDesc; 


       cmd.CommandText = string.Format("INSERT INTO C_PPC_PLAN (CREATE_TIME, SITE, MFG_DAY,MFG_WEEK,MFG_MONTH,MFG_YEAR,INPUT,OUTPUT,LM_TIME,LM_USER,PART_NO,PART_NO_DESC)" 
          + " VALUES (to_date('{0}', 'dd-mm-yyyy hh24:mi:ss'), :Site ,to_date('{1}', 'dd-mm-yyyy hh24:mi:ss'),:Week," 
          + ":Month,:Year,:Input,:Output,to_date('{2}', 'dd-mm-yyyy hh24:mi:ss'),:LMUser,:PartNo,:PartNoDesc)" 
          , dp.CreateTime, dp.MfgDate, dp.LmTime); 

       cmd.ExecuteNonQuery(); 

      } 
     } 
     catch (Exception exception) 
     { 

      throw exception; 
     } 
    } 

私はトランザクションを使用しました。私はこのメソッドを底部に呼び出しますが、決して終了しないとその部分を意味します

trans.Rollback(); or conn.Close();は決して実行されません。

private static void DeleteMonthPlan(string monthIndex) 
    { 
     var conn = new OracleConnection(GenerateConnectionString()); 
     conn.Open(); 

     OracleCommand cmd= conn.CreateCommand(); 

     OracleTransaction trans = conn.BeginTransaction(IsolationLevel.ReadCommitted); 
     cmd.Transaction = trans; 

     try 
     { 
      cmd.CommandText = "DELETE C_PPC_PLAN WHERE MFG_MONTH='6'"; 
      cmd.ExecuteNonQuery(); 
      trans.Commit(); 

     } 
     catch (Exception e) 
     { 
      trans.Rollback(); 
     } 
     finally 
     { 
      conn.Close(); 
     } 
    } 
+1

「最終的に削除コマンドが実行されない」とはどういう意味ですか?それはタイムアウトですか?それはエラーを返しますか?もしそうなら、どんなエラー?それは実行されますが、行が削除されますか?または、他の何か?他の対話型ツール(SQL * Plusなど)で同じDELETE文を実行できますか?その環境でより速く動作しますか? –

+0

まだ実行中ですが、例えば5分ですが、テーブルには削除の記録がありません...エラーは表示されません。私はこのコマンドをテストするためにPL/SQLを使用しています。 – totoz

答えて

1

DELETE FROM C_PPC_PLAN WHERE MFG_MONTH='6' 

はところで、あなたのコードではなく、本当に深刻なセキュリティ上の問題であり、SQLインジェクションに対して脆弱になりバインド変数(のparams)のいくつかの場所で「リテラル」を使用してみてください!

関連する問題