Как предотвратить 2 открытых соединения в базе данных? - PullRequest
0 голосов
/ 16 января 2019

Я пробую что-то хорошее для предотвращения дублирования записей, но получаю ошибку о соединении. Как я могу это исправить? Вот мой код.

        if(label1.Text == "" || label2.Text == "" || label3.Text == "") {
            MessageBox.Show("Please Select Data");
        } else {
            String query = "Select * from Attendance where empIn=@empIn";
            MySqlCommand cmd1 = new MySqlCommand(query, con);
            cmd1.Parameters.AddWithValue("empIn", label2.Text);
            MySqlDataReader dr = cmd1.ExecuteReader();
            if (dr.HasRows) {
                MessageBox.Show("This Person has already IN");
            } else {
                insert();
            }            
        }
    }

    public void insert()
    {
        int i;
        con.Open();
        MySqlCommand cmd = new MySqlCommand("INSERT INTO Attendance (Name,Date,empIn)VALUES(@Name,@Date,@empIn)", con);
        cmd.Parameters.Add("@Name", MySqlDbType.VarChar).Value = label3.Text;
        cmd.Parameters.Add("@Date", MySqlDbType.Date).Value = Convert.ToDateTime(label1.Text);
        cmd.Parameters.Add("@empIn", MySqlDbType.VarChar).Value = label3.Text;
        i = cmd.ExecuteNonQuery();
        if (i > 0) {
            MessageBox.Show("Data Inserted");
            label2.Text = "";
            label3.Text = "";
            label4.Text = "";

        } else {
            MessageBox.Show("Not Deleted");
        }
        con.Close();

1 Ответ

0 голосов
/ 16 января 2019

Вы можете просто использовать состояние «использование», которое автоматически создаст и закроет соединение

public object getQueryScaller(string sqlQuery)
    {
        object value = null;

        using (SqlConnection conn = new SqlConnection(_connectionString))
        {
            using (SqlCommand cmd = new SqlCommand(sqlQuery, conn))
            {
                conn.Open();
                value = cmd.ExecuteScalar();
            }
        }
        return value;
    }

Это автоматически контролирует проблему с подключением, которая вам не понадобится. просто передав параметр в функцию как оператор SQL, и он будет работать.

...