2013-01-12 314 views
6

am 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ステートメントを使用することを忘れない - 適切にオブジェクト
  • を配置します
  • try-catch bl OCK - あなたがする必要があるデータベースとの接続のために適切な例外をキャッチする(を扱う例外)

UPDATE 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は未処理でした" 1つまたは複数のパラメータに値が指定されていません。どうすればよいですか? – user1971823

+0

私の更新された回答を参照してください。 –

+0

ええ、私は変更を行いました。しかし、データはまだ私のデータベースに入りません。正確にはエラーではありませんが、挿入をクリックすると次のポップアップが表示されます。 "Systems.Windows.Forms.MouseEventArgs" – user1971823

2

cを開くonnection そう

vcon.Open(); 

、その後

vcom.ExecuteNonQuery(); 
+0

こんにちは、あなたが言ったことをしましたが、私は次のエラーが表示されます: "OleDbExceptionは未処理です。" 1つまたは複数のパラメータに値が指定されていません。どうすればよいですか? – user1971823

関連する問題