.NET平台下WEB应用程序的部署(安装数据库和自动配置)
来源:互联网 发布:物流仿真软件 编辑:程序博客网 时间:2024/05/16 08:54
在.NET平台下,部署 Web 解决方案是比较方便的。我们可以利用Visual Studio.NET 2003添加一个WEB安装项目,在部署的“文件系统编辑器”中添加项目的主输出和内容文件,非常简易地完成安装程序的制作。
但是,这样制作的安装程序,只是将Web页和ASP.NET程序编译的DLL文件安装到目标机器的IIS目录,对于一般的应用程序是可以的(比如用Access数据库,可以一起打包到安装程序中);如果数据库是SQL SERVER,需要在部署的时候一并安装数据库,安装程序的制作就会复杂一些,需要我们自定义安装程序类。在安装程序类中执行SQL脚本并将连接字符串写入Web.config。
l 安装数据库
微软MSDN上介绍过在部署应用程序的时候建立数据库。如:
这种方法是创建一个安装程序类,在安装程序类中调用ADO.NET执行SQL 语句(SQL语句放在一个文本文件中)来创建数据库。
但是,这种方法有一个问题,如果用SQL Server2000生成了所有建表、视图、存储过程的一个脚本文件,用ADO.NET来执行这个脚本文件,就会因为脚本中有许多“GO”语句而出现错误。当然,我们可以把“GO”替换成换行符,利用ADO.NET一条条执行SQL 语句。很显然,这样的效率比较低。
最好的办法是调用osql执行脚本。(或者创建一个数据库项目的cmd文件,而cmd文件建立数据库的时候也是调用的osql)。
首先,我们新建一个ASP.NET Web应用程序,http://localhost/VbNetTest,并打开VbNetTest 项目
创建部署项目Imports System.ComponentModel
Imports System.Configuration.Install
Imports System.IO
Imports System.Reflection
<RunInstaller(True)> Public Class DBCustomAction
Inherits System.Configuration.Install.Installer
#Region "组件设计器生成的代码 "
Public Sub New()
MyBase.New()
'该调用是组件设计器所必需的
InitializeComponent()
'在 InitializeComponent() 调用之后添加任何初始化
End Sub
' Installer 重写 dispose 以清理组件列表。
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
Private components As System.ComponentModel.IContainer
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
#End Region
'执行SQL 语句
Private 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)
Try
Command.ExecuteNonQuery()
Finally
'Close Connection
Command.Connection.Close()
End Try
End Sub
MyBase.Install(stateSaver)
' ------------------------建立数据库-------------------------------------------------
Try
Dim 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.Process
sqlProcess.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.Hidden
sqlProcess.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 Then
sqlFileInfo.Delete()
End If
Catch ex As Exception
Throw ex
End Try
' ---------------------将连接字符串写入Web.config-----------------------------------
Try
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("没有找到配置文件")
End If
'实例化XML文档
Dim XmlDocument As New System.Xml.XmlDocument
XmlDocument.Load(FileInfo.FullName)
'查找到appSettings中的节点
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 = "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 = True
End If
End If
Next Node
If Not FoundIt Then
Throw New InstallException("web.Config 文件没有包含connString连接字符串设置")
End If
XmlDocument.Save(FileInfo.FullName)
Catch ex As Exception
Throw ex
End Try
End Sub
End Class
SQL Server 2005安装及界面截图,新增功能. |
在VB6和VB.net中设置桌面墙纸 |
SQL Server 存储过程的分页方案比拼 |
SQL Server中发送邮件的新方式 |
.NET 平台下的OutLook 开发技术 |
|
| |||||
从去年起我们的服务器偶尔会抛出OutOfMemoryException,即没有足够的内存继续执行程序时引发的异常。服务器内存加到4G也仍会出现该问题。软件是UO的第三方模拟器。事实上,从任务管理器里,可以看到软件占用了约1G左右的内存,当然因为GC的缘故,实际软件使用的内存在600M左右。为避免超过1G多内存的占用,并抛出Outofmemory异常,设定在内存占用到一定值时进行强制GC,一下子可以减去几百兆,但终究是没彻底解决问题。
|
//////////////////////////////////////
| ||||||
目录 l 摘要 摘要 1.一般安装程序的制作 Visual studio.net 提供了很强大并且非常便捷的安装程序制作功能。一般的安装程序制作可以参考如下步骤: 2.在安装程序中部署SQL Server数据库 通过上面的介绍,一般应用程序的制作非常容易,基本上就是把您的应用程序拖入该安装程序的过程。如果您的应用程序的运行需要数据库的支持(如SQL Server),问题就变得比较复杂一点。 2.1 通过调用osql来执行数据库脚本文件 从上面的例子我们已经知道了如何传递值,那么我们只要在项目文件中程序段中执行osql即可。 2.2 通过把脚本文件作为资源文件载入 从前面的讨论中我们可以看到,直接使用ADO.net执行时比较麻烦,需要一句句执行,如果使用脚本,数据库中生成的脚本中有”GO”命令,在ADO.net中执行时会出问题。因此,根据对数据库安装脚本的分析,我们可以采用如下替代方案。 需要注意的是:不要在你的脚本中有GO命名,其他命令都可以直接执行。 2.3 通过sp_attach_db来创建数据库 通过上面的讨论我们已经很清楚如何安装数据库了。在安装数据库的过程中,我们除了可以通过数据库脚本来创建数据库之外,我们也可以通过SQL Server的系统存储过程sp_attach_db来附加数据库。 对于问题1我们可以借鉴安装数据的第一种方法,即把.mdf和.ldf通过文件系统安装到目标机上,然后通过 最后通过调用sp_attach_db 加上相应的参数即可完成。 总结 本文通过介绍了三种不同的方法来在安装程序是如何安装数据库,同时也分析了不同的方法的优劣之处,用户可以根据自己的实际需要来选择安装方法。同时,通过该方法的提出,用户也可以完成在安装程序是对数据库的配置工作。
相关文章
|
|
- .NET平台下WEB应用程序的部署(安装数据库和自动配置)
- .NET平台下WEB应用程序的部署(安装数据库和自动配置)
- .NET平台下WEB应用程序的部署(安装数据库和自动配置)
- .NET平台下WEB应用程序的部署(安装数据库和自动配置)
- .NET平台下WEB应用程序的部署(安装数据库和自动配置)
- .NET平台下WEB应用程序的部署(安装数据库和自动配置)
- .NET平台下WEB应用程序的部署(安装数据库和自动配置)
- .NET平台下WEB应用程序的部署(安装数据库和自动配置)
- .NET平台下WEB应用程序的部署(安装数据库和自动配置)
- .NET平台下WEB应用程序的部署(安装数据库和自动配置)
- .NET平台下WEB应用程序的部署(安装数据库和自动配置)
- .NET平台下WEB应用程序的部署(安装数据库和自动配置)
- .NET平台下WEB应用程序的部署(安装数据库和自动配置)
- .NET平台下WEB应用程序的部署(安装数据库和自动配置)
- .NET平台下WEB应用程序的部署(安装数据库和自动配置)
- .NET平台下WEB应用程序的部署(安装数据库和自动配置)
- .NET平台下WEB应用程序的部署(安装数据库和自动配置)
- NET平台下WEB应用程序的部署(安装数据库和自动配置)
- in!memory.600
- Start deltacat Audio Mix Filter
- 全面优化电脑系统,让你的PC健步如飞
- AVI文件格式
- Struts 入门好文章,通俗易懂(转载)
- .NET平台下WEB应用程序的部署(安装数据库和自动配置)
- 分析器错误信息: 未能加载类型
- C#写手机软件
- ASP.NET 2.0中的登陆控件简介(原作)
- linux文件系统基础
- Symbian游戏编程入门 (二)开发环境入门
- 对于多台电脑同时操作数据的问题
- 利用Flashback Query 恢复误操作的数据ZZ
- 影音传送带 Net Transport 1.93.276 简体版