我需要编写一个计划每天运行的C#程序,并运行一系列测试以确保一切正常运行。它会检查网络连接,服务器连接,数据库连接等。
我对它检查与数据库的连接感到困惑。我应该与db建立连接然后断开连接吗?或者有没有办法只是轮询数据库而不必传递凭据(实际上不需要登录)。
答案 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;