Share via


逐步解說:使用自訂動作在安裝期間建立資料庫

更新:2007 年 11 月

以下逐步解說示範使用自訂動作和 [CustomActionData] 屬性,在安裝期間建立資料庫和資料庫資料表。

注意事項:

本逐步解說需要在您將部署應用程式的電腦上安裝 SQL Server。

注意事項:

根據目前使用的設定與版本,您所看到的對話方塊與功能表命令可能會與 [說明] 中所描述的不同。若要變更設定,請按一下 [工具] 功能表上的 [匯入和匯出設定]。如需詳細資訊,請參閱 Visual Studio 設定

注意事項:

下列說明將示範如何使用 Visual Basic 專案建立部署專案,而這些一般性準則適用於支援部署 Windows 架構應用程式的所有 Visual Studio 語言專案。

若要建立安裝程式類別

  1. 在 [檔案] 功能表上,按一下 [新增專案]。

  2. 在 [新增專案] 對話方塊中,選取 [專案類型] 窗格中的 [Visual Basic 專案],然後選取 [範本] 窗格中的 [類別庫]。在 [名稱] 方塊中輸入 DBCustomAction。

  3. 在 [專案] 功能表上,按一下 [加入新項目]。

  4. 在 [加入新項目] 對話方塊中,選取 [安裝程式類別]。在 [名稱] 方塊中輸入 VbDeployInstaller.vb。

若要建立資料連接物件

  1. 在 [伺服器總管] 中選取 [資料連接]。按一下滑鼠右鍵,並按一下 [加入連接]。

  2. 在 [選擇資料來源] 對話方塊中,選取 [Microsoft SQL Server]。

  3. 在 [加入連接] 對話方塊中,執行下列事項:

    1. 在 [伺服器名稱] 清單中,輸入或選取伺服器名稱。

    2. 選取 [使用 Windows 驗證]。

    3. 在資料庫方塊中,輸入 master。

    4. 按一下 [確定] 以關閉對話方塊。

  4. 從 [資料] 功能表按一下 [加入新資料來源],然後使用精靈加入您在前面步驟中所建立的連接。若要驗證資料來源是否位於專案中,請按一下 [資料] 功能表上的 [顯示資料來源]。

