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