2013-02-25 93 views
0

我正在编程一个C#TCP服务。在此服务中,客户端连接到我们的TCP服务器 以获取或写入一些数据。C#持久连接到SQL Server

问题:

早上我们重启我们的数据库服务器和服务失去与 数据库的连接。当下一个请求进入我们的系统时,不再有数据库连接。

有人知道我能做什么吗?

如何在重新启动后保持或重新连接到数据库服务器?

+3

每次您需要在数据库上执行某些操作时,请创建并打开一个新连接。为什么你要保持一个持久连接?它解决了什么要求? – slugster 2013-02-25 13:41:52

+0

我认为它需要更多时间来重新连接。但是现在我发现,由于连接池的原因,它不会产生很大的性能差异。 – MjeOsX 2013-02-25 14:42:47

回答

2

在你的情况下,我认为最好不要在所有的服务生命期内维护一个到sql数据库的开放SqlConnection。

取而代之的是,实例化一个SqlConnection对象,打开它,处理您的查询,然后关闭它:它将使用SQL Server的内部机制connection pooling

例如,可以在其打开和关闭的连接的代码块包围每个查询:

using(var cn = new SqlConnection(csString)) 
{ 
    cn.Open(); 

    ... // your query 

    cn.Close(); 
} 

通过这种方式,当重新启动数据库夜间,这将是透明的为您服务。

+0

谢谢。 我会试试这个解决方案 – MjeOsX 2013-02-25 15:03:55

+0

这里不是Close()调用是多余的,因为它会在using块关闭时被调用? – Finster 2013-04-11 15:03:19

+1

是的,但我更喜欢保持它的愚蠢的原因:如果我删除它,单独的cn.Open()方法使我的代码太难看。 – Larry 2013-04-11 19:05:53