【问题标题】:Allow multiple active connections to MS SQL database using VS datasets允许使用 VS 数据集到 MS SQL 数据库的多个活动连接
【发布时间】:2017-08-08 12:25:23
【问题描述】:

所以我在 ASP.Net 网站上使用 Visual Basic 数据集,当多个用户访问该网站时,我会得到以下内容:

ExecuteReader 需要打开且可用的连接。连接的当前状态是 Open。​​

我可以创建多个到 SQL 数据库的连接吗?

我知道数据集后面有正常的代码,所以我想知道是否可以修改这些文件中的某些内容以为每个用户会话创建一个新连接。

我标记了 c#,因为如果 c# 中出现答案,我会转换它...

【问题讨论】:

  • 您的连接是静态/共享的吗?
  • 我相信一个共享连接,我没有对数据集进行任何更改(除了添加表)

标签: c# asp.net sql-server vb.net


【解决方案1】:

在像 ASP.NET 这样的多线程、多用户环境中,您必须远离共享连接。您最好根据需要创建连接,然后将其处理掉。在幕后,.NET 将使用连接池,而 SQL Server 在处理大量多个连接时不会有任何问题。伪代码:

    ' SQLCommand to fill DataTable
    Dim dt As New DataTable
    Using cnn As New SqlConnection("someconnectionstring")
        Dim cmd As New SqlCommand("SELECT * FROM SomeTable", cnn)
        cnn.Open()
        dt.Load(cmd.ExecuteReader)
        cnn.Close()
    End Using

    ' TableAdapter to fill DataSet
    Dim ds As New DataSet
    Dim ta As New SqlDataAdapter
    ta.Fill(ds)

The [Using statement][1] lets .NET handle the disposal of the connection for you.

【讨论】:

  • 是的,但是Close()using 中是多余的。
  • @Crowcoder 和 .Open() 在这样使用 .Fill() 时是多余的。
  • 我已经将现有的 XSD 代码转换成 vb 文件,我可以按照您上面指定的方式使用生成的类和函数吗?
  • 您可以,尽管将自动生成的代码移动到您自己的 VB 文件中会使更新代码有点麻烦。它反而违背了拥有像数据集设计器这样的图形代码生成工具的目的......
  • @Hobbes 没有必要总是将打开与关闭配对。仅在需要时才这样做。不要留下无用的代码。
猜你喜欢
  • 2016-12-07
  • 2016-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-18
  • 2015-08-23
相关资源
最近更新 更多