本文共 5726 字,大约阅读时间需要 19 分钟。
环境: windows2003 + vs2005+sqlserver2000 1、
打开 VS2005
,打开工程或网站(这里的示例是一个已发布的网站系统). 2、
从“解决方案资源管理器中”右键点击解决方案名称,选择“添加”――“新建项目”,从打开的“添加新项目”窗口,在“项目类型”栏选择“其他项目类型”――“安装部署”,在模板栏,选“ web
项目”,在下面的名称和地址栏输入名称和地址。 3
、生成 sql
文件(只生成创建数据表的 SQL
语句) 打开 SQLSER
企业管理器,登录,选择数据库――选择要生成 SQL
语句的表,右键――所有任务――生成 SQL
脚本。在打开的窗口中点击“确定”,保存 SQL
脚本(注意: sql
文件一定要用小写的英文名称命名,保存完成后把 SQL
文件另存为 TXT
文件,并把里面的所有的“ GO
”去掉。) 从“解决方案资源管理器中”右键点击解决方案名称,选择“添加”――“新建项目”,从打开的“添加新项目”窗口,在“项目类型”栏选择“ VISAL BASIC
”,在模板栏,选“类库”,在下面的名称和地址栏输入名称和地址。点击“确定”。 5
、从“解决方案资源管理器中”点击刚生成的类库,删除自动生成的 class1.vb
类,右键点击类库名称――添加――新建项,选择“安装程序类”,输入名称,点击“添加”按钮。 6
、打开刚生成的安装程序类,在 dbtest.vb
中,添加如下代码 Imports System.ComponentModel Imports System.Configuration.Install Imports System.Reflection Private sqlConnection1 As SqlClient.SqlConnection Private ServerName As String Private AdminName As String Private AdminPwd As String ' 调用 InitializeComponent 后添加初始化代码 Private Function GetSql(ByVal Name As String) As String ' 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() MsgBox(" 读取SQL文件出错: " & ex.Message) Private Sub ExecuteSql(ByVal DatabaseName As String, ByVal Sql As String) Dim Command As New SqlClient.SqlCommand(Sql, sqlConnection1) Command.Connection.Open() Command.Connection.ChangeDatabase(DatabaseName) Command.ExecuteNonQuery() ' Finally, blocks are a great way to ensure that the connection Command.Connection.Close() Protected Sub AddDBTable() ExecuteSql("master", "CREATE DATABASE water") ExecuteSql("water", GetSql("watertable.txt")) ' Reports any errors and abort. MsgBox(" 生成数据库错误: " & ex.Message) Private Sub WriteWebConfig() Dim FileInfo As System.IO.FileInfo = New System.IO.FileInfo(Me.Context.Parameters.Item("targetdir") & "\web.config") If Not FileInfo.Exists Then Throw New InstallException(" 没有找到配置文件" ) Dim XmlDocument As New System.Xml.XmlDocument XmlDocument.Load(FileInfo.FullName) Dim Node As System.Xml.XmlNode Dim FoundIt As Boolean = False For Each Node In XmlDocument.Item("configuration").Item("appSettings") If Node.Name = "add" Then If Node.Attributes.GetNamedItem("key").Value = "AdoConnBySql" Then Node.Attributes.GetNamedItem("value").Value = String.Format("Provider=SQLOLEDB;Data Source={0};Password={2};User ID={1};Initial Catalog=water", Me.Context.Parameters.Item("server"), Me.Context.Parameters.Item("user"), Me.Context.Parameters.Item("pwd")) Throw New InstallException("web.Config 文件没有包含connString连接字符串设置" ) XmlDocument.Save(FileInfo.FullName) ''' <param name="stateSaver"></param> Public Overrides Sub Install(ByVal stateSaver As _ System.Collections.IDictionary) MyBase.Install(stateSaver) ServerName = Trim(Me.Context.Parameters.Item("server")) AdminName = Trim(Me.Context.Parameters.Item("user")) AdminPwd = Trim(Me.Context.Parameters.Item("pwd")) sqlConnection1 = New SqlClient.SqlConnection sqlConnection1.ConnectionString = "User ID=" + AdminName + ";Data Source = " + ServerName + ";Password=" + AdminPwd + ";Initial Catalog=master" 右键点击类库名称――添加――现有项,选择 watertable.txt
文件。点击“确定”。 右键选择刚刚添加的 watertable.txt
文件,选“属性”,把“生成操作”项内容修改为“嵌入的资源”。 8
、右键安装项目名称――“视图”――“文件系统”,在打开的“文件系统窗口”,右键“ WEB
应用程序文件夹”――“添加”――项目输出, 9
、添加安装时用户要输入的数据库服务器名称、用户名、密码的用户界面。 右键安装项目名称――视图――用户界面,在打开的安装界面中,右键“启动”,选择“添加对话框”,在弹出的窗口中,选择“文本框 A
”。 右键文本框 A
,选择“上移”,重复执行,直到在“安装地址”上。 Edit1property DBSERVERNAME
在“解决方案资源管理器中”,右键安装项目名称――“视图”――“自定义操作”,在打开的自定义操作窗口,右键“安装”――“添加自定义操作”,在打开的“选择项目的项”,双击“ WEB
应用程序文件夹”――主输出来自 clslib(
活动 )
。 右键“主输出来自 clslib(
活动 )
”――“属性窗口”,修改属性 /server=[DBSERVERNAME] /user=[USERNAME] /pwd=[PASSWORD] /targetdir="[TARGETDIR]\"
注意:每个变量之间一定要有一个空格做间隔,如果想得到安装文件在安装机器中的路径,一定要添加 targetdir
变量。 在打开的系统必备窗口,选择 “ .net framework 2.0
” ――选择“从与我的应用程序相同路径下载系统必备”,点击“确定” 从菜单“生成”――“生成 websetup
” ,
生成安装项目。 从“解决方案资源管理器”――安装项目,右键安装项目名称――安装。 做完程序后,发现用 SQLSER
的恢复数据库方法比用 SQL
文件要好的多,也方便的多,就做了一个过程,代码如下: Strdir=me.context.parameters.item(“targetdir”) Strsql="RESTORE DATABASE water FROM DISK = '" + strdir + "data.bak' " + " WITH MOVE 'water_data' TO '" + "c:\water.mdf', " + " MOVE 'water_log' TO '" + "c:\water_log.ldf' " Executesql(“master”,strsql) 注意: data.bak
是 sqlserver
备份数据库名,也可以没有后缀,如果没有后缀,在程序中也不要有,还有备份文件要和发布的网站文件放在一起, water_data
、 water_log
是逻辑数据名,在 sqlserver
数据库中的备份恢复中都能查看到的, TO
后面是把 *.mdf
和 *.ldf
文件复制到一个路径下,直接写死就可以了。 本文转自 牛海彬 51CTO博客,原文链接:http://blog.51cto.com/newhappy/135713,如需转载请自行联系原作者