2012-03-30 46 views
0

所以,我得到了我的標題行錯誤。似乎很自我解釋,但我的理解是,「使用」塊內的對象被處置?這個錯誤出現在另一個小錯誤中斷代碼執行後,所以也許我被一個開放的閱讀器卡住了,我需要關閉或關閉它?任何幫助,將不勝感激?C#/ SQL Server錯誤'已經有一個打開的DataReader與這個Command關聯,必須先關閉它。'

public override long GetStatsBenchmark(String TableName) 
{ 
    using (SqlCommand cmd = new SqlCommand("sprocReturnDataPointBenchmark", this.sqlConnection)) 
    { 
     cmd.CommandType = System.Data.CommandType.StoredProcedure; 
     SqlParameter outputParameter = new SqlParameter 
     { 
      ParameterName = "@benchmark", 
      Direction = System.Data.ParameterDirection.Output, 
      SqlDbType = System.Data.SqlDbType.BigInt, 
     }; 
     cmd.Parameters.Add(outputParameter); 
     SqlParameter inputParameter = new SqlParameter 
     { 
      ParameterName = "@tblName", 
      Direction = System.Data.ParameterDirection.Input, 
      SqlDbType = System.Data.SqlDbType.NVarChar, 
      Value = TableName 
     }; 
     cmd.Parameters.Add(inputParameter); 
     cmd.ExecuteNonQuery(); 

     return (long)outputParameter.Value; 
    } 
} 
+0

它是可重複的還是隻發生一次當你正在調試? – 2012-03-31 00:06:48

+0

@Bryan我一直在阻止它的錯誤,重新運行,同樣的錯誤。我試着調試cmd.Dispose,無濟於事。 – StatsViaCsh 2012-03-31 00:08:39

+0

你是否正在做其他任何可能會影響到這個的'this.sqlConnection'?這聽起來像另一個命令對象在你的代碼中的其他地方可能使用相同的'SqlConnection',它還沒有關閉。 – 2012-03-31 00:14:43

回答

1

我不認爲你顯示的代碼是問題的原因。儘管處置SqlCommandIDbCommand)對象是一種很好的做法,但實際上我並沒有發現它是必要的。什麼必要的是在完成使用它們之後處置SqlDataReaderIDataReader)對象。如錯誤消息所示,請在您的代碼中查找未使用的SqlDataReader對象。可能會從您正在顯示的代碼中拋出異常,但我懷疑原因是由於與之前在尚未處置的程序執行中使用的相同的SqlConnection關聯的SqlDataReader

+0

你是對的。謝謝。我發現有40多個參考文獻是我沒有想到的。 – StatsViaCsh 2012-03-31 01:07:35

1

使用子句的一個問題是,它沒有提供一種方法來處理編譯器爲您生成的隱式try/finally塊中的異常。 2)手動編寫try/catch/finally而不是using,在finally塊中調用Dispose並在catch塊中添加異常處理。使用try/catch或 來包裝你的using子句。

有輕微的缺點或者技術,但無論是將工作

+0

感謝更強大的實現理念.. – StatsViaCsh 2012-03-31 01:08:08

0

您可以添加MARS(多個活動結果集)來連接字符串,以允許多個記錄(或類似)在同一時間開放。

添加

MultipleActiveResultSets=true; 

MARS Connection=True; 

到連接字符串(http://www.connectionstrings.com/sql-server-2008),這將允許多個把手,但如果之前的操作在異常中被「中斷」,請儘量避免使用「USING」或在其中使用try/catch。

相關問題