C#Windows服务Sql客户端在Sql Server重新启动后无法连接到数据库
我有一个windows服务,它将数据更新到远程计算机中的数据库表中。我想检查在SQL server因任何原因停机并重新启动后(可能是SQL server软件重新启动或实际的windows计算机突然重新启动),服务是否工作正常 我已经在10台服务器上安装了此windows服务。现在,当我重新启动developmentsqlserver框时,在所有10个框中运行的所有客户机服务程序都无法重新连接。但是,在我重新启动客户端windows服务后,它可以正常工作 我希望客户端程序在服务器可用后自动重新连接,并避免手动重新启动它们 有什么建议吗?提前谢谢。 下面是我用来连接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服务后,它可以正常工作 我希望客户端程序在服务器可用后自动重新连接
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()清除它们