【问题标题】:How to prevent 2 connection open in database?如何防止在数据库中打开 2 个连接?
【发布时间】:2019-01-16 13:57:11
【问题描述】:

我尝试了一些关于防止条目重复的好代码,但我收到了关于连接的错误。我怎样才能解决这个问题?这是我的代码。

        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();

【问题讨论】:

  • 一些程序员通过将数据库连接层实现为单例类或使用连接到数据库的ORM框架来解决这个问题。
  • 你遇到了什么错误?
  • 是不是因为你在这两种方法中都有一个con.Open()。而是将con 设为类属性并在所有方法中使用相同的属性
  • Chetan Ranpariya System.InvalidOperationException: '连接必须有效且打开。'但是当我在查询之上打开时,他说连接已经打开
  • @RiggsFolly 所以查询选择我也会做方法?

标签: c# mysql database insert


【解决方案1】:

您可以简单地使用“使用”状态,它会自动创建和关闭连接

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 语句传递给函数即可。

【讨论】:

    猜你喜欢
    • 2020-08-26
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    相关资源
    最近更新 更多