开发人员在运行 .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中文网其他相关文章!