我写了一个控制台应用程序,它只调用SQL Server数据库中的存储过程。然后我设置了一个Windows任务调度程序事件,每5分钟调用一次控制台应用程序的. exe文件。大多数时候它都能正常工作,但是一天大约有10次,当连接打开以调用存储过程时,我们会收到下面的sqlException:System.Data.SqlClient.SqlException
(0x80131904):已成功与服务器建立连接,但在登录过程中出错。(提供程序:SSL提供程序,错误:0-远程主机强制关闭了现有连接。)
我临时构建了一个try块,它只包含简单的5次重试,其间有一个短暂的停顿,这对一些人有帮助,但每天仍有几次5次都失败。我想这一定是某种通信问题,但我甚至不知道该去哪里找。
我所做的大部分研究都指向TLS或防火墙问题。我不是这方面的Maven,但我认为如果这两个问题中的任何一个是原因,它每次都会不断地得到错误。对SSL的引用也是如此。另一方面,出于同样的原因,我看不出这怎么可能是控制台应用程序或存储过程的编码问题,所以我没有主意了。
SQL连接代码如下所示:
Public Function GetDataTable(tsql As String, Optional ConnectionString As String = Nothing, Optional TryNum As Integer = 1) As DataTable
Try
Dim dt As DataTable
Using conn As SqlConnection = New SqlConnection(If(Not ConnectionString Is Nothing, ConnectionString, SConn))
conn.Open()
Using dr As SqlDataReader = (New SqlCommand With {.CommandType = CommandType.Text, .CommandText = tsql, .Connection = conn, .CommandTimeout = SqlCommandTimeout}).ExecuteReader
dt = New DataTable()
dt.Load(dr)
dr.Close()
End Using
conn.Close()
End Using
Return dt
Catch exSQL As System.Data.SqlClient.SqlException
If exSQL.ToString.Contains("A connection was successfully established with the server, but then an error occurred during the login process.") AndAlso TryNum < MaxTries Then
Threading.Thread.Sleep(RetryWaitMS)
Return GetDataTable(tsql, ConnectionString, TryNum + 1)
Else
SendMsg(ERROR_EMAIL_GROUP, ERROR_EMAIL_GROUP, "CommonUtils - SQL Error", tsql & vbCrLf & exSQL.ToString)
Throw exSQL
End If
End Try
End Function
1条答案
按热度按时间qpgpyjmq1#
我有同样的问题好几次,这是每一次的原因:
当Windows Server 2012 R2上运行的应用程序尝试连接到Windows Server 2019上运行的SQL Server时,也会出现此问题。
https://support.microsoft.com/en-us/help/4557473/errors-when-applications-try-to-connect-to-sql-server-in-windows