0

我在这里搜索了我的问题,但找不到。我正在使用 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();
}

谁能告诉我为什么连接属性没有被初始化?

4

3 回答 3

3

您有两个错误,一个是您声明的,另一个是在您修复第一个错误后发生的:

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

下一个错误是:

你必须打电话myCon.Open才能ExecuteNonQuery()打电话。您不能对未打开的连接执行查询。

您始终可以通过检查连接是否打开来检查连接是否State打开Open

但是,我实际上建议按需创建连接,但这取决于代码。使用全局、共享的连接对象会使自己面临问题。不过,您可以缓存连接字符串。

于 2013-03-06T16:53:50.327 回答
1

尝试先打开连接,使用myCon.Open()

于 2013-03-06T16:54:56.710 回答
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 (?, ?, ?, ?, ?, ?, ?, ?);");
于 2013-03-06T16:55:21.757 回答