`

Asp.net与SQL一起打包部署安装

阅读更多

借鉴msdn webcasts的Asp.net程序部署和李洪根的一篇文章,然后加上自己的亲身体会,把整个SQL和Asp.net(vb.net)一起打包的全过程写一下。
一.准备必要的文件
1. SQL脚本文件,生成以后安装过程中需要的表和存储过程等等;

生成之后,就暂时把它命名为db.sql(注意大小写)
2.LisenceFile.rtf的安装文件,因为我的系统是个人的,而且free的,所以就没有做。这个以后也是要用到的。
二.在自己现有的项目里面创建部署项目:
1. 在“文件”菜单上指向“添加项目”,然后选择“新建项目”。(图1-2)
2. 在“添加新项目”对话框中,选择“项目类型”窗格中的“安装和部署项目”,然后选择“模板”窗格中的“Web 安装项目”。在“名称”框中键入 Test Installer。(图1-3)
3. 单击“确定”关闭对话框。
4. 项目被添加到解决方案资源管理器中,并且文件系统编辑器打开。
5. 在“属性”窗口中,选择 ProductName 属性,并键入 GCRM。

(1-2)

(图1-3)其他项目的作用可以参考Webcast
三。将 VbNetTest项目的输出添加到部署项目中(假如你的虚拟目录是SQLANDASPNet)
1. 在“文件系统编辑器”中,选择“Web 应用程序文件夹"。在“操作”菜单上,指向“添加”,然后选择“项目输出”。(图1-4)
2. 在“添加项目输出组”对话框中,选择“项目”下拉列表中的“SQLANDASPNet”。
3. 单击“确定”关闭对话框。
4. 从列表中选择“主输出”和“内容文件”组,然后单击“确定”。(图1-5)

(图1-4)

(图1-5)其他的作用可以参考webcast,源文件就是所有项目的的文件
四.

创建自定义安装对话框
1. 在解决方案资源管理器中选择“Test Installer”项目。在“视图”菜单上指向“编辑器”,然后选择“用户界面”。 (图1-6)
2. 在用户界面编辑器中,选择“安装”下的“启动”节点。在“操作”菜单上,选择“添加对话框”。
3. 在“添加对话框”对话框中,选择“许可协议”对话框,然后单击“确定”关闭对话框。 (注:我没有添加,因为暂时我还是不需要,需要的要添加一下哦)
4. 在“添加对话框”对话框中,选择“文本框 (A)”对话框,然后单击“确定”关闭对话框。 (图1-7)
5. 在“操作”菜单上,选择“上移”。重复此步骤,直到“文本框 (A)”对话框位于“安装文件夹”节点之上。
6. 在“属性”窗口中,选择 BannerText 属性并键入:安装数据库.。
7. 选择 BodyText 属性并键入:安装程序将在目标机器上安装数据库。
8. 选择 Edit1Label 属性并键入:数据库名称:。
9. 选择 Edit1Property 属性并键入 CUSTOMTEXTA1。
10. 选择 Edit1Value 属性并键入:GsCrm。
11. 选择 Edit2Label 属性并键入:服务器名:。
12. 选择 Edit2Property 属性并键入 CUSTOMTEXTA2。
13. 选择 Edit2Value 属性并键入:(local)。
14. 选择 Edit3Label 属性并键入:用户名:。
15. 选择 Edit3Value 属性并键入:sa。
16. 选择 Edit3Property 属性并键入 CUSTOMTEXTA3。
17. 选择 Edit4Label 属性并键入:密码:。
18. 选择 Edit4Property 属性并键入 CUSTOMTEXTA4。
19. 选择 Edit2Visible、Edit3Visible ,并将它们设置为 False。(图1-8)



(图1-7)


(图1-8)

(五).创建自定义操作
1. 在解决方案资源管理器中选择“Test Installer”项目。在“视图”菜单上指向“编辑器”,然后选择“自定义操作”。(图1-9)
2. 在自定义操作编辑器中选择“安装”节点。在“操作”菜单上,选择“添加自定义操作”。
3. 在“选择项目中的项”对话框中,双击“应用程序文件夹”。
4. 选择“主输出来自 DBCustomAction(活动)”项,然后单击“确定”关闭对话框。
5. 在“属性”窗口中,选择 CustomActionData 属性并键入 /dbname=[CUSTOMTEXTA1] /server=[CUSTOMTEXTA2] /user=[CUSTOMTEXTA3] /pwd=[CUSTOMTEXTA4] /targetdir="[TARGETDIR]\"。 (图1-10)

附/targetdir="[targetdir]\"是安装后的目标路径,为了在dbcustomaction类中获得安装后的路径,我们设置此参数。
另外,安装后的路径也可以通过Reflection得到:
Dim Asm As System.Reflection.Assembly = _
System.Reflection.Assembly.GetExecutingAssembly
MsgBox("Asm.Location")

(图1-9)

(图1-10)
呵呵,已经好多了,剩下来的是关键性步骤,我花了好多时间研究。
(六)创建安装程序类
1. 在“文件”菜单上指向“新建”,然后选择“项目”。
2. 在“新建项目”对话框中,选择“项目类型”窗格中的“Visual Basic 项目”,然后选择“模板”窗格中的“类库”。在“名称”框中键入 DBCustomAction。
3. 单击“打开”关闭对话框。
4. 从“项目”菜单中选择“添加新项”。
5. 在“添加新项”对话框中选择“安装程序类”。在“名称”框中键入 DBCustomAction。
6. 单击“确定”关闭对话框。(图1-11,1-12)
注:这里是在原来的项目上建立一个简单的安装文件就可以了。

(图1-11)
添加后的效果图:

(图1-12)这里的sql文件是要等一下添加的
(七)
添加文件
1. 将SQL Server生成的脚本文件db.sql添加到“Test Installer”项目(图1-12)
2. 将安装文件LisenceFile.rtf添加到“Test Installer”项目
3. 在用户界面编辑器中,选择许可协议,设置LisenceFile属性为LisenceFile.rtf文件
(八)
一下的代码是整个部署的最重要的一部分了

将代码添加到安装程序类中,dbcustomaction.vb类

Imports System.ComponentModelimports System.Configuration.Installimports System.IOimports System.Reflection  Public Class DBCustomActionClass DBCustomActioninherits System.Configuration.Install.Installer 组件设计器生成的代码#region "组件设计器生成的代码 "public Sub New()Sub New()mybase.new()'该调用是组件设计器所必需的initializecomponent()'在 InitializeComponent() 调用之后添加任何初始化end Sub' Installer 重写 dispose 以清理组件列表。protected Overloads Overrides Sub Dispose()Sub Dispose(ByVal disposing As Boolean)if disposing Thenif Not (components Is Nothing) Thencomponents.dispose()end Ifend Ifmybase.dispose(disposing)end Subprivate components As System.ComponentModel.IContainer Private Sub InitializeComponent()Sub InitializeComponent()end Sub#end Region'执行sql 语句private Sub ExecuteSql()Sub ExecuteSql(ByVal conn As String, ByVal DatabaseName As String, ByVal Sql As String)dim mySqlConnection As New SqlClient.SqlConnection(conn)dim Command As New SqlClient.SqlCommand(Sql, mySqlConnection)command.connection.open()command.connection.changedatabase(databasename)trycommand.executenonquery()finally'close Connectioncommand.connection.close()end Tryend Subpublic Overrides Sub Install()Sub Install(ByVal stateSaver As System.Collections.IDictionary)MyBase.Install(stateSaver)' ------------------------建立数据库-------------------------------------------------trydim connStr As String = String.Format("data source={0};user id={1};password={2};persist security info=false;packet size=4096", Me.Context.Parameters.Item("server"), Me.Context.Parameters.Item("user"), Me.Context.Parameters.Item("pwd"))'根据输入的数据库名称建立数据库executesql(connstr, "master", "CREATE DATABASE " + Me.Context.Parameters.Item("dbname"))'调用osql执行脚本dim sqlProcess As New System.Diagnostics.Processsqlprocess.startinfo.filename = "osql.exe "sqlprocess.startinfo.arguments = String.Format(" -U {0} -P {1} -d {2} -i {3}db.sql", Me.Context.Parameters.Item("user"), Me.Context.Parameters.Item("pwd"), Me.Context.Parameters.Item("dbname"), Me.Context.Parameters.Item("targetdir"))sqlprocess.startinfo.windowstyle = ProcessWindowStyle.Hiddensqlprocess.start()sqlprocess.waitforexit() '等待执行sqlprocess.close()'删除脚本文件dim sqlFileInfo As New System.IO.FileInfo(String.Format("{0}db.sql", Me.Context.Parameters.Item("targetdir")))if sqlFileInfo.Exists Thensqlfileinfo.delete()end Ifcatch ex As Exceptionthrow exend Try ' ---------------------将连接字符串写入Web.config-----------------------------------trydim FileInfo As System.IO.FileInfo = New System.IO.FileInfo(Me.Context.Parameters.Item("targetdir") & "\web.config")if Not FileInfo.Exists Thenthrow New InstallException("没有找到配置文件")end If'实例化xml文档dim XmlDocument As New System.Xml.XmlDocumentxmldocument.load(fileinfo.fullname) '查找到appsettings中的节点dim Node As System.Xml.XmlNodedim FoundIt As Boolean = Falsefor Each Node In XmlDocument.Item("configuration").Item("appSettings")if Node.Name = "add" Thenif Node.Attributes.GetNamedItem("key").Value = "connString" Then'写入连接字符串node.attributes.getnameditem("value").value = String.Format("Persist Security Info=False;Data Source={0};Initial Catalog={1};User ID={2};Password={3};Packet Size=4096;Pooling=true;Max Pool Size=100;Min Pool Size=1", _me.context.parameters.item("server"), Me.Context.Parameters.Item("dbname"), Me.Context.Parameters.Item("user"), Me.Context.Parameters.Item("pwd"))foundit = Trueend Ifend Ifnext Nodeif Not FoundIt Thenthrow New InstallException("web.Config 文件没有包含connString连接字符串设置")end Ifxmldocument.save(fileinfo.fullname)catch ex As Exceptionthrow exend Tryend Subend Class

有点难度的就是那个process类,它调用了osql.exe程序,来执行sql语句osql -U,-P,,-d,-i。
web.config的修改代码是利用xml的语法实现。不是很难理解。
最后编译生成!如图:

安装界面:如图

哈哈,总算写完了,也不知道有没有写好
最后还是感谢李洪根老师和微软的讲师。结合他们的共同的经验,部署起来真的很简单。

分享到:
评论

相关推荐

    asp.net学习资料

    Asp.net与SQL一起打包部署安装 深入剖析ASP.NET的编译原理 asp.net技术资料

    Asp.net与SQLserver一起打包部署安装图文教程

    借鉴MSDN webcasts的Asp.net程序部署和李洪根的一篇文章,然后加上自己的亲身体会,把整个SQL和Asp.net(vb.net)一起打包的全过程写一下。

    SqlServer经典资料

    包括:Asp.net与SQL一起打包部署安装、Sql Server2005安装、SQL Server海量算法优化、sql_server字段类型说明、SQL面试题和sql语句大全

    Asp.net(C#)和附加SQL数据库(.mdb)文件的打包部署安装.docx

    免费面积分 C# SQL (.mdb) 打包部署安装

    asp.net知识库

    ASP.NET 2.0基于SQLSERVER 2005的aspnetdb.mdf部署 ASP.NET 2.0 Security FAQs Asp.net 2.0功能体验,细节之Web控件(一) 隐藏控件 Asp.net 2.0功能体验,总体设计思想 Asp.net 2.0 WebPart使用经验点滴 革新:.NET...

    NET平台下WEB应用程序的部署

    但是,这样制作的安装程序,只是将Web页和ASP.NET程序编译的DLL文件安装到目标机器的IIS目录,对于一般的应用程序是可以的(比如用Access数据库,可以一起打包到安装程序中);如果数据库是SQL SERVER,需要在部署...

    2.ASP.NET.2.0.高级编程(第4版) [1/7]

    ● 打包和部署ASP.NET应用程序的方法 ● 快速、逻辑地检索、更新和删除数据 本书读者对象 本书适合于有一些ASP.NET基础知识的学习者以及准备迁移到ASP.NET 2.0的有经验的程序员和开发人员。 目录回到顶部↑ 第1...

    ASP.NET2.0高级编程(第4版)1/6

    第29章 打包和部署ASP.NET  应用程序1037 29.1 部署各个部分1037 29.2 部署之前的准备1038 29.3 部署Web应用程序的方法1038 29.3.1 使用XCopy1039 29.3.2 使用VS Copy  Web Site选项1041 29.3.3 部署预编译的  ...

    asp.net面试题

    五、下列ASP.NET语句( )正确地创建了一个与SQL Server数据库的连接。 A.SqlConnection con1 = new Connection(“Data Source = localhost; Trusted_Connection =Yes; Initial Catalog = myDB”); B.SqlConnection ...

    Visual C#.NET项目实战开发从入门到精通 Part 4

     全书首先介绍SQL Server 2000基础知识、ADO.NET基础知识和ASP.NET 基础知识;然后讲解5个项目的开发实例,每个项目均遵循“需求分析→开发规划→数据库设计及实现→各模块界面设计及功能实现→打包部署”的...

    Visual C#.NET项目实战开发从入门到精通 Part 2

     全书首先介绍SQL Server 2000基础知识、ADO.NET基础知识和ASP.NET 基础知识;然后讲解5个项目的开发实例,每个项目均遵循“需求分析→开发规划→数据库设计及实现→各模块界面设计及功能实现→打包部署”的开发...

    Visual C#.NET项目实战开发从入门到精通 Part 3

     全书首先介绍SQL Server 2000基础知识、ADO.NET基础知识和ASP.NET 基础知识;然后讲解5个项目的开发实例,每个项目均遵循“需求分析→开发规划→数据库设计及实现→各模块界面设计及功能实现→打包部署”的...

    ASP.NET.4揭秘 卷2

    n101 打包Web应用 n102 使用Webconfig转换 n103 部署数据库 n104 一键式发布Web应用 n105 小结n第三部分 构建自定义控件 n第11章 构建自定义控件 n111 构建自定义控件概述 n1111 构建完全生成控件 n1112 构建组合...

    Net随手记录日记(补充)

    真正珍贵的东西,永远不需要华丽的语言 根据html模版生成静态页的源程序,Asp_net与SQL一起打包部署安装 等等..能和大家分享,也希望提下意见,个人感觉这样很乱,但习惯了!有没有更好的日记方法

    使用Microsoft Visual Studio实现安装部署

    通过使用Microsoft Visual Studio实现安装部署,最终打包成.exe安装程序(可以是winForm也可以是asp.net web应用程序),还讲解了如何自动安装SQL SERVER并且安装应用程序的数据库。 资源包括: 1、Microsoft Visual...

Global site tag (gtag.js) - Google Analytics