借鉴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类

1

ImportsSystem.ComponentModel23importsSystem.Configuration.Install45importsSystem.IO67importsSystem.Reflection891011

PublicClass DBCustomActionClassDBCustomAction1213inheritsSystem.Configuration.Install.Installer14151617

组件设计器生成的代码#region"组件设计器生成的代码 "1819

publicSub New()SubNew()2021mybase.new()2223'该调用是组件设计器所必需的2425initializecomponent()2627'在 InitializeComponent() 调用之后添加任何初始化2829end Sub3031'Installer 重写 dispose 以清理组件列表。3233

protectedOverloadsOverridesSub Dispose()SubDispose(ByValdisposingAsBoolean)3435ifdisposingThen3637ifNot(componentsIsNothing)Then3839components.dispose()4041endIf4243endIf4445mybase.dispose(disposing)4647end Sub4849privatecomponentsAsSystem.ComponentModel.IContainer5051

PrivateSub InitializeComponent()SubInitializeComponent()5253end Sub5455#end Region5657'执行sql 语句5859

privateSub ExecuteSql()SubExecuteSql(ByValconnAsString,ByValDatabaseNameAsString,ByValSqlAsString)6061dimmySqlConnectionAsNewSqlClient.SqlConnection(conn)6263dimCommandAsNewSqlClient.SqlCommand(Sql, mySqlConnection)6465command.connection.open()6667command.connection.changedatabase(databasename)6869try7071command.executenonquery()7273finally7475'close Connection7677command.connection.close()7879endTry8081end Sub8283

publicOverridesSub Install()SubInstall(ByValstateSaverAsSystem.Collections.IDictionary)84MyBase.Install(stateSaver)8586'------------------------建立数据库-------------------------------------------------8788try8990dimconnStrAsString=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"))9192'根据输入的数据库名称建立数据库9394executesql(connstr,"master","CREATE DATABASE"+Me.Context.Parameters.Item("dbname"))9596'调用osql执行脚本9798dimsqlProcessAsNewSystem.Diagnostics.Process99100sqlprocess.startinfo.filename="osql.exe"101102sqlprocess.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"))103104sqlprocess.startinfo.windowstyle=ProcessWindowStyle.Hidden105106sqlprocess.start()107108sqlprocess.waitforexit()'等待执行109110sqlprocess.close()111112'删除脚本文件113114dimsqlFileInfoAsNewSystem.IO.FileInfo(String.Format("{0}db.sql",Me.Context.Parameters.Item("targetdir")))115116ifsqlFileInfo.ExistsThen117118sqlfileinfo.delete()119120endIf121122catchexAsException123124throwex125126endTry127128129130'---------------------将连接字符串写入Web.config-----------------------------------131132try133134dimFileInfoAsSystem.IO.FileInfo=NewSystem.IO.FileInfo(Me.Context.Parameters.Item("targetdir")&"\web.config")135136ifNotFileInfo.ExistsThen137138throwNewInstallException("没有找到配置文件")139140endIf141142'实例化xml文档143144dimXmlDocumentAsNewSystem.Xml.XmlDocument145146xmldocument.load(fileinfo.fullname)147148149150'查找到appsettings中的节点151152dimNodeAsSystem.Xml.XmlNode153154dimFoundItAsBoolean=False155156forEachNodeInXmlDocument.Item("configuration").Item("appSettings")157158ifNode.Name="add"Then159160ifNode.Attributes.GetNamedItem("key").Value="connString"Then161162'写入连接字符串163164node.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", _165166me.context.parameters.item("server"),Me.Context.Parameters.Item("dbname"),Me.Context.Parameters.Item("user"),Me.Context.Parameters.Item("pwd"))167168foundit=True169170endIf171172endIf173174nextNode175176ifNotFoundItThen177178throwNewInstallException("web.Config 文件没有包含connString连接字符串设置")179180endIf181182xmldocument.save(fileinfo.fullname)183184catchexAsException185186throwex187188endTry189190end Sub191192end Class193194

有点难度的就是那个Process类,它调用了osql.exe程序,来执行sql语句osql -U,-P,,-d,-i。

web.config的修改代码是利用xml的语法实现。不是很难理解。

最后编译生成!如图:

安装界面:如图

哈哈,总算写完了,也不知道有没有写好

最后还是感谢李洪根老师和微软的讲师。结合他们的共同的经验,部署起来真的很简单。

