C# 我能知道这个错误的原因吗';连接没有关闭。连接';的当前状态是打开的;是什么?

C# 我能知道这个错误的原因吗';连接没有关闭。连接';的当前状态是打开的;是什么?,c#,oledb,C#,Oledb,有人能帮我检查代码吗 如何修复此错误“连接未关闭”。连接的当前状态为“打开” 虽然我已经关闭了连接 **连接未关闭的消息。连接的当前状态为打开。显示在(con.open();[private void button1\u Click\u 1])可能是因为此.Close()在执行最后一行之前关闭表单,或者因为您要在多个位置打开连接 从Form1\u Load事件中删除这些代码行,并在需要时使用它来创建连接,这也将为您清理资源(并关闭连接),无论发生什么情况(即使引发异常) 也 由于您只希望返回一

有人能帮我检查代码吗 如何修复此错误“连接未关闭”。连接的当前状态为“打开”

虽然我已经关闭了连接


**连接未关闭的消息。连接的当前状态为打开。显示在(con.open();[private void button1\u Click\u 1])

可能是因为
此.Close()在执行最后一行之前关闭表单,或者因为您要在多个位置打开连接

  • Form1\u Load
    事件中删除这些代码行,并在需要时使用它来创建连接,这也将为您清理资源(并关闭连接),无论发生什么情况(即使引发异常)
  • 由于您只希望返回一条记录(如果登录错误,则不会返回任何记录),因此可以使用来简化一些事情
以下是您的代码的修改版本:

       public partial class Form1: Form
       {
           OleDbConnection con = new OleDbConnection();
           OleDbCommand cmd = new OleDbCommand();

       public Form1()
       {
            InitializeComponent();

       }

        private void label1_Click(object sender, EventArgs e)
        {

        }  

    private void radioButton2_CheckedChanged(object sender, EventArgs e)
    {

    }

    private void Form1_Load(object sender, EventArgs e)
    {
        con.ConnectionString = "Provider= Microsoft.ACE.OLEDB.12.0;Data 
                                Source= Assignment.accdb";
        con.Open();




    }

    private void radioButton3_CheckedChanged(object sender, EventArgs e)
    {

    }

    private void button2_Click(object sender, EventArgs e)
    {
        Application.Exit();
    }

    private void button1_Click(object sender, EventArgs e)
    {

    }

    private void button1_Click_1(object sender, EventArgs e)
    {

        con.Open();
        OleDbCommand cmd = new OleDbCommand();
        cmd.Connection = con;
        cmd.CommandText = "select * from SignUp where Username = '" + 
                           textBox1.Text + "' and Password= '" + 
                           textBox2.Text + "'";
        OleDbDataReader dr = cmd.ExecuteReader();
        int count = 0;
        while (dr.Read())
        {
            count++;
        }
        if (count ==1 )
        {
            MainMenu menu = new MainMenu();
            menu.Show();
            this.Close();
        }
        else
        {
            MessageBox.Show("Incorrect Username or Password");
        }

        con.Close();

您试图在两个函数中打开相同的连接:
private void Form1\u Load(对象发送方,事件参数e)
private void按钮1\u单击1(对象发送方,事件参数e)


只需删除
con.Open()
form
private void Form1\u Load(object sender,EventArgs e)

您可以在click事件和
form\u Load中打开连接。这很糟糕。移除其中一个(可能是
表单加载
一个)。就像你走到一扇门前,打开它一样。然后几秒钟后上升并试图再次打开它。门上说“不,你不能,我已经打开了”。我强烈建议你读一读可能的副本,因为它看起来像是以原始形式存储密码。这是一个非常糟糕的主意。关于询问不起作用的代码的小提示:代码应该是。最小意味着不包括与问题无关的空事件处理程序;)另一个错误“ConnectionString属性尚未初始化”。显示的是另一个错误“OLEDBPParameterCollection仅接受非null的OLEDBPParameter类型对象,而不是字符串对象”。显示的是
using (var con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Assignment.accdb"))
{
    con.Open();

    using (var cmd = new OleDbCommand())
    {
        cmd.Connection = con;
        cmd.CommandText = "select * from SignUp where Username = @user and Password = @pass";
        cmd.Parameters.Add(new OleDbParameter("@user", textBox1.Text));
        cmd.Parameters.Add(new OleDbParameter("@pass", textBox2.Text));

        var result = cmd.ExecuteScalar();

        if (result == null)
        {
            MessageBox.Show("Incorrect Username or Password");
            return;
        }

        MainMenu menu = new MainMenu();
        menu.Show();
        this.Close();
    }
}