【问题标题】:C# Windows Service Sql Client unable to connect to database after SQL Server RestartC# Windows Service Sql Client 在 SQL Server 重新启动后无法连接到数据库
【发布时间】:2011-08-23 18:09:01
【问题描述】:

我有一个 Windows 服务,它可以将数据更新到远程机器上的数据库表中。我想检查 SQL 服务器因任何原因关闭并重新启动后服务是否正常(可能是 SQL 服务器软件重新启动或实际的 Windows 机器突然重新启动)。

我已经在 10 台服务器上安装了这个 windows 服务。现在,当我重新启动开发 sql server 框时,所有 10 框中运行的所有客户端服务程序都无法重新连接。但是,在我重新启动客户端 Windows 服务后它工作正常。

我希望客户端程序在服务器可用后自动重新连接,并避免手动重新启动它们。

有什么建议吗?提前致谢。 下面是我用来连接到 sql server 的代码。

private bool ConnectToSqlServer()
    {
        try
        {
            if (sqlConnection.State == ConnectionState.Closed)
            {
                sqlConnection.Open();
                return true;
            }
            return false;
        }
        catch(Exception Ex)
        {
            eventLog1.WriteEntry("ConnectToSqlServer " + Ex.Message, EventLogEntryType.Error);
            return false;
        }
    }

Windows 2008 Enterprise R2 上的 SQL Server - 2008。 客户端程序为C#,Visual Studio 2010开发,使用.net框架4。

【问题讨论】:

    标签: c# sql-server windows-services restart


    【解决方案1】:

    我假设您只尝试连接一次并且遇到异常。如果您不是,那么以下内容将不起作用...

    在您在客户端访问数据库的任何位置添加一个 SqlException Catch 块。然后从该 SqlException 块调用逻辑,该逻辑每 x 秒重试一次连接 y 次迭代。如下所示:

    try
    { 
        //Database access code here
    }
    catch(SqlException sexc)
    {
        if (!ReconnectToDatabase())
        {
            // log error to event log
        }
    }
    
    private bool ReconnectToDatabase()
    {
       bool isConnected = false;
       for (int i = 0; i < 5; i++)  // 5 is arbitrary, use whatever retry count you want
       {
           if (ConnectToSqlServer())
           {
               break;
           }
           System.Threading.Thread.Sleep(5000);  // 5 seconds is arbitrary
       }
    }
    

    同样,对于这篇文章,重试次数和等待秒数是任意的。您需要考虑客户端在等待时的停机时间,以及 SQL Server 通常需要多长时间才能重新启动。

    如果您尝试重新连接,则在 SqlException 块中调用 SqlConnection.ClearAllPools()。

    【讨论】:

      【解决方案2】:

      您的 ConnectionPool 有一些过时的连接。尝试使用 SqlConnection.ClearAllPools() 清除它们;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多