当前位置: 首页 > 面试题库 >

ExecuteNonQuery需要一个开放且可用的连接。连接的当前状态为关闭

东明德
2023-03-14
问题内容

ExecuteNonQuery需要一个开放且可用的连接。 连接的当前状态为关闭。

我在这里做错了什么?我假设您可以重用连接?

谢谢你的帮助!

using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString()))
{
    cn.Open();

    // If we are reverting to an old type
    if (pageAction == "revert")
    {
        debug.Text = "FLAG 1";

        // Get the revert ID
        int revertingID = int.Parse(Request.QueryString["revID"]);
        bool rowsReturned = false;

        debug.Text = "FLAG 2 - " + revertingID.ToString();

        // Set all to 0
        using (SqlCommand cmd = new SqlCommand("SELECT ID FROM tblSiteSettings WHERE ID = " + revertingID, cn))
        {
            // If it exists
            SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            if (rdr.Read())
            {
                rowsReturned = true;
            }
            rdr.Close();
        }

        debug.Text = "FLAG 3 - " + rowsReturned.ToString();

        // Set new active and reset others
        if (rowsReturned == true)
        {
            using (SqlCommand cmd = new SqlCommand("UPDATE tblSiteSettings SET isActive = 1 WHERE ID = " + revertingID, cn))
            {
                cmd.ExecuteNonQuery();
            }
            using (SqlCommand cmd = new SqlCommand("UPDATE tblSiteSettings SET isActive = 0 WHERE ID <> " + revertingID, cn))
            {
                cmd.ExecuteNonQuery();
            }
        }
        //debug.Text = "FLAG 4 - ";
    }

问题答案:

您的问题是:

SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

cmd.ExecuteReader()'如果您要在“摆脱连接”之前再次使用该连接,则应该致电。如果您想了解CommandBehaviour.CloseConnection零件的功能/含义,那么SqlCommand.ExecuteReader的文档是一个不错的选择。也有文档告诉您CommandBehaviour枚举的所有可能值是什么。基本上CommandBehaviour.CloseConnection执行以下操作:

执行该命令时,如果关闭了关联的DataReader对象,则关闭了关联的Connection对象。

如果您不需要特别指定CommandBehaviour,则可以指定CommandBehaviour.Default或完全不指定一个。CommandBehaviour.Default是:

该查询可能返回多个结果集。查询的执行可能会影响数据库状态。Default没有设置CommandBehavior标志,因此调用ExecuteReader(CommandBehavior.Default)在功能上等效于调用ExecuteReader()。



 类似资料:
  • 问题内容: 在qa中使用一些后,我们得到以下错误 我们使用EntityFramework的单例实例 SOF建议: 服务器停机导致EF从无效操作异常中恢复 1)偶尔创建一个新的ContectObject实例 2)将池连接数配置为更高 解决此问题的最佳做法是什么? 我认为为每个Dal操作创建一个新的contectObject很浪费 问题答案: 我认为为每个Dal操作创建一个新的contectObjec

  • 问题内容: 我在数据库中运行了此查询: 我想知道与数据库的连接总数。第一个查询的总和与第二个查询的总和相等,但第三个查询返回的行数不同。 我想知道第三个查询返回什么?我在第三个查询的结果中看到一些状态为。这是什么意思?连接是空闲的,还是已在池中准备好了?如果我的结果中有很多联系,那意味着什么? 谢谢 问题答案: 的状态来会话连接,但不主动运行任何东西(比如最简单的定义,虽然可能不是100%准确的,

  • 这是我对Rest模板的配置,

  • 我有三个实体基本信息,性别和部门。如果我加入了basicInfo和gender模型,那么它工作得很好,但是当我想加入department和其他两个实体时,就会显示 .QuerySyntaxException:需要连接的路径! 我的Dto类 下面是我的存储库类: 最后我得到了这个错误

  • 我正在尝试按照本教程实现nodejs mysql数据库。我知道 查询()是Pool.GetConnection()+Connection.Query()+Connection.Release()的快捷方式。 在本文中,数据库配置为: 这是可以用作: 但是,我真的不明白 如果使用pool会自动释放连接,为什么我们需要这样做呢?

  • 问题内容: 我在客户端上将nodejs与socket.io和angularjs一起使用。我从互联网上获取了angular- socketio示例,并向其中添加了方法。 套接字服务: 控制器: 但是,当我尝试使用此方法断开连接时,出现错误: 而且我不知道在哪里挖…… 问题答案: [更新] 是Angular的内部私有变量,因此您不应该真正依赖于此类事情。伊戈尔在另一个答案中描述了一些处理此问题的建议,