ExecuteNonQuery:连接属性尚未初始化

【字号: 日期:2024-03-18浏览:43作者:雯心
(adsbygoogle = window.adsbygoogle || []).push({}); 如何解决ExecuteNonQuery:连接属性尚未初始化?

您需要将连接分配给sqlCommand,可以使用构造函数或属性:

cmd.InsertCommand = new sqlCommand('INSERT INTO Application VALUES (@EventLog, @TimeGenerated, @EventType, @SourceName, @ComputerName, @InstanceId, @Message) ');cmd.InsertCommand.Connection = connection1;

我强烈建议对using-statement实现Idisposable类似的任何类型使用sqlConnection,它还会关闭连接:

using(var connection1 = new sqlConnection(@'Data Source=.sqlexpress;Initial Catalog=syslog2;Integrated Security=True'))using(var cmd = new sqlDataAdapter())using(var insertCommand = new sqlCommand('INSERT INTO Application VALUES (@EventLog, @TimeGenerated, @EventType, @SourceName, @ComputerName, @InstanceId, @Message) ')){ insertCommand.Connection = connection1; cmd.InsertCommand = insertCommand; //..... connection1.open(); // .... you don’t need to close the connection explicitely}

除此之外,你并不需要创建一个新的连接,并DataAdapter在每个条目foreach,即使创建,打开和关闭连接并 意味着ADO.NET将创建,打开和关闭一个 连接,但只是眺望用于可用连接的连接池。但是,这是不必要的开销。

解决方法

下午,所以我在这个问题上待了好几个小时,无法真正克服最后一个困难。以下是我正在编写的该程序的代码:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; using System.Data; using System.Data.SqlClient; using System.Configuration;namespace Test { class Program { static void Main() {EventLog alog = new EventLog();alog.Log = 'Application';alog.MachineName = '.';foreach (EventLogEntry entry in alog.Entries){ SqlConnection connection1 = new SqlConnection(@'Data Source=.sqlexpress;Initial Catalog=syslog2;Integrated Security=True'); SqlDataAdapter cmd = new SqlDataAdapter(); cmd.InsertCommand = new SqlCommand('INSERT INTO Application VALUES (@EventLog,@TimeGenerated,@EventType,@SourceName,@ComputerName,@InstanceId,@Message) '); cmd.InsertCommand.Parameters.Add('@EventLog',SqlDbType.VarChar).Value = alog.Log; cmd.InsertCommand.Parameters.Add('@TimeGenerated',SqlDbType.DateTime).Value = entry.TimeGenerated; cmd.InsertCommand.Parameters.Add('@EventType',SqlDbType.VarChar).Value = entry.EntryType; cmd.InsertCommand.Parameters.Add('@SourceName',SqlDbType.VarChar).Value = entry.Source; cmd.InsertCommand.Parameters.Add('@ComputerName',SqlDbType.VarChar).Value = entry.MachineName; cmd.InsertCommand.Parameters.Add('@InstanceId',SqlDbType.VarChar).Value = entry.InstanceId; cmd.InsertCommand.Parameters.Add('@Message',SqlDbType.VarChar).Value = entry.Message; connection1.Open(); cmd.InsertCommand.ExecuteNonQuery(); connection1.Close();} } } }

该代码可以正常编译,没有错误或警告,但是当我运行它时,只要它到达cmd.InsertCommand.ExecuteNonQuery();就可以了。我收到以下错误:

ExecuteNonQuery:连接属性尚未初始化。

关于我错过的任何想法?

相关文章: