【发布时间】:2022-01-12 10:44:47
【问题描述】:
代码:
private void btnSave_Click(object sender, EventArgs e)
{
using (con = new SqlConnection(connectionString))
{
SqlCommand cmd;
switch (action)
{
case 'a':
cmd = new SqlCommand("INSERT INTO tbl_User (userName, userPass) Values (@username, @userpass)", con);
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@username", txtUN.Text.Trim());
cmd.Parameters.AddWithValue("@userpass", txtPW.Text.Trim());
cmd.ExecuteNonQuery();
cmd.Connection.Close();
MessageBox.Show("Added new User Successfully!", "User Maintenance", MessageBoxButtons.OK, MessageBoxIcon.Information);
break;
case 'u':
break;
case 'd':
break;
}
}
LoadData();
}
单击保存按钮时出现此错误:
System.InvalidOperationException: 'ExecuteNonQuery 需要打开 和可用的连接。连接的当前状态为关闭。'
我正在使用using 关键字,如果我是正确的,using 不会自动打开和关闭 sqlConnection?如果是这样,为什么它会返回一个错误,即我需要为ExecuteNonQuery() 建立一个开放且可用的连接?我怎样才能解决这个问题?我应该只是简单地添加 Open 和 Close 语法吗?还是有更好的方法来做到这一点
LoadData() 方法:
public void LoadData()
{
//keyword using automatically closes the connection to the sql
using (con = new SqlConnection(connectionString))
{
SqlDataAdapter sda = new SqlDataAdapter("Select * from tbl_User", con);
DataTable dt = new DataTable();
sda.Fill(dt);
DGUserData.DataSource = dt;
}
}
【问题讨论】:
-
不,使用不会打开连接。从 using 块退出 disposes 连接,在 Dispose 方法中,连接会自行关闭,但连接不会自动打开
-
cmd.Connection.Open()不是在哪里? -
using负责清理(关闭),但您必须明确打开。 -
是或者创建一个返回打开的连接的方法,并在using里面的assignement中使用它
-
SqlDataAdapter 会在连接关闭时自动打开连接(或者使用 Fill 方法更好)
标签: c# sql using sqlconnection executenonquery