为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一只名叫tom的猫 2019-10-12 10:49:13
下午,所以我在这个问题上待了好几个小时,无法真正克服最后一个困难。以下是我正在编写的该程序的代码: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:连接属性尚未初始化。关于我错过的任何想法?
查看完整描述

3 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

您不是在初始化连接,这就是为什么出现这种错误的原因。


您的代码:


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

更正的代码:


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


查看完整回答
反对 回复 2019-10-12
?
墨色风雨

TA贡献1853条经验 获得超6个赞

这里有几处错误。

  1. 您是否真的要为每个日志条目打开和关闭连接?

  2. 您不应该使用SqlCommand代替SqlDataAdapter吗?

  3. 数据适配器(或SqlCommand)完全需要错误消息告诉您丢失的消息:活动连接。仅仅因为您创建了一个连接对象,并不能神奇地告诉C#它是您要使用的对象(尤其是如果您尚未打开连接)。


查看完整回答
反对 回复 2019-10-12
  • 3 回答
  • 0 关注
  • 733 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信