安装程序类(VB.net,新建数据库,修改webconfig文件)

 把asp.net2.0网站打包做成安装程序时,有时需要安装数据库(适当修改webconfig文件)
以下是用到的安装程序类。。。。
(当然还需要其他不少东西,这里就不写了。。。)
详细过程见:http://blog.csdn.net/sunearlier/archive/2006/06/25/830805.aspx

None.gif Imports  System.ComponentModel
None.gif
None.gif
Imports  System.Configuration.Install
None.gif
None.gif
Imports  System.IO
None.gif
None.gif
Imports  System.Reflection
None.gif
None.gif
None.gif
ExpandedBlockStart.gifContractedBlock.gif
< RunInstaller( True ) >   Public   Class DBCustomAction Class DBCustomAction
InBlock.gif
InBlock.gif    
Inherits System.Configuration.Install.Installer
InBlock.gif
InBlock.gif
InBlock.gif
ContractedSubBlock.gifExpandedSubBlockStart.gif
组件设计器生成的代码#Region "组件设计器生成的代码 "
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
Public Sub New()Sub New()
InBlock.gif
InBlock.gif        
MyBase.New()
InBlock.gif
InBlock.gif        
'该调用是组件设计器所必需的
InBlock.gif

InBlock.gif        InitializeComponent()
InBlock.gif
InBlock.gif        
'在 InitializeComponent() 调用之后添加任何初始化
InBlock.gif

ExpandedSubBlockEnd.gif    
End Sub

InBlock.gif
InBlock.gif    
' Installer 重写 dispose 以清理组件列表。
InBlock.gif

