检查是否可以建立与数据库的连接

时间:2010-12-06 15:48:28

标签: c#

我需要编写一个计划每天运行的C#程序,并运行一系列测试以确保一切正常运行。它会检查网络连接,服务器连接,数据库连接等。

我对它检查与数据库的连接感到困惑。我应该与db建立连接然后断开连接吗?或者有没有办法只是轮询数据库而不必传递凭据(实际上不需要登录)。

7 个答案:

答案 0 :(得分:2)

您可以尝试使用无效凭据连接到数据库,然后检查错误代码以查看是否出现“拒绝访问”错误,而不是“连接失败”或其他错误。这是否可靠地取决于您选择的数据库服务器,您没有提及。

最简单的方法是使用正确的凭据。

答案 1 :(得分:2)

MySql提供Connection.Ping()方法,即使您之前未调用过Connection.Open(),也会返回true或false。

但是,我更喜欢不执行这种类型的预检检查,而是在出现问题时处理异常(即使Connection.Ping()返回true,也无法确定服务器在下一个命令期间是否仍然可用)

答案 2 :(得分:1)

这实际上取决于“检查与数据库的连接”是什么意思。问题可能出现在许多层面。例如,在SQL Server的情况下,如果您阅读本文,有很多方法可能会失败:http://support.microsoft.com/kb/827422/en

最好是连接,做一个SELECT 1或类似的,并检查返回。

答案 3 :(得分:0)

我不是专家,但我认为你的意思是MS Sql server?数据库服务器可能或多或少都是......

如果程序在同一台服务器上运行或有权访问它,您可以检查数据库服务是否已启动并运行,但我不能100%确定是否能为您提供所需的信息。

编辑:

您也可以尝试使用“SqlDataSourceEnumerator”来查找实例

答案 4 :(得分:0)

您可以使用System.Service进程中的ServiceController类来检查数据库服务是否正在运行。

但是,您仍然可以获得服务正在运行但DB不接受连接的实例。因此,对我来说唯一可靠的方法是连接并运行一个简单的查询

答案 5 :(得分:0)

我不明白为什么你不能做这样的事情?显然这不是具体的,但你可以填补空白。

using (SqlConnection con = new SqlConnection(connectionString))
{
   try
   {
      con.Open();
   }
   catch (Exception)
   {
      // Cant Connect
   }
}

答案 6 :(得分:0)

我们可以检查连接是否打开。

if (conn.State == ConnectionState.Open)
            {
                return true;
            }
            else {
                return false;
            } 

不要忘记使用System.Data;