Using statement doesn't seem to dispose my object
我遇到了麻烦。我在using块中有一个SqlCommand。通常这可以正常工作。但是,这一次,代码退出了using块,但是命令没有被释放。它让我感到难过。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | using (SqlCommand transferCommand = new SqlCommand(strHeaderStoredProcedure, connection)) { transferCommand.CommandType = System.Data.CommandType.StoredProcedure; transferCommand.Parameters.Add("@InvtTransferID", SqlDbType.UniqueIdentifier).Value = InvtTransferID; SqlDataReader transferReader = transferCommand.ExecuteReader(); while (transferReader.Read()) { //do my stuff, this all works fine } } using (SqlCommand transferCommand = new SqlCommand(strDetailsStoredProcedure, connection)) { transferCommand.CommandType = System.Data.CommandType.StoredProcedure; transferCommand.Parameters.Add("@InvtTransferID", SqlDbType.UniqueIdentifier).Value = InvtTransferID; SqlDataReader transferReader = transferCommand.ExecuteReader(); <-- Error happens here. } |
我正在尝试重用我的连接来运行一堆存储过程。这是最奇怪的事情。我在实际上几乎相同的另一种形式上有一些代码,并且运行良好,可以放置命令并允许我进行其他操作。有什么想法我做错了吗? (我正在尝试使此代码在帖子中看起来不错,但似乎超出了我的薄弱能力...因此,请为凌乱的代码感到抱歉。)
错误是:已经有一个与此命令相关联的打开的DataReader,必须首先将其关闭。
您拥有的是一个打开的SqlDataReader(transferReader),关闭并处置该datareader或对其使用using()。
我假定由于阅读器仍处于打开状态而未释放命令。
作为一点额外的信息,这是编译器在编写using语句时在后台执行的操作。
1 2 3 4 | using(IDisposable x) { //some work here } |
变成
1 2 3 4 5 6 7 8 9 10 | IDisposable x = //some IDisposable try { //do work here } finally { x.Dispose() } |
就像Gusman提到的那样,using不能保证对象的销毁,它只是调用对象的dispose方法。清理所有使用过的资源是IDisposable的责任
我希望这会有所帮助