以编程方式测试SQL Server连接的最佳方法是什么?

bac*_*h17 69 c# sql-server database-connectivity

我需要开发一个将每5分钟触发一次的例程,以检查SQL Server(10到12)列表是否已启动并运行.

我可以尝试在每个服务器中获取一个简单的查询,但这意味着我必须在每个服务器中创建一个表,视图或存储过程,即使我使用任何已经制作的SP我需要在每个服务器中都有一个注册用户服务器也是.服务器不在同一物理位置,因此具有这些要求将是一项复杂的任务.有没有办法简单地从C#one SQL Server"ping"?

提前致谢!

pet*_*ria 66

当服务器停止或暂停连接时,我遇到了EF的困难,我提出了同样的问题.因此,为了完整性,上面的答案是代码.

/// <summary>
/// Test that the server is connected
/// </summary>
/// <param name="connectionString">The connection string</param>
/// <returns>true if the connection is opened</returns>
private static bool IsServerConnected(string connectionString)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        try
        {
            connection.Open();
            return true;
        }
        catch (SqlException)
        {
            return false;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 不需要`connection.Close();`在这种情况下,`using`子句将在终止时为你完成. (12认同)
  • 你应该把try catch放在using语句之外.(http://stackoverflow.com/q/4590490/1248177或http://stackoverflow.com/q/6145245/1248177). (3认同)

And*_*zub 63

执行SELECT 1并检查ExecuteScalar是否返回1.

  • 无论如何你有主db :)检查SQL Server是否正在运行的最简洁方法是连接它.要连接,无论如何都需要数据库和登录.所有其他解决方案(如ping SQL Server端口)将无法保证SQL Server正常运行,任何人都可以连接到它. (3认同)
  • @GiorgosBetsos - 我修正了你的错误:-D (2认同)

Geo*_*ley 10

请参阅GitHub上的以下项目:https://github.com/ghuntley/csharp-mssql-connectivity-tester

try
{
    Console.WriteLine("Connecting to: {0}", AppConfig.ConnectionString);
    using (var connection = new SqlConnection(AppConfig.ConnectionString))
    {
        var query = "select 1";
        Console.WriteLine("Executing: {0}", query);

        var command = new SqlCommand(query, connection);

        connection.Open();
        Console.WriteLine("SQL Connection successful.");

        command.ExecuteScalar();
        Console.WriteLine("SQL Query execution successful.");
    }
}
catch (Exception ex)
{
    Console.WriteLine("Failure: {0}", ex.Message);
}
Run Code Online (Sandbox Code Playgroud)


Ken*_*son 7

建立与数据库的连接是否会为您执行此操作?如果数据库未启动,您将无法建立连接.

  • @ backslash17:"用户登录失败..."响应应足以确认1)机器已启动且2)服务正在运行.如果连接超时,则服务未运行/正在运行. (3认同)