ExecuteNonQuery:尚未初始化Connection属性

时间:2013-03-06 16:51:34

标签: c# ms-access connection executenonquery

我在这里搜索了我的问题,但我找不到它。我正在使用Microsoft VS 2010 C#。

这是我的代码:

private OleDbConnection myCon;
public Form5()
{
   myCon = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|ForeignWorkerinfo.accdb");
   InitializeComponent();
}

private void Form5_Load(object sender, EventArgs e)
{
   // TODO: This line of code loads data into the 'foreignWorkerinfoDataSet.FWinFO' table. You can move, or remove it, as needed.
   this.fWinFOTableAdapter.Fill(this.foreignWorkerinfoDataSet.FWinFO);
}

private void button1_Click(object sender, EventArgs e)
{                
   OleDbCommand cmd = new OleDbCommand();
   cmd.Connection = myCon;
   cmd = new OleDbCommand("INSERT INTO [FWinFO] ([ID], [Name], [Gender], [Date of Birth], [Country], [Date of Expire], [Passport No], [Working Place]) VALUES (?, ?, ?, ?, ?, ?, ?, ?);");

   cmd.Parameters.AddWithValue("@id", textBox8.Text);
   cmd.Parameters.AddWithValue("@name", textBox1.Text);
   cmd.Parameters.AddWithValue("@gender", textBox2.Text);
   cmd.Parameters.AddWithValue("@dob", dateTimePicker1.Value);
   cmd.Parameters.AddWithValue("@country", textBox4.Text);
   cmd.Parameters.AddWithValue("@doe", dateTimePicker2.Value);
   cmd.Parameters.AddWithValue("@passport", textBox6.Text);
   cmd.Parameters.AddWithValue("@workplace", textBox7.Text);

   cmd.ExecuteNonQuery();
   myCon.Close();
}

有谁可以告诉我为什么连接属性尚未初始化?

3 个答案:

答案 0 :(得分:3)

您有两个错误,即您声明的错误,以及修复第一个错误后将出现的错误:

第一个是您通过再次调用new来覆盖Connectioncmd属性的设置。要么做一个新的,要么设置查询文本属性。

下一个错误是:

您必须致电myCon.Open进行ExecuteNonQuery()来电。您无法对未打开的连接执行查询。

您可以通过选中State查看连接是否为Open来检查连接是否已打开。

但是,我实际上建议按需创建连接,但这取决于代码。使用全局共享连接对象可以解决问题。但是,您可以缓存连接字符串。

答案 1 :(得分:1)

首先尝试使用myCon.Open()

打开连接

答案 2 :(得分:1)

OleDbCommand cmd = new OleDbCommand();
cmd.Connection = myCon;
cmd = new OleDbCommand("INSERT INTO [FWinFO] ([ID], [Name], [Gender], [Date of Birth], [Country], [Date of Expire], [Passport No], [Working Place]) VALUES (?, ?, ?, ?, ?, ?, ?, ?);");

上面的代码是正确的。问题是,您没有打开连接。请使用:

 OleDbCommand cmd = new OleDbCommand();
 cmd.Connection = myCon;
 myCon.Open();
 cmd = new OleDbCommand("INSERT INTO [FWinFO] ([ID], [Name], [Gender], [Date of Birth], [Country], [Date of Expire], [Passport No], [Working Place]) VALUES (?, ?, ?, ?, ?, ?, ?, ?);");