close
命名空間 
System.Data (引用ADO.NET基礎物件)
System.Data.OLEDB (引用OLE DB資料來源物件)
System.Data.SqlClient (引用SQL Server資料來源物件)
Imports System.Data.SqlClient

1. 自訂連接字串
Using cn As New SqlConnection ( "Data Source=(local) \ SQLExpress; Database=北風貿易; Integrated Security=SSPI;")
    cn.Open()
    ......
End Suing

Dim cn As SqlConnection
Dim connstr As String

connstr="Server=localhost; database=資料庫名稱; uid=sa; pwd=;"
cn=New SqlConnection(connstr)
cn.Open()
......
cn.Close()

2. 透過 SqlConnectionStringBuilder 來建構連接字串
Dim connstrBuilder As New sqlConnectionStringBuilder()
connstrBuilder.DataSource="(local) \ SQLEXPRESS"
connstrBuilder.InitialCatalog="北風貿易"
connstrBuilder.IntegratedSecurity=True

Using cn As New SqlConnection(connstrBuilder.ConnectionString)
    cn.Open()
    ......
End Using


3. 透過應用程式設定來建構連接字串
方案總管中於 My Project 上連按兩下懷屬左鍵 or 該專案上按滑鼠右鍵選「屬性」,選「設定」頁籤

值的設定內容為:
    資料來源:Microsoft SQL Server
    資料提供者:.NET Framework Data Provider for SQL Server
    伺服器名稱:localhost (選取輸入登入驗證資料及資料庫名稱相關資訊) 

「範圍」說明
Application (應用程式):不能在執行階段變更或儲存,即在執行階段是唯讀的。
User (使用者):可以在執行階段變更或儲存,即在執行階段是可讀取及寫入的。


使用 My.Settings 物件來取用此連接字串以便連接至所指向的資料庫
Using cn As New SqlConnection ( My.Settings.LocalSQLSvr)
    cn.Open()
    ......
End Suing

其設定資料是儲存在專案的組態設定檔 app.config 中
<connectionStrings>
        <add name="PrjName.My.MySettings.LocalSQLExpress" connectionString="Data Source=(local) \ SQLExpress; Initial Catalog=北風貿易;Integrated Security=True"
            providerName="System.Data.SqlClient" />
    </connectionStrings>
若設定裡有密碼或伺服器路徑等敏感資訊時,可加密組態設定檔來保護此些敏感資訊
<connectionStrings>
        <add name="PrjName.My.MySettings.LocalSQLSvr" connectionString="Data Source=localhost;Initial Catalog=WebDB;User ID=sa"
            providerName="System.Data.SqlClient" />
    </connectionStrings>

4. 將連接字串儲存在組態檔中
可直接開啟組態檔 app.config,並自行在 <connectionStrings>......</connectionStrings> 中編寫一個代表連線字串的XML標記
<connectionStrings>
        <add name="LocalWorks" connectionString="Data Source=(local);Initial Catalog=
Works;Integrated Security=True"
            providerName="System.Data.SqlClient" />
    </connectionStrings>

connectionString 屬性:實際的連接字串。
providerName屬性:資料提供者。

Imports System.Configuration
......
Dim settings As ConnectionStringSettings= ConfigurationManager.ConnectionStrings("LocalWorks")
If settings IsNot Nothing Then
    Using cn As New SqlConnection(settings.ConnectionString)
        cn.Open()
        ......
    End Using
End If

【程式範例】
將組態檔中每一連接字串的名稱顯示在下拉清單方塊 cboConn 中,當選取該下拉清單方塊中某一連接字串後,顯示該資料庫中所有資料表的相關資訊至 DataGridView 控制項中。

→ 表單的 Load 事件
Dim cfg As System.Configuration.Configuration= ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
Dim csSec As ConnectionStringsSection=cfg.ConnectionStrings
Dim i As Integer
For i=0 To ConfigurationManager.ConnectionStrings.Count-1
    Dim cs As ConnectionStringSettings=csSec.ConnectionStrings(i)
    If cs.Name <> "LocalSqlServer" Then *
        Me.cboConn.Items.Add(cs.Name)
    End If
Next i

* 避免取到 ASP.NET 2.0 內建名稱為 LocalSqlServer 的連接字串,其記錄在 machine.config 中,是用來連接至 App_Data 目錄中的 SQL Server Express 資料庫檔。

→ cboConn 控制項的 SelectedIndexChanged 事件
Dim frmStaMsg As New frmStatus
frmStaMsg.Show("Connecting to SQL Server ...")

Try
    Dim ds As New DataSet()
    Dim cs As ConnectionStringSettings= ConfigurationManager.ConnectionStrings(Me.cboConn.SelectedItem.ToString)
    If cs IsNot Nothing Then
        txtConn.Text= _
            "連接字串的名稱:" & cs.Name & vbCrLf & _
            "連接字串的內容:" & cs.ConnectionString & vbCrLf & _
            "連接字串的資料提供者:" & cs.ProviderName

        Using cn As New SqlConnection(cs.ConnectionString)
            cn.Open()
             Dim cmd As New SqlCommand("Select * From sys.tables", cn)*
            Using dr As SqlDataReader=cmd.ExecuteReader()
                ds.Load(dr, LoadOption.OverwriteChanges, New String() {"資料表列舉"})
                Me.BindingSource1.DataSource=ds.Tables("資料表列舉")
                Me.DataGridView1.DataSource=Me.BindingSource1
            End Using
        End Using
    End If
Catch ex As Exception
    MessageBox.Show(ex.Message)
End Try
frmStaMsg.Close()

* SQL Server 2000 為 SELECT * FROM sysobjects where xtype='U'

arrow
arrow
    全站熱搜

    tsuozoe 發表在 痞客邦 留言(0) 人氣()