2013-03-23 81 views
-1

我試圖運行此代碼system.invalidoperationexception

public Exception SetData(string Data , long NoOfColumnsAllowed) 
    { 
     try 
     { 
      con = new SqlCeConnection(conectionstring); 
      con.Open(); 
      transaction = con.BeginTransaction(); 
      com = new SqlCeCommand(); 
      com.Transaction = transaction; 
      com.CommandText = "Select count(*) from [Copy]"; 
      com.Connection = con; 
      sdr = com.ExecuteReader(); 
      while (sdr.Read()) 
      { 
       noOfColumns = sdr.GetInt32(0); 
      } 


      if (noOfColumns > NoOfColumnsAllowed) 
      { 
       long NoOfColumsToBeDeleted = noOfColumns - NoOfColumnsAllowed; 
       com.CommandText = "delete from [Copy] where Sno<[email protected]"; 
       com.Parameters.AddWithValue("@sno", NoOfColumsToBeDeleted); 
       com.ExecuteNonQuery(); 
      } 

      com.CommandText = "Insert into [Copy] (Data) values (@data)"; 
      com.Parameters.AddWithValue("@data", Data); 
      com.ExecuteNonQuery(); 
      transaction.Commit(); 
      con.Close(); 

      return null; 
     } 
     catch (Exception ex) 
     { 
      try 
      { 
       transaction.Rollback(); 
      } 
      catch (Exception) 
      { 

      } 
      con.Close(); 
      return ex; 
     } 


    } 

異常好發 -

system.invalidoperationexception:本次交易無法 承諾,如果有任何打開的遊標的範圍交易的這個 。在提交更改之前,確保所有數據讀取器/結果集都明確關閉了 。

我是新的事務處理,無法找到關於打開的光標的任何有價值的解決方案。是否有代碼有問題,或者我必須明確關閉數據讀取器,如果是的話請告訴我怎麼做?

回答

2

只需調用sdr.Close(); while循環之後,因爲這是錯誤抱怨。