2012-07-12 38 views
1

我在我的代碼中使用SqlTransaction作爲回滾目的。在事務中,我得到了多個要執行的語句,可能包括選擇插入和更新。所有這些陳述都在sqltransaction的範圍內。一切工作都很好,只爲一個問題。我正在使用datareader作爲select語句。這些讀者一旦使用就會關閉。這迫使連接丟失,每件事都失敗了。是否有人可以在sqltransaction內使用datareader s有解決方案?在sqltransactions中使用數據採集器

+0

ü可以附加一些代碼:當你關閉DataReader

例如
SqlDataReader中不關閉SqlConnection? – Tamir 2012-07-12 14:00:38

回答

4

如果調用ExecuteReader時設置了CommandBehavior.CloseConnection選項,DataReader將只關閉連接。

如果您避免設置此選項,您應該可以。

2

您應該自己打開SqlConnection。

using(SqlConnection cn = GetConnection()) 
{ 
    cn.Open(); 
    SqlTransaction tr = cn.BeginTransaction("myTransaction"); 
    ..... 

    SqlCommand command = new SqlCommand(sqlString, cn); 

    using(SqlDataReader reader = command.ExecuteReader()) 
    { 
     ..... 
    } 

    SqlCommand command1 = new SqlCommand(sqlString1, cn); 
    using(SqlDataReader reader1 = command1.ExecuteReader()) 
    { 
     ..... 
    } 
    tr.Commit(); 
} 
+0

你好,我不斷收到這些錯誤說,已經有一個開放的DataReader與這個命令相關聯,必須先關閉它。這可能是什麼解決方案 – user1308182 2012-07-12 14:52:00

+0

嘗試將每個數據讀取器封裝在'using'語句中。這將保證對DataReader的Close和Dispose的調用。 – Steve 2012-07-12 14:55:13

+0

這很好...我有很多使用的數據採集器> 100 ...有沒有什麼辦法可以在執行下一個讀取器之前打開連接上的datareazader? – user1308182 2012-07-12 15:11:28