首页 >后端开发 >C++ >为什么`ExecuteNonQuery`在.NET中抛出'连接属性未初始化”错误?

为什么`ExecuteNonQuery`在.NET中抛出'连接属性未初始化”错误?

Barbara Streisand
Barbara Streisand原创
2025-01-05 15:54:40751浏览

Why Does `ExecuteNonQuery` Throw a

ExecuteNonQuery:连接属性未初始化

问题

开发人员在运行 .NET 程序时遇到错误,原因是“ExecuteNonQuery:连接属性”尚未初始化”消息。

代码示例

以下代码示例说明了该问题:

using System.Data.SqlClient;

namespace Test
{
    class Program
    {
        static void Main()
        {
            SqlConnection connection = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=syslog2;Integrated Security=True");
            SqlCommand cmd = new SqlCommand("INSERT INTO Application VALUES (@EventLog, @TimeGenerated, @EventType, @SourceName, @ComputerName, @InstanceId, @Message) ");

            connection.Open();  // Connection is not assigned to the command
            cmd.ExecuteNonQuery();
            connection.Close();
        }
    }
}

解决方案

要解决该问题,必须分配 SqlCommand 的连接属性。这可以在命令创建期间或稍后设置属性来完成。

在命令创建期间分配

SqlCommand cmd = new SqlCommand("INSERT INTO Application VALUES (@EventLog, @TimeGenerated, @EventType, @SourceName, @ComputerName, @InstanceId, @Message) ", connection);

稍后设置属性

cmd.Connection = connection;

使用语句推荐

对于对象对于实现IDisposable的,比如SqlConnection,推荐使用using语句。它会自动关闭连接并处理任何异常:

using (var connection = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=syslog2;Integrated Security=True"))
using (var cmd = new SqlCommand("INSERT INTO Application VALUES (@EventLog, @TimeGenerated, @EventType, @SourceName, @ComputerName, @InstanceId, @Message) "))
{
    cmd.Connection = connection;
    // Connection is automatically closed when leaving the using block
}

优化连接管理

要优化性能,无需为 foreach 循环中的每个条目创建新的连接和数据适配器。 ADO.NET 自动管理连接并使用连接池。

以上是为什么`ExecuteNonQuery`在.NET中抛出'连接属性未初始化”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn