Sql Server Compact Edition No2(連線字串的設定)

首先,在使用sqlce時,一定會用到SqlServerCE這個命名空間,而要對資料庫做連線,就要用到SqlCeconnection這個類別,其中ConnectionString的設定相當重要,相關詳細的資料可以到MSDN觀看,網址是下面這邊

首先,在使用sqlce時,一定會用到SqlServerCE這個命名空間,而要對資料庫做連線,就要用到SqlCeconnection這個類別,其中ConnectionString的設定相當重要,相關詳細的資料可以到MSDN觀看,網址是下面這邊

這邊挑幾個重點部分說明,
一般來說會看到像下面這樣的連線字串

conn.ConnectionString = _
      "Persist Security Info = False; Data Source = '\Northwind.sdf';" & _
      "Password = ''; File Mode = 'shared read'; " & _
      "Max Database Size = 256; Max Buffer Size = 1024"
 
其中可以看到比較特殊的部分
Data Source:這個就是資料庫檔案的位置,要特別注意路徑的部分,在Mobile環境的根目錄是”\”
Persist Security Info:這是說明資料庫是否有加密(需要密碼)
Max DataBase Size:這個是設定資料庫最大的大小,單位是MB,如果沒有指定的話,預設的大小是128MB。
File Mode:這是存取的規則,如果需要多人使用,甚至說本身使用就會用到多個連線就要注意,設定值有下面這些
l   Read Write:預設的權限,各個開啟的連線都能夠自由存取資料庫
l   Shared Read:連線開啟後允許其他的連線以Read Only的方式去開啟,直到連線關閉
l   Read Only:以唯讀的方式開啟資料庫
l   Exclusive:以這種方式開啟後不允許其他的process去開啟或修改資料庫
其他部分的詳細資料可以到上述連結的網頁中查詢;在檔案型的資料庫要特別注意連線字串上的設定,下面是測試兩個連線時的測試程式碼,要特別注意是,一般使用時開啟資料庫連線,使用完畢後記得要關閉連線,這邊因為測試需要,所以沒有去做關閉的動作。
值行的結果畫面像下面這樣
測試程式碼會像下面這樣

Imports System.Data

Public Class Form1

    Dim conn1 As SqlServerCe.SqlCeConnection
    Dim conn2 As SqlServerCe.SqlCeConnection
    Dim DS As New DataSet

    Public Function GetAppPath() As String
        Return System.IO.Path.GetDirectoryName(Reflection.Assembly.GetExecutingAssembly.GetName.CodeBase.ToString)
    End Function

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        cboConn1.SelectedIndex = 0
        cboConn2.SelectedIndex = 0
        conn1 = New SqlServerCe.SqlCeConnection
        conn2 = New SqlServerCe.SqlCeConnection
        DS = New DataSet
    End Sub

    Private Sub btnOpenConn1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpenConn1.Click
        If conn1.State = ConnectionState.Open Then
            conn1.Close()
        End If
        conn1.ConnectionString = String.Format( _
            "Persist Security Info = False; Data Source = '{0}';" & _
            "File Mode = '{1}'; " & _
            "Max Database Size = 256; Max Buffer Size = 1024", _
            GetAppPath() & "\Northwind.sdf", _
            cboConn1.Text)
        Try
            ''請注意,一般使用完畢連線需要關閉,這邊測試原因
            ''開啟連線後沒有關閉連線
            conn1.Open()
            If DS.Tables("conn1") IsNot Nothing Then
                DS.Tables("conn1").Clear()
            End If
            Using DA As New SqlServerCe.SqlCeDataAdapter("Select * from Customers", conn1)
                DA.Fill(DS, "conn1")
            End Using
            dgConn1.DataSource = DS.Tables("conn1")
        Catch ex As Exception
            MessageBox.Show(ex.Message.ToString)
        End Try
    End Sub

    Private Sub btnOpenConn2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpenConn2.Click
        If conn2.State = ConnectionState.Open Then
            conn2.Close()
        End If
        conn2.ConnectionString = String.Format( _
            "Persist Security Info = False; Data Source = '{0}';" & _
            "File Mode = '{1}'; " & _
            "Max Database Size = 256; Max Buffer Size = 1024", _
            GetAppPath() & "\Northwind.sdf", _
            cboConn2.Text)
        Try
            ''請注意,一般使用完畢連線需要關閉,這邊測試原因
            ''開啟連線後沒有關閉連線
            conn2.Open()
            If DS.Tables("conn2") IsNot Nothing Then
                DS.Tables("conn2").Clear()
            End If
            Using DA As New SqlServerCe.SqlCeDataAdapter("Select * from Customers", conn2)
                DA.Fill(DS, "conn2")
            End Using
            dgConn2.DataSource = DS.Tables("conn2")
        Catch ex As Exception
            MessageBox.Show(ex.Message.ToString)
        End Try
    End Sub

    Private Sub btnCloseConn1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCloseConn1.Click
        If conn1.State <> ConnectionState.Closed Then conn1.Close()
    End Sub

    Private Sub btnCloseConn2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCloseConn2.Click
        If conn2.State <> ConnectionState.Closed Then conn2.Close()
    End Sub
End Class