asp.net mysql打包_Asp.net与SQL一起打包部署安装相关推荐

  1. asp连接mysql视频_asp连接mysql数据库详细实现代码

    ASP 的 asp连接mysql数据库详细实现代码 想要asp能连接mysql数据库需要安装MySQL ODBC 3.51 驱动 我们先看下面这段代码 代码如下: set conn = server. ...

  2. asp创建mysql表_asp创建数据库表

    一起谈.NET技术,不附加数据库 ASP.NET调用.sql文件 笔者好久没有写随笔了,这次是遇到提出这样的问题"不用附加数据库,什么修改web.config什么的那么麻烦,而是直接运行一个 ...

  3. asp 更新 mysql数据库_ASP如何使用MYSQL数据库

    [IT168 服务器学院]MYSQL数据库以它短小.方便.速度快.免费等优点成为很多网站目前首选数据库,但一般都是用PHP+MYSQL相结合来开发各种动态页面,其实ASP也可以使用MYSQL数据库开发 ...

  4. asp创建mysql表_asp创建数据库

    Azure 上部署 ASP.NET Core Web App 前言 在云计算大行其道的时代,当你要部署一个网站时第一选择肯定是各式各样的云端服务.那么究竟使用什么样的云端服务才能够以最快捷的方式部署一 ...

  5. asp 更新 mysql数据库_asp update mysql数据库

    数据库必知词汇:数据操纵语言DML |名词定义|数据操纵语言(Data Manipulation Language, DML)是SQL语言的四大主要分类之一,用户通过它可以实现对数据库数据的基本操作. ...

  6. asp连接mysql字符串_asp连接数据库字符串

    asp连接access和sqlserver的方法 Dim Conn,ConnStr dim Sql_Server,Sql_User,Sql_Pass,Sql_Data Sql_Server = &qu ...

  7. asp.net mysql 查询_asp.net 多条件查询数据库

    ASP.NET3.5--第一章ASP.NET介绍 第一章  ASP.NET介绍 当微软创建.NET,它不仅仅梦想未来--它还担忧当代web开发技术的困惑和限制.在你开始ASP.NET3.5以前,本书帮 ...

  8. asp.net mysql 事务_ASP.NET里的事务处理(ado.net 数据库应用)

    事务是一组组合成逻辑工作单元的数据库操作,虽然系统中可能会出错,但事务将控制和维护每个数据库的一致性和完整性.如果在事务过程中没有遇到错误,事务中的所有修改都将永久成为数据库的一部分.如果遇到错误,则 ...

  9. asp.net mysql 事务_ASP.NET Core 1.0 使用 Dapper 操作 MySql(包含事务)

    操作 MySql 数据库使用MySql.Data程序包(MySql 开发,其他第三方可能会有些问题). project.json 代码: { "version": "1. ...

最新文章

  1. 正则表达式的基本入门
  2. iptables相关管理命令
  3. centos 系统初始配置优化
  4. java循环object_java怎么循环获取object的属性名和值?object内容如下
  5. 在main函数前后执行的函数之 C语言
  6. Android加上base的作用,android-notifyDataSetChanged在BaseAdapter上不起作用
  7. KM算法 详解+模板
  8. 怎样开图纸便宜_一步一步教你如何看懂工程图纸,值得收藏!
  9. 脚本变量中包含空格的解决办法
  10. 人人商城小程序服务器根目录,微擎通用-人人商城v3小程序安装步骤小程序配置说明...
  11. Android 实例子源代码文件下载地址380个合集
  12. JSONArray.fromObject(); 引入问题
  13. 网页服务器阿帕奇怎么启动服务,阿帕奇服务器使用教程
  14. 独立游戏如何对接STEAM SDK
  15. imx6ull-arm开发板和电脑网线直连通信
  16. 文件服务器大量传送减负需要开启,网卡参数中的eee、流量控制、巨型帧、大量传输减负、中断节流率等名词都是什么意思doc.doc...
  17. 云知声终止IPO:持续亏损7.9亿、毛利率低于行业均值、市场份额被指“造假”
  18. android 消息提示机制
  19. linux中who的功能,linux w及who命令
  20. 【2022新版】Java 终极学习路线(文末高清大图)-共计9大模块/6大框架/13个中间件

热门文章

  1. 腾讯AI Lab发布「电竞虚拟人」,视频版本一次看!
  2. [ffmpeg] 解码API
  3. 移动直播连麦实现思路:整体篇
  4. 从基础货币到资金到债券,固收市场的分层都在这了
  5. zookeeper安装包下载地址
  6. 今日的你,上班了吗?
  7. 大剑无锋之内存泄漏是什么?【面试推荐】
  8. 缓存、内存、硬盘、虚拟硬盘
  9. leetcode 740. Delete and Earn | 740. 删除并获得点数(暴力递归->傻缓存->DP)
  10. leetcode 1504. Count Submatrices With All Ones | 1504. 统计全 1 子矩形(单调栈)