SQL连接被强制关闭

时间:2012-01-31 14:24:11

标签: asp.net sql sql-server connection-timeout

我在IIS7中对Server 2008的SQL查询有困难。我有一个VB.NET类库,它运行一个更新语句。用于创建连接的底层代码没有改变,但突然在我们的测试和开发环境中查询失败。但是,它仍然可以使用生产环境中稍微较旧的代码对同一服务器/数据库起作用。

我已经尝试在web.config中设置连接超时,但我无法解释原因。

查询的基本结构是:

Dim conn = New SqlConnection()
conn.ConnectionString = "Data Source=someserver\sqlexpress2008;Initial Catalog=DatabaseName;User ID=sa;Password=pass"
conn.Open()
Using cmd As SqlCommand = conn.CreateCommand()
    cmd.CommandText = "UPDATE ..."
    cmd.Parameters.AddWithValue("@UName", user.name)
    cmd.ExecuteNonQuery() 'fails with error
End Using

错误是:

  

将请求发送到时发生传输级别错误   服务器。 (提供者:TCP提供者,错误:0 - 现有连接是   被远程主机强行关闭。)

我尝试重新启动IIS和SQL服务器,但我完全没有想法。我只需要修复

5 个答案:

答案 0 :(得分:2)

您需要在致电SqlCommand.ExecuteNonQuery()之前打开连接。您可以致电SqlConnection.Open()

Dim conn = New SqlConnection() 
conn.ConnectionString = "Data Source=someserver\sqlexpress2008;Initial Catalog=DatabaseName;User ID=sa;Password=pass" 
Using cmd As SqlCommand = conn.CreateCommand() 
    cmd.CommandText = "UPDATE ..." 
    cmd.Parameters.AddWithValue("@UName", user.name) 

    conn.Open()
    cmd.ExecuteNonQuery() 'fails with error 
    conn.Close()
End Using 

另外,请确保您的数据库不是单用户模式。

答案 1 :(得分:2)

这帮助了最近被困的另一个人。您可以通过设置 SQL Server Profiler 来检查数据库服务器中的问题。

您可以通过Google搜索找到有关SQL Profiler的大量信息。这是一个可以帮助您入门的site with a video。对于初学者,您将能够看到请求是否甚至到达数据库服务器。

答案 2 :(得分:1)

这是追踪的噩梦。原来这是VB.NET中一个可怕的怪癖造成的。可以为空的日期时间似乎强制为DateTime.MinValue,这导致DateTime.MinValue被插入到SQL datetime中。修复是在设置命令的参数时检查!property.HasValue && property.Value != DateTime.MinValue

答案 3 :(得分:0)

这是网络级错误。由于某种原因,数据库服务器正在终止连接。为了解决这个问题,我将使用SSMS打开到DEV和TEST服务器的连接,并确保我可以运行简单的查询而不会出现问题。这个问题不太可能是你的库,因为你会遇到超时或其他一些错误。

答案 4 :(得分:0)

正如Lcarus所说,数据库服务器正在以不明原因查杀连接。 你可以检查日志,以验证。日志路径为C:\Program Files\Microsoft SQL Server\<your instance>\MSSQL\LOG

来自MSDN博客MSDN Blog

  

当从连接池获取连接时会发生这种情况,   应用程序不知道物理连接已经消失了,a   尝试使用它是在物理的假设下完成的   连接仍在那里。