我有一个 C# 控制台应用程序,它本质上是一个长批处理过程,每晚处理许多不同数据库中的数据。在此类程序开始时测试基本数据库连接的正确或首选方法是什么?我遇到了我的一个连接的数据库密码过期的问题,该连接被异常处理捕获,但我想在一开始就测试基本连接。
一个简单的 SELECT 查询就足够了,还是有一种更有效的方法可以为众多数据库执行此操作?
我有一个 C# 控制台应用程序,它本质上是一个长批处理过程,每晚处理许多不同数据库中的数据。在此类程序开始时测试基本数据库连接的正确或首选方法是什么?我遇到了我的一个连接的数据库密码过期的问题,该连接被异常处理捕获,但我想在一开始就测试基本连接。
一个简单的 SELECT 查询就足够了,还是有一种更有效的方法可以为众多数据库执行此操作?
恕我直言,最简单的方法是尝试连接到数据库,如果失败,就放弃。
当您运行夜间批处理时,立即了解原因并解决它并不重要。
所以像这样
using(SqlConnection conn = new SqlConnection(connectionString))
{
try
{
conn.Open();
// Do what you please here
}
catch (Exception ex)
{
// Write error to file
File.Append(...,
DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss") + " " +
ex.Message);
}
finally
{
conn.Close();
}
}
第二天早上你可以检查文件是否有错误...
'Connection.open`
是确定是否可以连接到 db 的简单方法。
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
}
如果您收到编号为 18487 或 18488 的 SqlException,则表明密码已更改。
您无需运行任何查询。如果您使用 SqlConnection 传递连接字符串,则可以尝试 Open() 连接,如果无法连接,则会出现异常,例如:
try
{
var cnn = new SqlConnection(connectionString);
cnn.Open();
}
catch
{
// connection failed, do something
}
打开(然后关闭)连接应该足以测试密码。但是,这并不能告诉您 db 用户是否有权访问特定表。