2013-03-06 231 views
0

我在这里搜索了我的问题,但找不到它。我正在使用Microsoft VS 2010 C#。ExecuteNonQuery:连接属性尚未初始化

这里是我的代码:

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(); 
} 

谁能告诉我,为什么连接属性尚未初始化?

+1

您所看到的具体错误是什么?一个'try/catch'块会有帮助... – Brian 2013-03-06 16:53:34

+0

它出来了同样的问题:( – 2013-03-07 04:49:48

回答

1

尝试第一开口的连接,与myCon.Open()

+0

问题解决了:) – 2013-03-07 14:13:32

+0

@ThamJunKai出于好奇,我以为这不起作用?如果它是正确的,不要试图剥夺另一个,但是你的意思是给我勾选标记。这只是根据错误和我们的讨论,我相信我的解决方案是什么?如果没有,只是忽略这个 – 2013-03-07 14:55:02

3

你有两个错误,修正后的第一个会出现一个你的状态,以及一个:

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

下一个错误是:

你必须调用myCon.Open,使ExecuteNonQuery()电话。您无法针对未打开的连接执行查询。

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

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

+0

增加myCon.Open,但仍然出来同样的错误 – 2013-03-07 03:00:24

+0

@ThamJunKai另外建议,尝试移动'myCon = new OleDbConnection “Provider = Microsoft.ACE.OLEDB.12.0; Data Source = | DataDirectory | ForeignWorkerinfo.accdb”);''InitializeComponent'后面'也许这就是覆盖你的初始化 – 2013-03-07 03:30:40

+0

先生,仍然没有工作,我试着尝试catch方法 – 2013-03-07 03:48:44

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 (?, ?, ?, ?, ?, ?, ?, ?);"); 
+0

嗨,我已经按照你的代码,但仍然无法正常工作。 ExecuteNonQuery:连接属性尚未初始化。 – 2013-03-07 02:59:50

+0

@ThamJunKai - 如前所述,您的代码存在几个问题。首先,你没有一个“ConnectionObject”可以使用,其次,你的'ParameterObjects'不会用你声明它们的方式工作。哦,你在哪里实例化你的'SqlDataAdapter'?让我编辑我的答案,看看能否帮助你... – Brian 2013-03-07 07:01:29

相关问题