Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# - ExecuteNonQuery requires an open and available Connection. The connection's current state is closed

am new to C#. Please assist!

I keep having the following error: "ExecuteNonQuery requires an open and available Connection. The connection's current state is closed." I am not able to insert into my database as well.

Below is my code:

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

        }
    }
}
like image 994
user1971823 Avatar asked Jan 12 '13 07:01

user1971823


2 Answers

you forgot to open the connection,

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

but remember to use

  • using statement -- to properly dispose objects
  • try-catch block -- to properly catch exceptions (exception handling)

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());
        }
    }
}
  • AddWithValue
  • Add (recommended to use)
like image 100
John Woo Avatar answered Oct 26 '22 23:10

John Woo


For connect with database you need to open connection so use

vcon.Open();

and then

vcom.ExecuteNonQuery();
like image 41
Harshit Tailor Avatar answered Oct 27 '22 00:10

Harshit Tailor