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

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

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:连接属性尚未初始化。

关于我错过的任何想法?

回答:

您需要将连接分配给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将创建,打开和关闭一个

连接,但只是眺望用于可用连接的连接池。但是,这是不必要的开销。

以上是 ExecuteNonQuery:连接属性尚未初始化。 的全部内容, 来源链接: utcz.com/qa/412722.html

回到顶部