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生成安装程序。