Visual Studio 中的部署-安装时使用自定义操作创建数据库

Normal 0 false false false MicrosoftInternetExplorer4 Visual Studio 中的部署

演练:安装时使用自定义操作创建数据库

http://msdn.microsoft.com/zh-cn/library/49b92ztk(VS.80).aspx

创建安装程序类

1.     在“文件”菜单上单击“新建项目”。

2.     在“新建项目”对话框中,选择“项目类型”窗格中的“Visual Basic 项目”,然后选择“模板”窗格中的“类库”。在“名称”框中键入 DBCustomAction。

3.     在“项目”菜单上单击“添加新项”。

4.     在“添加新项”对话框中选择“安装程序类”。在“名称”框中键入 VbDeployInstaller.vb。

创建数据连接对象

1.     在“服务器资源管理器”中,选择“数据连接”。右击并选择“添加连接”。

2.     在“选择数据源”对话框中,选择“Microsoft SQL Server”。

3.     在“添加连接”对话框中,执行以下操作:

a.      在“服务器名称”下拉列表中,键入或选择一个服务器名称。

b.     选择“使用 Windows 身份验证”。

c.      在“数据库”框中,键入 master。

d.     单击“确定”关闭对话框。

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”属性设置为“嵌入的资源”。

将代码添加到安装程序类中以阅读文本文件 [自我测试使用C#代码]

using System;

using System.Collections.Generic;

using System.Text;

using System.IO;

using System.Reflection;

using System.Data.SqlClient;

 

namespace CustomAction

{

    partial class DeployInstaller

    {

        SqlConnection myTestConnection = new SqlConnection();

 

        ///

        /// Required designer variable.

        ///

        private System.ComponentModel.IContainer components = null;

 

        ///

        /// Clean up any resources being used.

        ///

        /// true if managed resources should be disposed; otherwise, false.

        protected override void Dispose(bool disposing)

        {

            if (disposing && (components != null))

            {

                components.Dispose();

            }

            base.Dispose(disposing);

        }

 

        #region Component Designer generated code

 

        ///

        /// Required method for Designer support - do not modify

        /// the contents of this method with the code editor.

        ///

        private void InitializeComponent()

        {

            components = new System.ComponentModel.Container();

        }

 

        #endregion

 

        private string GetSql(string name)

        {

            try

            {

                Assembly asm = Assembly.GetExecutingAssembly();

                Stream strm = asm.GetManifestResourceStream(asm.GetName().Name + "." + name);

 

                StreamReader reader = new StreamReader(strm);

                return reader.ReadToEnd();

 

            }

            catch (Exception ex)

            {

                Console.WriteLine(ex.Message);

                return ex.Message;

            }

        }

 

 

        private void ExecuteSql(string databaseName, string sql)

        {

            SqlCommand command = new SqlCommand(sql, myTestConnection);

           

            myTestConnection.ConnectionString = @"Data Source=910.941.500.660;Initial Catalog=master;Persist Security Info=True;User ID=pa;Password=pa";

            command.Connection.Open();

            command.Connection.ChangeDatabase(databaseName);

            try

            {

                command.ExecuteNonQuery();

            }

            finally

            {

                command.Connection.Close();

            }

        }

 

        protected void AddDBTable(string strDBName)

        {

            try

            {

                ExecuteSql("master", " Create DataBase " + strDBName);

                ExecuteSql(strDBName, GetSql("SqlTest.txt"));

            }

            catch (Exception ex)

            {

                Console.WriteLine(ex.Message);

            }

        }

        public override void Install(System.Collections.IDictionary stateSaver)

        {

            base.Install(stateSaver);

            AddDBTable(this.Context.Parameters["dbname"]);

        }

    }

}

 

创建部署项目

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”。

 

请使用浏览器的分享功能分享到微信等