C#& SQL Server:获取数据然后删除返回错误

时间:2015-08-05 08:39:09

标签: c# sql .net sql-server sqldatareader

我有以下脚本从数据库中获取一些数据,然后将其删除:

public void checkDB()
{
    string query = "SELECT * FROM dbt";

    SqlCommand sqlCommand = new SqlCommand(query, conn);

    SqlDataReader reader;
    int id = -1;

    using (reader = sqlCommand.ExecuteReader())
    {
            if (reader.Read())
            {
                String data= reader["sdata"].ToString();
                Order o = new Order(reader["sdata"].ToString());
                o.prepareForScript();
                id = reader.GetSqlInt32(1).Value;
            }

            reader.Close();
    }

    if (id != -1)
    {
        string removeQuery = "DELETE FROM data WHERE ID=" + id;

        SqlCommand removeCMD = new SqlCommand(removeQuery, conn);

        removeCMD.ExecuteNonQuery();
    }
}

此代码导致异常

  

System.Data.dll中发生未处理的“System.InvalidOperationException”类型异常

显示读者已与此连接关联的附加信息。然而,正如您所看到的那样,阅读器既关闭又在使用循环内部,这意味着它应该绝对关闭。有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

您需要先处理using (SqlCommand sqlCommand = new SqlCommand(query, conn)) { SqlDataReader reader; int id = -1; using (reader = sqlCommand.ExecuteReader()) { if (reader.Read()) { String data= reader["sdata"].ToString(); Order o = new Order(reader["sdata"].ToString()); o.prepareForScript(); id = reader.GetSqlInt32(1).Value; } reader.Close(); } } ,如下所示:

MultipleActiveResultSets

或者

启用Sql Injection。这样,SQL Server允许在单个连接上使用多个开放数据读取器。

但我建议不要一起使用你的SQL语句来避免my_method(20, nil, false)