日期:2014-05-17  浏览次数:21176 次

C#测试SQL Server是否打开的问题。
用C#测试SQL Server是否“正在运行”,可直接使用SqlConnection的Open方法,没有捕获异常时认为SQL Server“正在运行”,否则为连接失败。
测试的时候,SQL Server 2000 SP4和测试程序运行与同一台计算机。

我在一个窗体里面加入了一个按钮,按下按钮则开始测试。
当SQL Server处在运行状态时,程序弹出“连接成功”提示框,此时不退出测试程序,停止SQL Server,重新测试连接,仍得到“连接成功”提示。如果此时退出测试程序,重新打开测试,则显示“连接失败”。
请问测试程序没有退出的时候,是否有缓存保留了SQL连接信息?
应该如何处理,才能每次都得到正确的测试结果?

		// 测试SQL连接
void BtnTestClick(object sender, EventArgs e)
{
string _connString = "Data Source=" +  tbSqlIP.Text + 
";Initial Catalog=" + tbSqlDatabase.Text + 
";User ID=" + tbUser.Text + 
";pwd=" + tbPwd.Text + ";";

using(SqlConnection sqlConn = new SqlConnection(_connString))
{
try
{
sqlConn.Open();
MessageBox.Show("Sql连接成功!","恭喜",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
}
catch(Exception)
{
MessageBox.Show("Sql连接失败,请检查设置参数与网络连接!","警告",MessageBoxButtons.OK,MessageBoxIcon.Warning);
}
finally
{
sqlConn.Close();
sqlConn.Dispose();
}
}
}

------解决方案--------------------
连接池的问题,可以在里面执行一个查询语句。
------解决方案--------------------
首先你这段代码写得有点问题,自己写try..catch..就不要用using了。
然后你这个问题可能和Open方法的实现有点关系,我没有看到源码,我猜可能是首先判断OpenSate,打开连接之后,状态就存保存在OpenState里,当你dispose了con之后,这个对象就返回给连接池,在你关闭了数据库之后,这个连接仍然没有真正关闭,当你再次调用时,连接池返回这个对象给你,Open方法执行成功,你可以禁用连接池再测试一下。