ExpandedSubBlockStart.gifContractedSubBlock.gif    
Protected Overloads Overrides Sub Dispose()Sub Dispose(ByVal disposing As Boolean)
InBlock.gif
InBlock.gif        
If disposing Then
InBlock.gif
InBlock.gif            
If Not (components Is NothingThen
InBlock.gif
InBlock.gif                components.Dispose()
InBlock.gif
InBlock.gif            
End If
InBlock.gif
InBlock.gif        
End If
InBlock.gif
InBlock.gif        
MyBase.Dispose(disposing)
InBlock.gif
ExpandedSubBlockEnd.gif    
End Sub

InBlock.gif
InBlock.gif    
Private components As System.ComponentModel.IContainer
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()Sub InitializeComponent()
InBlock.gif
ExpandedSubBlockEnd.gif    
End Sub

InBlock.gif
ExpandedSubBlockEnd.gif
#End Region

InBlock.gif
InBlock.gif    
'执行SQL 语句
InBlock.gif

ExpandedSubBlockStart.gifContractedSubBlock.gif    
Private Sub ExecuteSql()Sub ExecuteSql(ByVal conn As StringByVal DatabaseName As StringByVal Sql As String)
InBlock.gif
InBlock.gif        
Dim mySqlConnection As New SqlClient.SqlConnection(conn)
InBlock.gif
InBlock.gif        
Dim Command As New SqlClient.SqlCommand(Sql, mySqlConnection)
InBlock.gif
InBlock.gif        
Command.Connection.Open()
InBlock.gif
InBlock.gif        
Command.Connection.ChangeDatabase(DatabaseName)
InBlock.gif
InBlock.gif        
Try
InBlock.gif
InBlock.gif            
Command.ExecuteNonQuery()
InBlock.gif
InBlock.gif        
Finally
InBlock.gif
InBlock.gif            
'Close Connection
InBlock.gif

InBlock.gif            
Command.Connection.Close()
InBlock.gif
InBlock.gif        
End Try
InBlock.gif
ExpandedSubBlockEnd.gif    
End Sub

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
Public Overrides Sub Install()Sub Install(ByVal stateSaver As System.Collections.IDictionary)
InBlock.gif        
MyBase.Install(stateSaver)
InBlock.gif
InBlock.gif        
' ------------------------建立数据库-------------------------------------------------
InBlock.gif

InBlock.gif        
Try
InBlock.gif
InBlock.gif            
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"))
InBlock.gif
InBlock.gif            
'根据输入的数据库名称建立数据库
InBlock.gif

InBlock.gif            ExecuteSql(connStr, 
"master""CREATE DATABASE " + Me.Context.Parameters.Item("dbname"))
InBlock.gif
InBlock.gif            
'调用osql执行脚本
InBlock.gif

InBlock.gif            
Dim sqlProcess As New System.Diagnostics.Process
InBlock.gif
InBlock.gif            sqlProcess.StartInfo.FileName 
= "osql.exe "
InBlock.gif
InBlock.gif            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"))
InBlock.gif
InBlock.gif            sqlProcess.StartInfo.WindowStyle 
= ProcessWindowStyle.Hidden
InBlock.gif
InBlock.gif            sqlProcess.Start()
InBlock.gif
InBlock.gif            sqlProcess.WaitForExit()  
'等待执行
InBlock.gif

InBlock.gif            sqlProcess.Close()
InBlock.gif
InBlock.gif            
'删除脚本文件
InBlock.gif

InBlock.gif            
Dim sqlFileInfo As New System.IO.FileInfo(String.Format("{0}db.sql"Me.Context.Parameters.Item("targetdir")))
InBlock.gif
InBlock.gif            
If sqlFileInfo.Exists Then
InBlock.gif
InBlock.gif                sqlFileInfo.Delete()
InBlock.gif
InBlock.gif            
End If
InBlock.gif
InBlock.gif        
Catch ex As Exception
InBlock.gif
InBlock.gif            
Throw ex
InBlock.gif
InBlock.gif        
End Try
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif        
' ---------------------将连接字符串写入Web.config-----------------------------------
InBlock.gif

InBlock.gif        
Try
InBlock.gif
InBlock.gif            
Dim FileInfo As System.IO.FileInfo = New System.IO.FileInfo(Me.Context.Parameters.Item("targetdir"& "\web.config")
InBlock.gif
InBlock.gif            
If Not FileInfo.Exists Then
InBlock.gif
InBlock.gif                
Throw New InstallException("没有找到配置文件")
InBlock.gif
InBlock.gif            
End If
InBlock.gif
InBlock.gif            
'实例化XML文档
InBlock.gif

InBlock.gif            
Dim XmlDocument As New System.Xml.XmlDocument
InBlock.gif
InBlock.gif            XmlDocument.Load(FileInfo.FullName)
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif            
'查找到appSettings中的节点
InBlock.gif

InBlock.gif            
Dim Node As System.Xml.XmlNode
InBlock.gif
InBlock.gif            
Dim FoundIt As Boolean = False
InBlock.gif
InBlock.gif            
For Each Node In XmlDocument.Item("configuration").Item("connectionStrings")
InBlock.gif
InBlock.gif                
If Node.Name = "add" Then
InBlock.gif
InBlock.gif                    
If Node.Attributes.GetNamedItem("name").Value = "richs_helpConnectionString" Then
InBlock.gif
InBlock.gif                        
'写入连接字符串
InBlock.gif

InBlock.gif                        Node.Attributes.GetNamedItem(
"connectionString").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", _
InBlock.gif 
Me.Context.Parameters.Item("server"), Me.Context.Parameters.Item("dbname"), Me.Context.Parameters.Item("user"), Me.Context.Parameters.Item("pwd"))
InBlock.gif
InBlock.gif                        FoundIt 
= True
InBlock.gif
InBlock.gif                    
End If
InBlock.gif
InBlock.gif                
End If
InBlock.gif
InBlock.gif            
Next Node
InBlock.gif
InBlock.gif            
If Not FoundIt Then
InBlock.gif
InBlock.gif                
Throw New InstallException("web.Config 文件没有包含connString连接字符串设置")
InBlock.gif
InBlock.gif            
End If
InBlock.gif
InBlock.gif            XmlDocument.Save(FileInfo.FullName)
InBlock.gif
InBlock.gif        
Catch ex As Exception
InBlock.gif
InBlock.gif            
Throw ex
InBlock.gif
InBlock.gif        
End Try
InBlock.gif
ExpandedSubBlockEnd.gif    
End Sub

InBlock.gif
ExpandedBlockEnd.gif
End Class

None.gif
None.gif

转载于:https://www.cnblogs.com/yangboshan/archive/2007/07/17/820890.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值