【发布时间】:2012-05-03 00:49:47
【问题描述】:
下午, 所以我已经在这个问题上讨论了几个小时,并且无法真正克服这最后一个问题。下面是我正在编写的这个程序的代码:
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:连接属性尚未初始化。
关于我错过了什么的任何想法?
【问题讨论】:
-
cmd.InsertCommand.Connection = connection1;
-
(顺便说一句,为每个日志条目打开一个新连接是不行的。)
-
@Alan No it isn't,它们由 .NET 自动汇集。这里的禁忌是
IDisposable对象不在using语句中,因此如果发生异常,连接将不会返回到池中。
标签: c# sql-server insert