Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Windows服务Sql客户端在Sql Server重新启动后无法连接到数据库_C#_Sql Server_Windows Services_Restart - Fatal编程技术网

C#Windows服务Sql客户端在Sql Server重新启动后无法连接到数据库

C#Windows服务Sql客户端在Sql Server重新启动后无法连接到数据库,c#,sql-server,windows-services,restart,C#,Sql Server,Windows Services,Restart,我有一个windows服务,它将数据更新到远程计算机中的数据库表中。我想检查在SQL server因任何原因停机并重新启动后(可能是SQL server软件重新启动或实际的windows计算机突然重新启动),服务是否工作正常 我已经在10台服务器上安装了此windows服务。现在,当我重新启动developmentsqlserver框时,在所有10个框中运行的所有客户机服务程序都无法重新连接。但是,在我重新启动客户端windows服务后,它可以正常工作 我希望客户端程序在服务器可用后自动重新连接

我有一个windows服务,它将数据更新到远程计算机中的数据库表中。我想检查在SQL server因任何原因停机并重新启动后(可能是SQL server软件重新启动或实际的windows计算机突然重新启动),服务是否工作正常

我已经在10台服务器上安装了此windows服务。现在,当我重新启动developmentsqlserver框时,在所有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;
        }
    }
SQL Server-2008在Windows 2008 Enterprise R2上运行。
客户端程序是在visual studio 2010中开发的C#,它使用.net frame work 4。

我假设您只尝试连接一次,但遇到异常。如果你没有那么下面的将不起作用

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

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
   }
}
试试看
{ 
//这里是数据库访问代码
}
catch(SqlException sexc)
{
如果(!ReconnectToDatabase())
{
//将错误记录到事件日志
}
}
私有bool重新连接到数据库()
{
bool isConnected=false;
对于(int i=0;i<5;i++)//5是任意的,请使用您想要的重试计数
{
if(ConnectToSqlServer())
{
打破
}
System.Threading.Thread.Sleep(5000);//5秒是任意的
}
}
同样,此帖子的重试次数和等待时间(以秒为单位)是任意的。您需要考虑客户端等待时的停机时间,以及SQL Server重启通常需要多长时间


如果正在尝试重新连接,请在SqlException块中调用SqlConnection.ClearAllPools()。尝试使用SqlConnection.ClearAllPools()清除它们