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

-2 c# sql sql-server ado.net

我一直有以下错误:

\n
\n

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

\n
\n

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

\n

在此输入图像描述

\n
private void btnXoa_Click(object sender, EventArgs e)\n{\n    SqlConnection conn = new SqlConnection(chuoiKetnoi);\n    if (MessageBox.Show("B\xe1\xba\xa1n c\xc3\xb3 ch\xe1\xba\xafc ch\xe1\xba\xafn mu\xe1\xbb\x91n x\xc3\xb3a ?", "Th\xc3\xb4ng b\xc3\xa1o", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)\n    {\n        // Thuc hien xoa du lieu\n        string delete = "delete from tblKET_QUA where MaSV=\'" + txtMaSinhVien.Text + "\' and MaMH=\'" + cbbMonHoc.Text + "\' ";\n        using SqlCommand cmd = new SqlCommand(delete, conn);\n        cmd.ExecuteNonQuery();\n        MessageBox.Show("X\xc3\xb3a d\xe1\xbb\xaf li\xe1\xbb\x87u th\xc3\xa0nh c\xc3\xb4ng", "Th\xc3\xb4ng b\xc3\xa1o!");\n\n        // Tr\xe1\xba\xa3 t\xc3\xa0i nguy\xc3\xaan\n        cmd.Dispose();\n        //Load lai du lieu\n        load();\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

Yon*_*hun 5

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

\n
conn.Open();\n
Run Code Online (Sandbox Code Playgroud)\n

参考:SqlConnection.Open

\n
\n

建议

\n
    \n
  1. 使用参数化查询而不是将值连接到查询中。这样做的目的是防止 SQL 注入(例如:Bobby-tables),这在 StackOverflow 社区中得到了广泛讨论。
  2. \n
  3. 应用using声明/块以SqlConnection conn在连接结束时自动处理连接。
  4. \n
  5. cmd.Dispose()在应用using声明/块时删除SqlCommand cmd. 处置将由 自动处理using
  6. \n
\n
using SqlConnection conn = new SqlConnection(chuoiKetnoi);\nif (MessageBox.Show("B\xe1\xba\xa1n c\xc3\xb3 ch\xe1\xba\xafc ch\xe1\xba\xafn mu\xe1\xbb\x91n x\xc3\xb3a ?", "Th\xc3\xb4ng b\xc3\xa1o", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)\n{\n    conn.Open();\n\n    // Thuc hien xoa du lieu\n    string delete = "delete from tblKET_QUA where MaSV = @MaSV and MaMH= @MaMH";\n    using SqlCommand cmd = new SqlCommand(delete, conn);\n    \n    cmd.Parameters.Add("@MaSV", /* SqlDbType */).Value = txtMaSinhVien.Text;\n    cmd.Parameters.Add("@MaMH", /* SqlDbType */).Value = cbbMonHoc.Text;\n    cmd.ExecuteNonQuery();\n    MessageBox.Show("X\xc3\xb3a d\xe1\xbb\xaf li\xe1\xbb\x87u th\xc3\xa0nh c\xc3\xb4ng", "Th\xc3\xb4ng b\xc3\xa1o!");\n\n    //Load lai du lieu\n    load();\n}\n
Run Code Online (Sandbox Code Playgroud)\n

  • 好的。您还可以添加“连接打开时不要使用 MessageBox 阻止” (3认同)