SQL命令在用户之间发生冲突,同时单击按钮,ASP.NET 4.5 WebForms VB

SQL命令在用户之间发生冲突,同时单击按钮,ASP.NET 4.5 WebForms VB,asp.net,sql-server,vb.net,Asp.net,Sql Server,Vb.net,这是我在StackOverflow上的第一个问题,但这个网站在过去对我帮助很大 我在目前的工作中承担了一个遗留项目,它是一个运行在WindowsServer2008R2上的ASP.NET4.5WebForms应用程序,后面有一个SQLServer2008R2数据库 目前,我们遇到一个问题,即如果两个或多个用户单击执行SQL命令的按钮,他们会出现以下两个错误之一: 当前命令出现严重错误。如果有结果,应放弃 或 “ExecuteReader需要一个打开且可用的连接。该连接的当前状态为打开。” 第一个

这是我在StackOverflow上的第一个问题,但这个网站在过去对我帮助很大

我在目前的工作中承担了一个遗留项目,它是一个运行在WindowsServer2008R2上的ASP.NET4.5WebForms应用程序,后面有一个SQLServer2008R2数据库

目前,我们遇到一个问题,即如果两个或多个用户单击执行SQL命令的按钮,他们会出现以下两个错误之一:

当前命令出现严重错误。如果有结果,应放弃

“ExecuteReader需要一个打开且可用的连接。该连接的当前状态为打开。”

第一个问题可以在用户刷新时清除,第二个问题要求在web服务器上回收AppPool

以下是对数据库的调用示例:

Public Function OpenSQLConn() As String

    If SQLConn.State = ConnectionState.Closed Then
        SQLConn.ConnectionString = ConnStr
        SQLConn.Open()
    End If

    OpenSQLConn = SQLConn.DataSource.ToString

End Function

Public Function CloseSQLConn() As String

    If SQLConn.State = ConnectionState.Open Then
        SQLConn.Close()
    End If

    CloseSQLConn = SQLConn.Database.ToString

End Function
Public Sub getDataSet(ByRef ds As DataSet, ByVal dataTable As String, ByVal queryString As String)

    OpenSQLConn()
    Dim sqlCmd As New SqlCommand
    With sqlCmd
        .CommandText = queryString
        .CommandTimeout = 0
        .CommandType = CommandType.Text
        .Connection = SQLConn
    End With

    Dim da As New SqlDataAdapter(sqlCmd)
    da.Fill(ds, dataTable)
    CloseSQLConn()
End Sub
Public Function executeSQL(ByVal queryString As String, Optional ByVal doNotExecuteDebugOnly As Boolean = False) As Boolean

    If SQLConn.ConnectionString = "" Then
        SQLConn.ConnectionString = ConnStr
    End If

    If doNotExecuteDebugOnly = True Then
        Debug.Print("ExecuteSQL, Not Executed: " & queryString)

    End If

    Dim da As New SqlDataAdapter(queryString, SQLConn)
    Dim ds As New DataSet

    If SQLConn.State = ConnectionState.Closed Then
        SQLConn.Open()
    End If

    da.Fill(ds, "temp")

    executeSQL = True

    SQLConn.Close()

End Function

我假设我需要更改访问SQL的方式,或者对服务器上的设置做一些不同的操作,但是我不知道该更改什么。在这一点上,任何事情都会有帮助

你不应该让你的连接像那样打开。此外,DataAdapter可以打开和关闭所需的连接,因此您无需管理该连接。根据您的代码,您可能没有使用参数。这会导致sql注入和格式错误。我会放弃几乎所有发布的代码。看起来你正在共享一个连接对象…这不是一个好主意,但如果它也在一个公共模块中,这个问题就更复杂了。我认为在每次需要执行查询时修改代码以创建一个新的连接对象是一个好主意,然后在finishedI认为我必须使用参数并放弃这些函数后立即处理它。通过与以前的开发人员交谈,这些功能来自.Net 2.0 WinForms桌面应用程序。这没有什么区别。开始使用
使用
来处理这些连接,您可能只是意外地解决了问题。