Visual Studio 2005制作数据库安装程序

Visual Studio 2005制作数据库安装程序

(参考msdn的讲解http://msdn.microsoft.com/en-us/library/49b92ztk(vs.71).aspx

 

1. 点击File->New->Project,在project types中选定Visual Basic,然后在模板中选定class library,输入工程名dbinstall,确定。

 

2.在解决方案中选定工程dbinstall,右击选择Add->New Item,在弹出的框中选择Install Class,输入类名dbinstall.vb,确定。

 

3.在解决方案中选定工程dbinstall,右击选择Add->New Item,在弹出的框中选择Text File,输入文件名sql.txt,确定。

 

4.将下列创建数据库表的代码写入sql.txt文件中,最后在sql.txt的属性页设置Build Action为Embedded Resource。(sql.txt中包含的sql语句不能含有“GO”,如有应该把所有的“GO”替换成换行符)

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];

 

5.选定dbinstall.vb,右击选择View Code,将下列代码加入该类中。最后右击选择build生成dll库。

Imports System.IO
Imports System.Reflection

Imports System.Data.SqlClient

 

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 sqlConnection1 As New SqlClient.SqlConnection("user id=" + Me.Context.Parameters.Item("user") + ";password=" + Me.Context.Parameters.Item("pswd") + ";database=master;server=(local)")

   Dim Command As New SqlClient.SqlCommand(Sql, sqlConnection1)

   Command.Connection.Open()
   Command.Connection.ChangeDatabase(DatabaseName)
   Try
      Command.ExecuteNonQuery()
   Finally
      ' Finally, blocks are a great way to ensure that the connection
      ' is always closed.
      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

(如果sql.txt中有中文,则上述代码中的“Dim reader As StreamReader = New StreamReader(strm)”要换成“ Dim reader As StreamReader = New StreamReader(strm, System.Text.Encoding.Default)”,否则,写入到数据库的中文会出现乱码)

 

6. 选中解决方案dbinstall,点击File->Add->New Project,在project types中选定Setup and Deployment,然后在模板中选定Setup Project,输入安装程序名dbinstaller,确定。

 

7. 选定dbinstaller,右击选择Add->Project Output,在弹出的框中选定dbinstall project的Primary Output,确定。

 

8. 选定dbinstaller,右击选择View->User Interface,在User Interface栏选中Install->Start,右击选择Add Dialog,在弹出的框中选择TextboxesA,确定。

 

9.对TextboxesA右击,选择MoveUp,直至出现在Installation Folder之上。

 

10.在TextboxesA的属性页,设置Edit1Label为name of db,Edit1Property为CUSTOMTEXTA1, Edit1Visible为True,设置Edit2Label为User's name,Edit2Property为CUSTOMTEXTA2, Edit2Visible为True,设置Edit3Label为User's password,Edit3Property为CUSTOMTEXTA3, Edit3Visible为True,设置 Edit4Visible为False。

 

11.选定dbinstaller,右击选择View->Custom Actions,在Custom Actions栏选中Install,右击选择Add Custom Action,在弹出的框中选定Application Folder下的Primary Output from dbinstall,确定。

 

12.在Primary Output from dbinstall的属性页,设置CustomActionData为“/dbname=[CUSTOMTEXTA1] /user=[CUSTOMTEXTA2] /pswd=[CUSTOMTEXTA3]”.

 

13.选定dbinstaller,右击选择bulid生成安装程序。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值