在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,但它没有回答我的问题.为什么会发生此错误以及如何解决?
谢谢.
您的问题是您没有丢弃您正在使用的对象.为了这个目的,最好始终使用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)
| 归档时间: |
|
| 查看次数: |
6793 次 |
| 最近记录: |