程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 用VS2005制造WEB安裝程序

用VS2005制造WEB安裝程序

編輯:關於SqlServer

  環境:Windows2003 + vs2005+sqlserver2000

  1、打開VS2005,打開工程或網站(這裡的示例是一個已發布的網站系統). 

  2、從“解決方案資源管理器中”右鍵點擊解決方案名稱,選擇“添加”――“新建項目”,從打開的“添加新項目”窗口,在“項目類型”欄選擇“其他項目類型”――“安裝部署”,在模板欄,選“web項目”,在下面的名稱和地址欄輸入名稱和地址。

  3、生成sql文件(只生成創建數據表的SQL語句)

  打開SQLSER企業管理器,登錄,選擇數據庫――選擇要生成SQL語句的表,右鍵――所有任務――生成SQL腳本。在打開的窗口中點擊“確定”,保存SQL腳本(注意:sql文件一定要用小寫的英文名稱命名,保存完成後把SQL文件另存為TXT文件,並把裡面的所有的“GO”去掉。)

  4、創建安裝程序類庫和安裝程序類

  從“解決方案資源管理器中”右鍵點擊解決方案名稱,選擇“添加”――“新建項目”,從打開的“添加新項目”窗口,在“項目類型”欄選擇“VISAL BASIC”,在模板欄,選“類庫”,在下面的名稱和地址欄輸入名稱和地址。點擊“確定”。

  5、從“解決方案資源管理器中”點擊剛生成的類庫,刪除自動生成的class1.vb類,右鍵點擊類庫名稱――添加――新建項,選擇“安裝程序類”,輸入名稱,點擊“添加”按鈕。

  6、打開剛生成的安裝程序類,在dbtest.vb中,添加如下代碼

Imports System.ComponentModel
Imports System.Configuration.Install
Imports System.IO
Imports System.Reflection
  
Public Class dbtest
  
  '聲明私有變量
  Private sqlConnection1 As SqlClIEnt.SqlConnection
  Private ServerName As String
  Private AdminName As String
  Private AdminPwd As String
  
  Public Sub New()
    MyBase.New()
  
    '組件設計器需要此調用。
    InitializeComponent()
  
    '調用 InitializeComponent 後添加初始化代碼
  
  End Sub
  
  Private Function GetSql(ByVal Name As String) As String
    Try
  
      ' 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()
  
    Catch ex As Exception
      MsgBox("讀取SQL文件出錯: " & ex.Message)
      Throw ex
    End Try
  End Function
  
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)
    Try
      Command.ExecuteNonQuery()
    Finally
      ' Finally, blocks are a great way to ensure that the connection
      ' is always closed.
      Command.Connection.Close()
    End Try
  End Sub



  Protected Sub AddDBTable()
    Try
      ' 生成數據庫
      ExecuteSql("master", "CREATE DATABASE water")
  
      ' 根據SQL語句生成表
      ExecuteSql("water", GetSql("watertable.txt"))
  
    Catch ex As Exception
      ' Reports any errors and abort.
      MsgBox("生成數據庫錯誤: " & ex.Message)
      Throw ex
    End Try
  End Sub
  Private Sub WriteWebConfig()
    '修改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 = "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"))
            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
  ''' <summary>
  ''' 安裝程序入口
  ''' </summary>
  ''' <param name="stateSaver"></param>
  ''' <remarks></remarks>
  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"
    'sqlConnection1.Open()
  
    '添加數據庫中的表
    AddDBTable()
  
    '修改web.config文件中的數據庫連接串
    WriteWebConfig()
  
  End Sub
End Class



  6、添加SQL腳本文件到類庫中。

  右鍵點擊類庫名稱――添加――現有項,選擇watertable.txt文件。點擊“確定”。

  右鍵選擇剛剛添加的watertable.txt文件,選“屬性”,把“生成操作”項內容修改為“嵌入的資源”。

  7、生成類庫的DLL文件。

  8、右鍵安裝項目名稱――“視圖”――“文件系統”,在打開的“文件系統窗口”,右鍵“WEB應用程序文件夾”――“添加”――項目輸出,

  從“項目”下拉列表框中,選擇類庫為“主輸出”,

  重復上步操作,選擇網站為“內容文件”

  9、添加安裝時用戶要輸入的數據庫服務器名稱、用戶名、密碼的用戶界面。

  右鍵安裝項目名稱――視圖――用戶界面,在打開的安裝界面中,右鍵“啟動”,選擇“添加對話框”,在彈出的窗口中,選擇“文本框A”。

  右鍵文本框A,選擇“上移”,重復執行,直到在“安裝地址”上。

  右鍵“文本框A”――屬性,進行如下修改。

  Edit1lable1    數據庫服務器:

Edit1property   DBSERVERNAME
Edit1visible    true

  Edit2lable1    用戶名:

Edit2property   USERNAME
Edit2visible    true

  Edit3lable1    用戶名:

Edit3property   PASSWord
Edit3visible    true
  
Edit4visible    false

  10、添加自定義操作

  在“解決方案資源管理器中”,右鍵安裝項目名稱――“視圖”――“自定義操作”,在打開的自定義操作窗口,右鍵“安裝”――“添加自定義操作”,在打開的“選擇項目的項”,雙擊“WEB應用程序文件夾”――主輸出來自clslib(活動)。



  右鍵“主輸出來自clslib(活動)”――“屬性窗口”,修改屬性

  CustoMactiondata 為

/server=[DBSERVERNAME] /user=[USERNAME] /pwd=[PASSWord] /targetdir="[TARGETDIR]"

  注意:每個變量之間一定要有一個空格做間隔,如果想得到安裝文件在安裝機器中的路徑,一定要添加 targetdir 變量。

  11、添加系統必備

  右鍵安裝項目名稱――屬性――選擇系統必備

  在打開的系統必備窗口,選擇 “.Net framework 2.0”――選擇“從與我的應用程序相同路徑下載系統必備”,點擊“確定”

  12、生成安裝項目。

  從菜單“生成”――“生成websetup”,生成安裝項目。

  13、安裝項目界面

  從“解決方案資源管理器”――安裝項目,右鍵安裝項目名稱――安裝。

  生成的數據庫

  生成的網站

  修改後的web.config

  寫在後面的話:

  做完程序後,發現用SQLSER的恢復數據庫方法比用SQL文件要好的多,也方便的多,就做了一個過程,代碼如下:

Private sub RestoreDB()
Dim strdir as string
Dim strSql as string

  ‘得到安裝程序路徑

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)
  
End sub

  注意:data.bak是sqlserver備份數據庫名,也可以沒有後綴,如果沒有後綴,在程序中也不要有,還有備份文件要和發布的網站文件放在一起,water_data、water_log是邏輯數據名,在sqlserver數據庫中的備份恢復中都能查看到的,TO 後面是把*.mdf和*.ldf文件復制到一個路徑下,直接寫死就可以了。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved