C# 关于数据库连接失败时程序卡住无反应的问题

稻庄 2014-01-07 09:38:55

private static SqlConnection mySqlConnection;
private static string ConnectionString="";

private string ConnectionStringFunction()//根据文本框内的参数值,返回连接字符串
{
return "server=" + this.textBox1.Text + ";database=" + this.textBox2.Text + ";uid=" + this.textBox3.Text + ";pwd=" + this.textBox4.Text + ";Asynchronous Processing=True;Connection Timeout=1;";
}

private void checkLinkBtn_Click(object sender, EventArgs e)//测试数据库是否连接成功按钮
{
ConnectionString = ConnectionStringFunction();
mySqlConnection = new SqlConnection(ConnectionString);
try
{
mySqlConnection.Open();
}
catch
{
//TEST
messageBox.show("失败");
}

finally
{
if (mySqlConnection.State == ConnectionState.Closed || mySqlConnection.State == ConnectionState.Broken)
{
this.label5.Text = "连接失败";
}
else
{
this.label5.Text = "连接成功";
}
mySqlConnection.Close();
}


}



代码如上。
1)当服务器IP地址正确,然后数据库名/用户名/登陆密码有问题的时候,程序1秒内就可以捕捉到异常,弹出错误提示;
2)当服务器IP地址连不通的时候,程序先是卡住无响应,要等好久才能弹出报错信息。
请教,当服务器地址连不通的时候,如何才能让异常信息在1-2秒内报出来?
...全文
709 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
皑雪 2014-10-24
  • 打赏
  • 举报
回复
c# 的话 可以 直接用一个 ping 类检查连接状态 但是当正在操作数据库查询时中断就没有什么好的办法了,只能等待了
飞小猪 2014-01-07
  • 打赏
  • 举报
回复
参考类似的帖子 帖子里用的tcp去试探链接的,TCP的办法有局限,因为服务器地址可以不是IP地址。 另外还有人提到用线程去链接,并计时,计时超过多少时间还没连接上,就算无法链接。这个思路也不错。
稻庄 2014-01-07
  • 打赏
  • 举报
回复
引用 2 楼 xiaozhu39505 的回复:
[quote=引用 楼主 foreverwoyou 的回复:] [code=csharp] 代码如上。 1)当服务器IP地址正确,然后数据库名/用户名/登陆密码有问题的时候,程序1秒内就可以捕捉到异常,弹出错误提示; 2)当服务器IP地址连不通的时候,程序先是卡住无响应,要等好久才能弹出报错信息。 请教,当服务器地址连不通的时候,如何才能让异常信息在1-2秒内报出来?
这个够呛,sqlserver的管理工具也是这样的[/quote] 终归是有解决方案的我觉得
飞小猪 2014-01-07
  • 打赏
  • 举报
回复
引用 楼主 foreverwoyou 的回复:
[code=csharp] 代码如上。 1)当服务器IP地址正确,然后数据库名/用户名/登陆密码有问题的时候,程序1秒内就可以捕捉到异常,弹出错误提示; 2)当服务器IP地址连不通的时候,程序先是卡住无响应,要等好久才能弹出报错信息。 请教,当服务器地址连不通的时候,如何才能让异常信息在1-2秒内报出来?
这个够呛,sqlserver的管理工具也是这样的
稻庄 2014-01-07
  • 打赏
  • 举报
回复
自己顶一个先!!

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