【问题标题】:Opening a SQL connection on .NET windows application start and not closing在 .NET windows 应用程序启动时打开 SQL 连接而不是关闭
【发布时间】:2017-06-10 14:18:19
【问题描述】:

我有一个 Windows 应用程序,主屏幕上有一个开始按钮。一旦我启动 exe 并点击开始按钮,就会打开与 SQL 数据库的连接。我不会在任何时候明确关闭连接,除非它自行关闭,从而我重新建立与数据库的连接。我的问题是这会导致任何性能问题吗?我对此表示怀疑,因为在任何时候都只有一个连接是打开的。请指教。提前致谢。

代码如下:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) 处理 MyBase.Load

    Timer1.Interval = 30000
    fnDbConnect()
    lblMessage.Text = ""
End Sub

Private Sub btnStartSMS_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 处理 btnStartSMS.Click

    btnStartSMS.BackColor = Color.Red
    If ObjCn.State = ConnectionState.Open Then
        Timer1.Enabled = True
    Else
        If fnDbConnect() Then
            Timer1.Enabled = True
        Else
            MsgBox("An error occured while connecting to database. Please try later", MsgBoxStyle.Critical)
        End If

    End If

End Sub

并且 ObjCn.State = ConnectionState.Closed 在应用程序的任何地方都被检查并且它是 True,然后调用 fnDbConnect()。

【问题讨论】:

  • 这取决于有多少客户端应用程序尝试同时连接到您的服务器。此外,如果您不使用连接,它将不可避免地超时,因此您需要重新连接。您需要准确考虑为什么要这样做。
  • 除非它自己关闭 - 这可能很难检测,每个与数据库交互的调用都需要处理。

标签: .net sql-server vb.net windows


【解决方案1】:

由于它不包含更多的代码编写,因此始终保持连接打开没有多大意义。恕我直言,最好的建议是使用连接池。每当您的应用程序开始增长时,这也是一种更好的做法。尽管如此,您可以通过这种方式进行 sql 连接:

using (SqlConnection connection = new SqlConnection("yourConnectionString"))
{
    connection.Open();
    // Do whatever you need to do
    connection.Close();
}

如果您保持连接打开,则该连接将无法用于需要与数据库服务器通信的其他事物。 此外,保持您的连接打开,最终将导致您在垃圾收集器运行时擦除和处置您的连接。 基本上,只要您需要使用它,就可以打开和关闭您的连接。不要让您的连接处于打开状态。为此,更好的用法是开放的,如using 语句的示例。这将确保您的连接在操作完成时正确处理。

【讨论】:

  • +1。你能想象如果/当他们决定在任何地方做涉及多线程的任何地方也涉及数据库的任何事情时,在 OP 的原始方案下将需要多少返工。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多