[C#]Błąd po wykonaniu wielokrotnego zapytania do bazy mysql.

0

Witam. Zaczynam przygodę z programowaniem w C#. Mam taki programik testowy, który zapisuję lub sczytuję dane z bazy mysql. Problem polega na tym, że gdy wykonam jedno zapytanie podczas działania programu i go zamknę jest ok, ale gdy wykonam co najmniej dwa kliknięcia (czy to zapis czy to odczyt) podczas zamykania programu wyskakuję taki błąd jak na screenie poniżej.:

user image

Sam kod programu wygląda tak:

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 MySql.Data.MySqlClient;

namespace pierwszy_mysql
{

    
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();

        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {

            string myConnectionString = "Persist Security Info=False;database=test;server=localhost;Connect Timeout=30;user id=root; pwd=haslo; Charset=latin2";
            MySqlConnection myConnection = new MySqlConnection(myConnectionString);
            myConnection.Open();
            MySqlCommand cmd = new MySqlCommand();
            cmd.Connection = myConnection;
            cmd.CommandText = "INSERT INTO dane (`imie`,`nazwisko`) VALUES('"+imie.Text+"','"+nazwisko.Text+"')";
            cmd.ExecuteNonQuery();
            myConnection.Close();
        }

        private void odczyt_Click(object sender, EventArgs e)
        {
            string myConnectionString = "Persist Security Info=False;database=test;server=localhost;Connect Timeout=30;user id=root; pwd=haslo; Charset=latin2";
            MySqlConnection myConnection = new MySqlConnection(myConnectionString);
            MySqlDataAdapter sda = new MySqlDataAdapter("SELECT * FROM dane", myConnection);
            myConnection.Open();

            DataSet tab = new DataSet();
            sda.Fill(tab, "Tabela");

            sda.Update(tab, "Tabela");
            tab.Dispose();
            tab = new DataSet();
            sda.Fill(tab, "Tabela"); 
            tabela.AutoGenerateColumns = true;
            tabela.DataSource = tab;
            tabela.DataMember = "Tabela";
            myConnection.Close();
        }
        private void zamknij_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

    }
}

A Form wygląda tak:

user image

0

Najlepiej zamiast ręcznego zamykania użyć takiej składni:

using (SqlConnection xxx = new SqlConnection(whatever)) {

//operacje

}

Po klamrze zamykającej, połączenie zostanie automatycznie zamknięte. To rozwiązanie jest lepsze, ponieważ w przypadku jakiegokolwiek błędu / wyjątku - klausura using gwarantuje wywołanie Close() i Dispose()

Po drugie, nie musisz wykonywać .Open() i Close() jeżeli używasz trybu bezpołączeniowego (DataSet, DataAdapter).

0

Dzięki serdeczne...
Wywaliłem otwarcie i zamknięcie do bazy i działa jak należy. Myślałem, że jest to wymagane do działania programu. Tak więc dzięki za pomoc.
Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1