我在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服务器,但我完全没有想法。我只需要修复
答案 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)
C:\Program Files\Microsoft SQL Server\<your instance>\MSSQL\LOG
来自MSDN博客MSDN Blog
当从连接池获取连接时会发生这种情况, 应用程序不知道物理连接已经消失了,a 尝试使用它是在物理的假设下完成的 连接仍在那里。