2013-03-06 228 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

相關問題