2013-01-12 31 views
6

剛剛接觸C#。 請協助!C# - ExecuteNonQuery需要一個開放且可用的Connection。連接的當前狀態已關閉

我一直有下列錯誤:「ExecuteNonQuery需要一個開放和可用的連接,連接的當前狀態是關閉的。」 我也無法插入到我的數據庫中。

下面是我的代碼:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Data.OleDb; 

namespace AzureSecureStore 
{ 
    public partial class Client : Form 
    { 
     OleDbConnection vcon = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\SB18\Documents\Visual Studio 2010\Projects\AzureSecureStore\AzureSecureStore\AzcureSecureStore Database.accdb; Persist Security Info=False;"); 
     //OleDbConnection vcon = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\SB18\Documents\Visual Studio 2010\Projects\AzureSecureStore\AzureSecureStore\AzcureSecureStore Database.accdb"); 
     public Client() 
     { 
      InitializeComponent(); 

     } 

     private void button1_Click(object sender, EventArgs e) 
     { 

     } 

     private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
     { 

     } 

     private void button5_Click(object sender, EventArgs e) 
     { 

     } 

     private void button4_Click(object sender, EventArgs e) 
     { 

     } 

     private void Client_Load(object sender, EventArgs e) 
     { 
      // TODO: This line of code loads data into the 'azcureSecureStore_DatabaseDataSet5.Client' table. You can move, or remove it, as needed. 
      this.clientTableAdapter.Fill(this.azcureSecureStore_DatabaseDataSet5.Client); 
      // TODO: This line of code loads data into the 'azcureSecureStore_DatabaseDataSet2.Client' table. You can move, or remove it, as needed. 
      //this.clientTableAdapter.Fill(this.azcureSecureStore_DatabaseDataSet2.Client); 

     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      string ab = string.Format("insert into Client values({0}, '{1}', '{2}', {3}, {4}, '{5}')", 
    textBox1.Text, textBox2.Text, int.Parse(textBox3.Text), int.Parse(textBox4.Text), textBox9.Text, int.Parse(textBox10.Text)); 
      OleDbCommand vcom = new OleDbCommand(ab, vcon); 
      vcom.ExecuteNonQuery(); 
      MessageBox.Show("Data stored successfully"); 
      vcom.Dispose(); 
     } 

     private void textBox1_TextChanged(object sender, EventArgs e) 
     { 

     } 
    } 
} 

回答

7

你忘了打開連接,

vcon.Open(); 
vcom.ExecuteNonQuery(); 

但記得要使用

  • using聲明 - 妥善處置對象
  • bl。
  • try-catch bl玉珠 - 正確捕捉異常(異常處理

更新1

string connStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\SB18\Documents\Visual Studio 2010\Projects\AzureSecureStore\AzureSecureStore\AzcureSecureStore Database.accdb; Persist Security Info=False;"; 
string query = "INSERT INTO Client VALUES(@col1,@col2,@col3,@col4,@col5,@col6)"; 
using (OleDbConnection conn = new OleDbConnection(connStr)) 
{ 
    using (OleDbCommand comm = new OleDbCommand()) 
    { 
     comm.Connection = conn; 
     comm.CommandText = query; 
     comm.CommandType = CommandType.Text; 
     comm.Parameters.AddWithValue("@col1", textBox1.Text); 
     comm.Parameters.AddWithValue("@col2", textBox2.Text); 
     comm.Parameters.AddWithValue("@col3", int.Parse(textBox3.Text)); 
     comm.Parameters.AddWithValue("@col4", int.Parse(textBox4.Text)); 
     comm.Parameters.AddWithValue("@col5", textBox9.Text); 
     comm.Parameters.AddWithValue("@col6", int.Parse(textBox10.Text)); 
     try 
     { 
      conn.Open(); 
      comm.ExecuteNonQuery(); 
      MessageBox.Show("Data stored successfully"); 
     } 
     catch(OleDbException e) 
     { 
      MessageBox.Show(e.ToString()); 
     } 
    } 
} 
+0

嗨,我做了你所提到的,但我得到以下錯誤:「OleDbException是未處理」沒有給出一個或多個參數的值。我該怎麼辦? – user1971823

+0

看到我更新的答案。 –

+0

恩,我做了改變。但數據仍然不會進入我的數據庫。不完全是一個錯誤,但我點擊插入時得到以下彈出窗口:「Systems.Windows.Forms.MouseEventArgs」 – user1971823

2

對於連接與數據庫,您需要打開c onnection 所以使用

vcon.Open(); 

然後

vcom.ExecuteNonQuery(); 
+0

嗨,我做了你提到的,但我得到以下錯誤:「OleDbException未處理。」沒有給出一個或多個參數的值。我該怎麼辦? – user1971823

相關問題