2013-01-12 23 views
6

Jestem nowy w C#. Proszę o pomoc!C# - ExecuteNonQuery wymaga otwartego i dostępnego połączenia. Obecny stan połączenia jest zamknięty

Występuje następujący błąd: "ExecuteNonQuery wymaga otwartego i dostępnego połączenia. Aktualny stan połączenia jest zamknięty." Nie mogę również wstawić do mojej bazy danych.

Poniżej jest mój kod:

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) 
     { 

     } 
    } 
} 

Odpowiedz

7

zapomniał otworzyć połączenia

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

ale należy pamiętać, aby używać

  • using oświadczenie - do zutylizować obiektów
  • try-catch bl ock - prawidłowo złapać wyjątki (manipulacja wyjątek)

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

Hi, I zrobił to, co pan wspomniał, ale pojawia się następujący błąd: "OleDbException był nieobsługiwany" Nie podano wartości dla jednego lub więcej parametrów.Co powinienem zrobić? – user1971823

+0

zobacz moją zaktualizowaną odpowiedź. –

+0

Um, zrobiłem zmiany. Ale dane nadal nie dostaną się do mojej bazy danych. Niepoprawnie błąd, ale po kliknięciu wstawiam następujące okno: "Systems.Windows.Forms.MouseEventArgs" – user1971823

2

Aby połączyć się z bazą danych trzeba otwórz c onnection więc używać

vcon.Open(); 

a następnie

vcom.ExecuteNonQuery(); 
+0

Witam, zrobiłem to, o czym wspomniałeś, ale dostaję następujący błąd: "OleDbException był nieobsługiwany." Nie podano wartości dla jednego lub więcej parametrów.Co powinienem zrobić? – user1971823

Powiązane problemy