2012-07-06 16 views
0

我有一个非常简单的服务,一直以前能用,但现在我把它升级到较新的.NET版本,它已停止,像这样的错误消息的工作:SQL超时

超时过期。在从池中获取 连接之前已经超时。可能发生了这种情况,因为所有连接池都正在使用中,并且已达到最大池大小。

我试图执行存储过程,该服务试图运行并直接在MS运行它sql服务器管理工​​作室需要少于1秒,所以我不明白什么是可能的问题?使用相同数据库的客户端(不是相同的存储过程)在同时使用它们时没有任何超时问题。

编辑,所以你可以看到代码:

在服务启动时这就是所谓的:

Private Sub SetupGetBatch1Command() 
    GetBatch1Command = New System.Data.SqlClient.SqlCommand("spgetTheData1") 
    GetBatch1Command.CommandType = Data.CommandType.StoredProcedure 
End Sub 

这有一定的时间间隔:

Private Function GetBatch1() As DataSet 
    Dim dataset As New DataSet 
    Dim adapter As Data.SqlClient.SqlDataAdapter 
    Dim cn As New System.Data.SqlClient.SqlConnection(connectionstring()) 
    GetBatch1Command.Connection = cn 
    adapter = New Data.SqlClient.SqlDataAdapter(GetBatch1Command) 
    adapter.Fill(dataset) 
    Return dataset 
End Function 

我没有这样做并不太了解它,但我想我至少应该遵循下面的建议并在某处添加cn.dispose()?

还有其他类似的数据库连接,所有的连接都与上面的例子完全相同。

+0

你从服务运行时分析了查询吗? – 2012-07-06 08:57:52

+0

你可以发布你的连接字符串吗?其他客户端是否使用相同的连接字符串? – Thomas 2012-07-06 09:09:25

+2

@Micke在完成使用后,您是否正确地处理了连接和命令?为了让SO人员能够提供帮助,您可能需要在代码中显示您调用存储过程的代码... – user1429080 2012-07-06 09:20:33

回答

1

这几乎总是无法处理/关闭连接对象的结果。通过您的代码去,并确保所有的SqlConnection的物品设置,最好用using声明:

using (SqlConnection c = new SqlConnection(...)) 
{ 
    // use the connection... 
    ... 
} // c.Dispose() will be called automatically here, even if an exception is thrown. 

我怀疑升级到一个新的.NET版本是红色鲱鱼,或只是间接引起的问题:例如,您可能会收到以前没有收到的异常,并且在抛出异常时,您的代码可能无法正确处置/关闭连接。