已经有一个与此命令相关的打开的数据读取器,必须先关闭它

本文关键字:读取 数据 有一个 命令 | 更新日期: 2023-09-27 18:19:22

我曾经用这个连接字符串调用过几个函数:

class Solders_DB
{
        SqlConnection connection;
        SqlCommand query;
        String command;
        public Solders_DB() 
        {
            connection = new SqlConnection();
            connection.ConnectionString = "Server=localhost;Database=Scheduling_Employee ;Trusted_Connection=True;MultipleActiveResultSets=True;";
            query = new SqlCommand();
         }

正如你看到的,我在我的连接中使用了这个MultipleActiveResultSets=True;,但是在这个函数中:

    command = @"SELECT [GID]   FROM [Scheduling_Employee].[dbo].[Solder] where [ID]=@ID";
    query.CommandText = command;
    query.Parameters.Clear();
    query.Parameters.AddWithValue("@ID", id);
    Object o= query.ExecuteScalar();

我面对这个错误:

已经有一个与此命令相关联的打开的数据读取器,必须先关闭它

已经有一个与此命令相关的打开的数据读取器,必须先关闭它

你的问题中的代码不完整。为了得到进一步的帮助,请解释清楚。

当使用SqlConnection时,建议使用'using'语句,像这样:

using (SqlConnection SqlConn = new SqlConnection(ConnString))
    {
         try
         {
             SqlConn.Open();
         }
         catch (Exception ex)
         {
             Debug.WriteLine(ex.ToString());
             return null;
         }
}

您正在尝试从查询的第一次执行中读取数据,请更新您的问题并放置完整的代码和错误堆栈。

通常是在该查询之前有另一个查询并且尚未停止在数据库引擎内执行时(可能是一个沉重的脚本)。您可以尝试query = new SqlCommand();, query.Cancel()

while(query.Connection.State != System.Data.ConnectionState.Open){ Threading.Sleep(100);}