2011-07-11 45 views
0

我需要從ASP.NET 2.0網站刪除Oracle 10g數據庫中的數據。從asp.net網站的oracle 10g中刪除 - 等待commint?

方法DeleteMonthPlan我用執行刪除命令。問題是這個命令在「瀏覽器」中執行很長時間,最後不執行刪除命令。也許它等待提交?問題的根源是什麼?

該SQL命令DELETE C_PPC_PLAN WHERE MFG_MONTH = 'VALUE' 是確定。

MFG_MONTH列類型是VARCHAR2(16)

首先我需要調用方法DeleteMonthPlan和比我需要調用InsertDatePlan。

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

你能解釋一下「終於delete命令不執行」的意思?它是否超時?它會返回一個錯誤嗎?如果是這樣,有什麼錯誤?它運行但刪除沒有行嗎?或者是其他東西?您能否通過其他交互式工具(即SQL * Plus)運行相同的DELETE語句?它在該環境中運行得更快嗎? –

+0

它仍在運行,例如5分鐘,但在表中沒有刪除記錄...我沒有得到錯誤。我在測試這個命令時使用了PL/SQL,它可以工作。 – totoz

回答

1

嘗試

DELETE FROM C_PPC_PLAN WHERE MFG_MONTH='6' 

BTW代碼使用「文字」在一些地方,而不是綁定變量(PARAMS),這使得它容易受到SQL注入是一個非常嚴重的安全問題!