修复错误 - 已经有一个与此命令关联的打开DataReader,必须先关闭它

Ste*_*eam 4 .net c#

在C#脚本中,我尝试使用SqlDataReader对象读取表,然后删除表.真的那么简单.

这是我使用的代码 -

SqlConnection conn = getAWorkingDbConnection();//Always gives me a good connection
SqlCommand sqlCmd = new SqlCommand();
SqlDataReader dataReader;

sqlCmd.CommandTimeout = 0;
sqlCmd.Connection = conn;

sqlCmd.CommandText = "SELECT * FROM GlassTable";
dataReader = sqlCmd.ExecuteReader();

//Code to read rows with SqlDataReader and print them to a file.

sqlCmd.CommandText = "DROP TABLE GlassTable";
sqlCmd.ExecuteReader();// BAD !!!
Run Code Online (Sandbox Code Playgroud)

我收到此错误 - System.InvalidOperationException:已经有一个与此命令关联的打开DataReader,必须先关闭它.

我看到了ExecuteReader方法的API,但它没有回答我的问题.为什么会发生此错误以及如何解决?

谢谢.

C.E*_*uis 7

您的问题是您没有丢弃您正在使用的对象.为了这个目的,最好始终使用using结构,因为它将保证你所有的一切都将被处理掉.请尝试以下代码:

sqlCmd.CommandText = "SELECT * FROM GlassTable";
using (dataReader = sqlCmd.ExecuteReader())
{
    //Code to read rows with SqlDataReader and print them to a file.
}
Run Code Online (Sandbox Code Playgroud)

此外,您不必ExecuteReader在不返回记录的查询上使用.

sqlCmd.CommandText = "DROP TABLE GlassTable";
int recordsAffected = sqlCmd.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)