2012-03-30 125 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。

相关问题