如何处理整个项目中的数据库连接

How to handle database connectivity in entire project

我在模块中创建了一个函数来连接到 windows 应用程序的数据库

Imports System.Data.SqlClient
Module mod_main
Public Function connectDB() As SqlConnection
        Dim Connection As New SqlConnection
        Try
            If Connection.State = ConnectionState.Open Then
                Connection.Close()
            End If
            If IntegratedSecurity Then
                Connection.ConnectionString = "Data Source = " & server & ";Initial Catalog = " & db & ";Connection TimeOut =0;Integrated Security=True"
            Else
                Connection.ConnectionString = "Data Source = " & server & ";Initial Catalog = " & db & ";Connection TimeOut =0;User ID='" & usr & "';Password='" & pwd & "'"
            End If
            Connection.Open()
            Return Connection
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Function
End Module

我有很多功能,并且 类 使用了过多的数据库活动,因此我使用了上述连接 function.For 示例:

 Public Sub FillComboBox(ByVal ComboBox As C1.Win.C1List.C1Combo, ByVal Query As String, ByVal DisplayMember As String, ByVal ValueMember As String)
        Dim SourceDataSet As New DataSet
        Dim adapter As New SqlDataAdapter(Query, connectDB) /*Assigning connection here */
        adapter.Fill(SourceDataSet)
        ComboBox.DataSource = SourceDataSet.Tables(0)
        ComboBox.ColumnHeaders = False
        ComboBox.ColumnWidth = 0
        ComboBox.ExtendRightColumn = True
        ComboBox.DisplayMember = DisplayMember
        ComboBox.ValueMember = ValueMember
    End Sub

由于我是编程初学者,所以我的问题是,这是处理数据库连接的正确方法吗?

我建议您进行以下更改:

  1. Connection 设为 public 以获得全球可访问性
  2. config file 中保存连接字符串并从那里访问它
  3. 不需要关闭和重新打开连接只有在没有可用连接时才打开连接

In your case all time it creates a new connection when the function is invoked since you are declaring and initializing connection inside the function. so checking connection state is meaning less:

因此您的函数如下所示:

public Connection As New SqlConnection
Public Function connectDB() As SqlConnection
      Try
            Dim Constr As String =""
            If IntegratedSecurity Then
               Constr = ConfigurationManager.AppSetting("IconnectionString")
            Else
               Constr  = ConfigurationManager.AppSetting("connectionString")
            End If
            If Connection Is Nothing Then
                Connection = New SqlConnection(Constr)
            End If
            If Connection.State <> ConnectionState.Open Then
              Connection.Open()
            End If           
            Return Connection
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
End Function