C# 启动第二个表单后关闭数据库连接
在我的应用程序中,我有两个表单。一个用于登录,另一个用于实际应用程序。但成功登录后,登录表单建立的数据库连接不会终止。关闭此连接的唯一方法是关闭两个窗体。但我想在成功登录后尽快关闭登录表单建立的数据库连接。这是我的密码C# 启动第二个表单后关闭数据库连接,c#,mysql,winforms,connection-string,C#,Mysql,Winforms,Connection String,在我的应用程序中,我有两个表单。一个用于登录,另一个用于实际应用程序。但成功登录后,登录表单建立的数据库连接不会终止。关闭此连接的唯一方法是关闭两个窗体。但我想在成功登录后尽快关闭登录表单建立的数据库连接。这是我的密码 private void button2_Click(object sender, EventArgs e) { try { string mysqlconnection = stri
private void button2_Click(object sender, EventArgs e)
{
try
{
string mysqlconnection = string.Format("datasource='{0}';username=uwcentrallogin;port=3306;password=**************;Connect Timeout=20000;Command Timeout=28800", serverip.Text);
MySqlConnection myconn = new MySqlConnection(mysqlconnection);
MySqlCommand Selectcommand = new MySqlCommand("select * from wartif.userdata where username='" + this.adminusername.Text.Trim() + "'and adminpassword= '" + this.passwordtext.Text.Trim() + "' ; ", myconn);
MySqlDataReader myreader;
myconn.Open();
myreader = Selectcommand.ExecuteReader();
int count = 0;
while (myreader.Read())
{
count = count + 1;
}
if (count == 1)
{
this.Hide();
adminview f2 = new adminview(serverip.Text, adminusername.Text, portnumberbox.Text, defdatabase.Text);
f2.ShowDialog();
this.Close();
myconn.Close();
}
else if (count > 1)
{
label4.Text = "duplicatie users exsist ";
}
else
label4.Text = "Not a privileged user";
label4.ForeColor = Color.Orange;
errpan.BackColor = Color.Orange;
myconn.Close();
}
catch
{
label4.Text = "mysql database connection is not avialable";
}
}
private void button3_Click(object sender, EventArgs e)
{
this.Close();
}
private void button4_Click(object sender, EventArgs e)
{
appconfigsave();
label4.Text = "Your changes has been saved";
label4.ForeColor = Color.Orange;
errpan.BackColor = Color.Orange;
}
加:
在你的台词下面:
myconn.Close();
我还建议您使用语句查看
更多信息
示例
if (count == 1)
{
this.Hide();
adminview f2 = new adminview(serverip.Text, adminusername.Text, portnumberbox.Text, defdatabase.Text);
myconn.Close();
myconn.Dispose();
f2.ShowDialog();
this.Close();
}
这根本不是对你的问题的回答,而是:真正命名你的标签和按钮,如果你的应用程序变得更大,你将失去对按钮/标签的控制。此外,它还将使您的代码更加清晰。在SQL命令中使用参数可防止SQL注入。@Sybren感谢您的建议,我将其更改为参数化sqlI,我会说您需要移动行myconn.Close()代码>以上f2.ShowDialog()
并将我的Dispose()
行添加到Close()
下面。我之所以这样说,是因为如果对话框f2
在初始化时尝试使用SQLConnection,它将无法使用,因为您尚未关闭/释放连接。请参见编辑中的示例
if (count == 1)
{
this.Hide();
adminview f2 = new adminview(serverip.Text, adminusername.Text, portnumberbox.Text, defdatabase.Text);
myconn.Close();
myconn.Dispose();
f2.ShowDialog();
this.Close();
}