C#SQL查询异常

use*_*088 1 .net c# sql database ado.net

我在.NET 2.0中使用C#,我正在尝试访问和操作数据库.我可以根据需要从DB中读取多次,一切正常,但是一旦我尝试插入一个项目,我就会收到以下错误消息:

ExecuteNonQuery requires an open and available Connection. The connection's current state is closed.
Run Code Online (Sandbox Code Playgroud)

我试图查看这个,但我能找到的修复程序要么不起作用,要么不适用.

我有以下代码:

using (SqlConnection conn = new SqlConnection(SQLConnectionString))
{
    SqlDataAdapter dataAdapter = new SqlDataAdapter("SELECT [Col1] FROM [Table1] WHERE [Col2]='" + val2 + "'", conn);
    DataSet dataSet = new DataSet();
    dataAdapter.Fill(dataSet);

    if (dataSet.Tables.Count == 0 || dataSet.Tables[0].Rows.Count != 1)
    {
        SqlCommand cmd = new SqlCommand("INSERT INTO [Table1] ([Col1], [Col2]) VALUES ('" + val1 + "', '" + val2 + "')", conn);
        cmd.ExecuteNonQuery();
    }
}
Run Code Online (Sandbox Code Playgroud)


注意:我确定我已正确设置权限,因为Visual Studio可以插入相同的SQLConnectionString.另外,我对数据库还是比较陌生的,所以如果我做了一些非常错误的事情,请告诉我.

谢谢.

Han*_*ing 6

在.Fill()开启,如果它是不开放的连接,然后关闭它,它的完成后(只有当它没有打开它本身).这就是Fill确实有效的原因.请参阅MSDN.

但是.ExecuteNonQuery()不这样做,所以你需要手动打开连接,用

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

要么在ExecNonQuery之前,要么在填充之前.

当您使用"使用块"时,您不需要显式关闭()连接,但这不会是错误的.