【问题标题】:'ExecuteNonQuery requires an open and available Connection. The connection's current state [duplicate]'ExecuteNonQuery 需要一个开放且可用的连接。连接的当前状态[重复]
【发布时间】:2022-01-04 01:59:43
【问题描述】:

我一直有以下错误:

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

我也无法插入到我的数据库中。

private void btnXoa_Click(object sender, EventArgs e)
{
    SqlConnection conn = new SqlConnection(chuoiKetnoi);
    if (MessageBox.Show("Bạn có chắc chắn muốn xóa ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
    {
        // Thuc hien xoa du lieu
        string delete = "delete from tblKET_QUA where MaSV='" + txtMaSinhVien.Text + "' and MaMH='" + cbbMonHoc.Text + "' ";
        using SqlCommand cmd = new SqlCommand(delete, conn);
        cmd.ExecuteNonQuery();
        MessageBox.Show("Xóa dữ liệu thành công", "Thông báo!");

        // Trả tài nguyên
        cmd.Dispose();
        //Load lai du lieu
        load();
    }
}

【问题讨论】:

  • 请不要发布图片。将您的代码发布为格式化文本
  • 仔细阅读错误信息。它准确地告诉你出了什么问题。这也是编写 SQL 查询的错误方式
  • 缺少conn.Open();
  • 如果 txtMaSinhVien.text 包含文本 "' 或 1=1;--" 会发生什么

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


【解决方案1】:

错误消息清楚地说明了您需要做什么。您的 SQL 连接未打开。您需要在执行查询之前打开它。

conn.Open();

参考:SqlConnection.Open


建议

  1. 使用参数化查询而不是将值连接到查询中。这旨在防止在 StackOverflow 社区中得到高度讨论的 SQL 注入(例如:Bobby-tables)。
  2. 应用using声明/阻止SqlConnection conn,以便在连接结束时自动处理连接。
  3. 在为SqlCommand cmd 应用using 声明/阻止时删除cmd.Dispose()。处置将由using自动处理。
using SqlConnection conn = new SqlConnection(chuoiKetnoi);
if (MessageBox.Show("Bạn có chắc chắn muốn xóa ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
    conn.Open();

    // Thuc hien xoa du lieu
    string delete = "delete from tblKET_QUA where MaSV = @MaSV and MaMH= @MaMH";
    using SqlCommand cmd = new SqlCommand(delete, conn);
    
    cmd.Parameters.Add("@MaSV", /* SqlDbType */).Value = txtMaSinhVien.Text;
    cmd.Parameters.Add("@MaMH", /* SqlDbType */).Value = cbbMonHoc.Text;
    cmd.ExecuteNonQuery();
    MessageBox.Show("Xóa dữ liệu thành công", "Thông báo!");

    //Load lai du lieu
    load();
}

【讨论】:

  • 好。您还可以添加“连接打开时不要使用 MessageBox 阻止”
猜你喜欢
  • 1970-01-01
  • 2011-04-02
  • 2015-04-17
  • 2012-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多