【问题标题】:Connection string error when multiple requests at the same time多个请求同时出现连接字符串错误
【发布时间】:2020-08-18 00:12:36
【问题描述】:

我在 ASP.NET 中的 Web 应用程序出现问题。

我的错误是:

连接没有关闭连接的当前状态是打开

当两个客户端都在连接字符串中提交请求时。

这是我的代码:

Public Sub populateGrid(ByVal sql As String, ByVal grd As GridView)
    Try
        cmd = New SqlCommand(sql)
        da = New SqlDataAdapter(sql, conn)
        conn.Open()
        ds = New DataSet
        da.Fill(ds)
        grd.DataSource = ds
        grd.DataBind()
        conn.Close()
    Catch ex As Exception
        Throw ex
    Finally
        conn.Close()
    End Try
End Sub

如何处理我的连接字符串可以处理的多个请求?

请帮忙!

谢谢!

【问题讨论】:

  • 为什么要在异常块和 finally 代码块中关闭连接?只有一次接近就足够了,最后是。
  • 我的错误。但是在那次尝试中,它仍然没有在最后部分关闭连接。错误仍然是连接没有关闭连接的当前状态是打开

标签: c# asp.net sql-server ado.net connection-string


【解决方案1】:

在打开连接之前可以检查连接是否已经打开,如下图所示。

if(con.State == ConnectionState.Closed)
{
   conn.Open()
)

【讨论】:

  • 我认为这不是问题,通过异常,似乎他正在关闭连接并且它没有被关闭。
  • 这可以处理来自不同用户的多个请求吗?
  • @JamshaidKamran 如果连接已经打开并且您尝试打开,则会发生此类错误。你可以检查这个SO answer post.
  • @JamshaidKamran 是的,就是这样。我对此进行了测试并打开了 2 个浏览器。同时点击了提交按钮。那是错误显示的时候。但是如果我点击提交按钮并延迟另一个。该过程继续进行。我唯一的问题是处理多个提交请求。
  • 我同意 Suraj Kumar 的观点,检查连接状态是个好主意,但我怀疑从长远来看这会对他有所帮助,因为他在某个地方没有正确关闭连接,这可能会让人头疼管理。
【解决方案2】:

我已经找到了解决方案。如果连接打开,我添加了 thead.sleep。

代码如下:

Public Sub populateGrid(ByVal sql As String, ByVal grd As GridView)
        Try

            cmd = New SqlCommand(sql)
            da = New SqlDataAdapter(sql, conn)
            If conn.State = ConnectionState.Open Then
                System.Threading.Thread.Sleep(3000)
            End If
            conn.Open()
            ds = New DataSet
            da.Fill(ds)
            grd.DataSource = ds
            grd.DataBind()
            conn.Close()
        Catch ex As Exception
            Throw ex
        Finally
            conn.Close()
        End Try
    End Sub

我添加了 3 秒,以便第一个进程可以继续,当它完成后,另一个进程将继续

【讨论】:

  • 这不是一个好的解决方案。目前尚不清楚为什么多个用户无法毫无问题地访问该站点。每个用户以及代码的请求和运行在大多数情况下都是无状态的。您不会在此处显示 conn 对象的设置位置和方式。我会假设 conn 对象读取连接字符串,创建 conn 对象,然后返回连接对象。我不明白为什么这会导致 1 或 20 个用户出现问题。每个加载网页的用户都将在他们自己的上下文中使用 + 调用该代码。 IIS 应该为你处理这个问题。
  • 我会检查 sql server 表 - 确保它有正确的索引以减少全表扫描锁。 10 人或 20 人加载并运行该网页并不重要。这里还有其他问题,实际代码的延迟是一个巨大的创可贴解决方案,而不是真正的修复。您拥有的 conn 对象每次都是针对每个请求从头开始创建的?某些东西在不应该存在的情况下持续存在 conn 对象。因此,请确保此处不存在静态声明等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-11
  • 1970-01-01
  • 1970-01-01
  • 2013-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多