若要建立含有 SQL 陳述式的文字檔以建立資料庫

  1. 在 [方案總管] 中,選取 [DBCustomAction 專案]。在 [專案] 功能表上,按一下 [加入新項目]。

  2. 在 [加入新項目] 對話方塊中,按一下 [文字檔]。在 [名稱] 方塊中,輸入 [sql.txt (必須使用小寫)。

  3. 將以下內容加入 sql.txt 檔:

    CREATE TABLE [dbo].[Employees] (
    [Name] [char] (30) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
    [Rsvp] [int] NULL ,
    [Requests] [nvarchar] (4000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL 
    ) ON [PRIMARY];
    
    ALTER TABLE [dbo].[Employees] WITH NOCHECK ADD 
    CONSTRAINT [PK_Employees] PRIMARY KEY CLUSTERED 
    (
    [Name]
    ) ON [PRIMARY];
    
  4. 在 [方案總管] 中,選取 sql.txt;再於 [屬性] 視窗中,將 [BuildAction] 屬性設定為 [內嵌資源]。

若要將程式碼加入安裝程式類別以讀取文字檔

  1. 在 [方案總管] 中,選取 [VbDeployInstaller.vb]。在 [檢視] 功能表上,按一下 [程式碼]。

  2. 在模組最上方加入以下 Imports 陳述式:

    Imports System.IO
    Imports System.Reflection
    Imports System.Data.SqlClient
    
  3. 將下列程式碼加入至 VbDeployInstaller 類別,放在 MyBase.New 宣告之後:

    Public Class VbDeployInstaller
    
        Dim masterConnection As New System.Data.SqlClient.SqlConnection
    
        Public Sub New()
            MyBase.New()
    
            'This call is required by the Component Designer.
            InitializeComponent()
    
            'Add initialization code after the call to InitializeComponent
    
        End Sub
    
        Private Function GetSql(ByVal Name As String) As String
            Try
    
                ' Gets the current assembly.
                Dim Asm As [Assembly] = [Assembly].GetExecutingAssembly()
    
                ' Resources are named using a fully qualified name.
                Dim strm As Stream = Asm.GetManifestResourceStream( _
                  Asm.GetName().Name + "." + Name)
    
                ' Reads the contents of the embedded file.
                Dim reader As StreamReader = New StreamReader(strm)
                Return reader.ReadToEnd()
    
            Catch ex As Exception
                MsgBox("In GetSQL: " & ex.Message)
                Throw ex
            End Try
        End Function
    
        Private Sub ExecuteSql(ByVal DatabaseName As String, ByVal Sql As String)
            Dim Command As New SqlClient.SqlCommand(Sql, masterConnection)
    
            ' Initialize the connection, open it, and set it to the "master" database
            masterConnection.ConnectionString = My.Settings.masterConnectionString
            Command.Connection.Open()
            Command.Connection.ChangeDatabase(DatabaseName)
            Try
                Command.ExecuteNonQuery()
            Finally
                ' Closing the connection should be done in a Finally block
                Command.Connection.Close()
            End Try
        End Sub
    
        Protected Sub AddDBTable(ByVal strDBName As String)
            Try
                ' Creates the database.
                ExecuteSql("master", "CREATE DATABASE " + strDBName)
    
                ' Creates the tables.
                ExecuteSql(strDBName, GetSql("sql.txt"))
    
            Catch ex As Exception
                ' Reports any errors and abort.
                MsgBox("In exception handler: " & ex.Message)
                Throw ex
            End Try
        End Sub
    
        Public Overrides Sub Install(ByVal stateSaver As _
          System.Collections.IDictionary)
    
            MyBase.Install(stateSaver)
            AddDBTable(Me.Context.Parameters.Item("dbname"))
        End Sub
    
    End Class
    
  4. 在 [建置] 功能表上,按一下 [建置 DBCustomAction]。

若要建立部署專案

  1. 在 [檔案] 功能表上,依序按一下 [加入] 和 [新增專案]。

  2. 在 [加入新的專案] 對話方塊中,開啟 [其他專案類型] 節點,選取 [專案類型] 窗格中的 [安裝和部署專案]。然後選取 [範本] 窗格中的 [安裝專案]。在 [名稱] 方塊中,輸入 DBCustomAction_Setup。

  3. 在 [屬性] 視窗內選取 [ProductName] 屬性,然後輸入 DB Installer。

  4. 在 [檔案系統編輯器] 中選取 [應用程式資料夾]。在 [動作] 功能表上,依序按一下 [加入] 和 [專案輸出]。

  5. 在 [加入專案輸出群組] 對話方塊中,選取 [DBCustomAction] 專案的 [主要輸出]。

若要建立自訂安裝對話方塊

  1. 在 [方案總管] 中選取 [DBCustomAction_Setup] 專案。在 [檢視] 功能表上指向 [編輯器],並按一下 [使用者介面]。

  2. 在 [使用者介面編輯器] 中,選取 [安裝] 下的 [開始] 節點。在 [動作] 功能表上按一下 [加入對話方塊]。

  3. 在 [加入對話方塊] 對話方塊中,選取 [文字方塊 (A)] 對話方塊,再按一下 [確定]。

  4. 在 [動作] 功能表上按一下 [上移]。重複此動作,直到 [文字方塊 (A)] 對話方塊位於 [安裝資料夾] 節點之上為止。

  5. 在 [屬性] 視窗內選取 [BannerText] 屬性,並輸入「指定資料庫名稱」。

  6. 選取 [BodyText] 屬性,並輸入 [此對話方塊允許您指定要在資料庫伺服器上建立的資料庫名稱]。

  7. 選取 [Edit1Label] 屬性,並輸入資料庫名稱:。

  8. 選取 [Edit1Property] 屬性並輸入 CUSTOMTEXTA1:

  9. 選取 [Edit2Visible]、[Edit3Visible] 和 [Edit4Visible] 屬性,並將這些屬性設定為 False。

若要建立自訂動作

  1. 在 [方案總管] 中選取 [DBCustomAction_Setup] 專案。在 [檢視] 功能表中指向 [編輯器],然後按一下 [自訂動作]。

  2. 在 [自訂動作編輯器] 中,選取 [安裝] 節點。在 [動作] 功能表上選擇 [加入自訂動作]。

  3. 在 [選取專案中項目] 對話方塊中,按兩下 [應用程式資料夾]。

  4. 選取 [來自 DBCustomAction 的主要輸出 (作用中)],再按一下 [確定] 以關閉對話方塊。

  5. 確定 [自訂動作編輯器] 中已選取 [來自 DBCustomAction 的主要輸出 (作用中)] 項目。在 [屬性] 視窗中選取 [CustomActionData] 屬性,並輸入 /dbname=[CUSTOMTEXTA1]。

  6. 在 [建置] 功能表上,按一下 [建置 DBCustomAction_Setup]。

若要在開發電腦上安裝應用程式

  • 在 [方案總管] 中選取 [DBCustomAction_Setup] 專案。在 [專案] 功能表中,按一下 [安裝]。

    這樣會在您的開發電腦上執行安裝程式。

    注意事項:

    您必須具有這部電腦的安裝使用權限才能執行安裝程式。

若要將應用程式部署到另一部電腦

  1. 在 [Windows 檔案總管] 裡,巡覽至您的專案目錄,然後找出所建置的安裝程式。預設的路徑為 \documents and settings\yourloginname\DBCustomAction_Setup\project configuration\ DBCustomAction_Setup.msi。預設的 project configuration 則是 [Debug]。

  2. 將此目錄中的 DBCustomAction_Setup.msi 和所有其他檔案及子目錄複製到另一部電腦中。

    注意事項:

    若要在網路之外的電腦上安裝應用程式,請將檔案複製到 CD-ROM 之類的傳統媒體。

    在目標電腦上,按兩下 Setup.exe 檔案,執行安裝程式。

    注意事項:

    您必須具有這部電腦的安裝使用權限才能執行安裝程式。

若要解除安裝應用程式

  1. 在 Windows [控制台] 中按兩下 [新增或移除程式]。

  2. 在 [新增或移除程式] 對話方塊中,選取 [DBCustomAction_Setup],然後按一下 [移除],再按一下 [確定] 關閉對話方塊。

    秘訣

    若要從開發電腦中解除安裝應用程式,請在 [專案] 功能表中按一下 [解除安裝]。

請參閱

概念

自訂動作中的錯誤處理

參考

CustomActionData 屬性

其他資源

部署中的自訂動作管理