监测远程数据库连接状态的线程,我的实现有问题。
写了一个函数,想放在线程中启动运行,用来检测数据库服务(本地或远程)是否处于可连接状态。
自己的思路是,在线程中创建一个SqlConnection对象,不停的Open()来检测其State为Open或Closed。
1)这样做首先是产生很多异常:
我把sql数据库服务关闭时,产生异常“
在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,
在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)”;
把数据库服务打开时,产生异常“连接未关闭。 连接的当前状态为打开。”;
2)其次sql数据库服务从关闭到打开的时候,可以看到我程序的状态栏从“断开”变成了“连通”;
而当我把数据库服务停掉的时候,程序状态栏却始终保持“连通”不变。
不知道是怎么回事。或者有更好的做法?我的目的只是要检测数据库是否处于可连接状态,即网络不通、数据库服务没启动,等等状态统统都检测为“断开”;而当检测为“连通”时,必须是可以通过conn.Open()打开数据库连接。
C# code
using (SqlConnection conn = new SqlConnection(Config.SQL_CONN_STR))
{
while (true)
{
try
{
conn.Open();
}
catch (Exception ex)
{
if (conn.State == ConnectionState.Closed)
{
//把我的程序的状态栏的Label设置为断开
sspsl_ConnState.Text = "断开";
}
else if (conn.State == ConnectionState.Open)
{
sspsl_ConnState.Text = "连通";
conn.Close();
}
//下面三行是我自己写的异常记录日志,下面会把日志记录贴出来
StackTrace st = new StackTrace(new StackFrame(true));
StackFrame sf = st.GetFrame(0);
Tool.WriteLog(true , ex , st , sf);
}
Thread.Sleep(1000);
}
}
------解决方案--------------------顶一下, 不知道 啊。
是不是 最后断开 服务后, 只记录了最后一次 状态 但是 不会变了? 因为 程序 不知道 服务已经停了,可是 只是到 最后的 状态是 连接的, 因为 程序 只知道 程序 自己的 断开 和 打开,不知道 服务(外界的原因)???
愚见
------解决方案--------------------