亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

部署安裝時寫入SQL SERVER和Web.config

2019-11-18 17:56:13
字體:
來源:轉載
供稿:網友

   在.NET平臺下,部署 Web 解決方案是比較方便的。我們可以利用Visual Studio.NET 2003添加一個WEB安裝項目,在部署的“文件系統編輯器”中添加項目的主輸出和內容文件,非常簡易地完成安裝程序的制作。

    但是,這樣制作的安裝程序,只是將Web頁和asp.net程序編譯的DLL文件安裝到目標機器的IIS目錄,對于一般的應用程序是可以的(比如用access數據庫,可以一起打包到安裝程序中);如果數據庫是SQL SERVER,需要在部署的時候一并安裝數據庫,安裝程序的制作就會復雜一些,需要我們自定義安裝程序類。在安裝程序類中執行SQL腳本并將連接字符串寫入Web.config。

l 安裝數據庫

微軟MSDN上介紹過在部署應用程序的時候建立數據庫。如:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vsintro7/html/vxwlkWalkthroughUsingCustomActionToCreateDatabaseDuringInstallation.asp

這種方法是創建一個安裝程序類,在安裝程序類中調用ADO.NET執行SQL 語句(SQL語句放在一個文本文件中)來創建數據庫。

 

但是,這種方法有一個問題,如果用SQL Server2000生成了所有建表、視圖、存儲過程的一個腳本文件,用ADO.NET來執行這個腳本文件,就會因為腳本中有許多“GO”語句而出現錯誤。當然,我們可以把“GO”替換成換行符,利用ADO.NET一條條執行SQL 語句。很顯然,這樣的效率比較低。

 

最好的辦法是調用osql執行腳本。(或者創建一個數據庫項目的cmd文件,而cmd文件建立數據庫的時候也是調用的osql)。

using System;
using System.Collections;
using System.ComponentModel;
using System.Configuration.Install;
using System.Data.SqlClient;
using System.IO;
using System.Reflection;
using System.Diagnostics;
using System.xml;

namespace DBCustomAction
{
/// <summary>
/// DBCustomAction 的摘要說明。
/// </summary>
[RunInstaller(true)]
public class DBCustomAction : System.Configuration.Install.Installer
{
/// <summary>
///@author:overred
/// </summary>
PRivate System.ComponentModel.Container components = null;

public DBCustomAction()
{
// 該調用是設計器所必需的。
InitializeComponent();

// TODO: 在 InitializeComponent 調用后添加任何初始化
}

/// <summary>
/// 清理所有正在使用的資源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}


#region 組件設計器生成的代碼
/// <summary>
/// 設計器支持所需的方法 - 不要使用代碼編輯器修改
/// 此方法的內容。
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion

#region custom setup

 

private void ExecuteSql(string connString,string DatabaseName,string sql)
{
SqlConnection conn=new SqlConnection(connString);
SqlCommand cmd=new SqlCommand(sql,conn);
conn.Open();
cmd.Connection.ChangeDatabase(DatabaseName);
try
{
cmd.ExecuteNonQuery();
}
catch(Exception e)
{
StreamWriter w=new StreamWriter(@"e://log.txt",true);
w.WriteLine("===in ExecuteSql======");
w.WriteLine(e.ToString());
w.Close();
}
finally
{
conn.Close();
}
}

public override void Install(IDictionary stateSaver)
{
createDB();
updateConfig();
}

private void createDB()
{
try
{
string connString=string.Format("server={0};user id={1};passWord={2}",this.Context.Parameters["server"],this.Context.Parameters["user"],this.Context.Parameters["pwd"]);

//根據輸入的數據庫名稱建立數據庫
ExecuteSql(connString,"master","create database "+this.Context.Parameters["dbname"]);

//調用osql執行腳本
string cmd=string.Format(" -S{0} -U{1} -P{2} -d{3} -i{4}db.sql",this.Context.Parameters["server"],this.Context.Parameters["user"],this.Context.Parameters["pwd"],this.Context.Parameters["dbname"],this.Context.Parameters["targetdir"]);
System.Diagnostics.Process sqlProcess=new Process();
sqlProcess.StartInfo.FileName="osql.exe";
sqlProcess.StartInfo.Arguments=cmd;
sqlProcess.StartInfo.WindowStyle=ProcessWindowStyle.Hidden;
sqlProcess.Start();
sqlProcess.WaitForExit();//等待執行
sqlProcess.Close();

//刪除腳本文件
System.IO.FileInfo sqlFileInfo=new FileInfo(string.Format("{0}db.sql",this.Context.Parameters["targetdir"]));
if(sqlFileInfo.Exists)
sqlFileInfo.Delete();
}
catch(Exception e)
{
StreamWriter w=new StreamWriter(@"e:/log.txt",true);
w.WriteLine("===in Install======");
w.WriteLine(e.ToString());
w.Close();
}
}

private void updateConfig()
{
try
{
//將連接字符串寫入Web.config
System.IO.FileInfo fileInfo=new FileInfo(string.Format("{0}web.config",this.Context.Parameters["targetdir"]));

if(!fileInfo.Exists)
throw new InstallException("can't find the web.config");

XmlDocument doc=new XmlDocument();
doc.Load(fileInfo.FullName);
bool foundIt=false;

string connString=string.Format("server={0};database={1};user id={2};password={3}",this.Context.Parameters["server"],this.Context.Parameters["dbname"],this.Context.Parameters["user"],this.Context.Parameters["pwd"]);

string enCS=SecurityHelper.EncryptDBConnectionString(connString);

XmlNode no=doc.SelectSingleNode("http://appSettings/add[@key='connString']");
if(no!=null)
{
no.Attributes.GetNamedItem("value").Value=enCS;
foundIt=true;
}

if(!foundIt)
throw new InstallException("can't find the connString setting ");
doc.Save(fileInfo.FullName);
}
catch(Exception e)
{
StreamWriter w=new StreamWriter(@"e:/log.txt",true);
w.WriteLine("===in updata connstring=tjtj=====");
w.WriteLine(e.ToString());
w.WriteLine(e.StackTrace);
w.Close();
}
}

#endregion
}
}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美午夜视频在线观看| 在线播放国产一区二区三区| 午夜精品一区二区三区视频免费看| 欧美福利视频在线观看| 精品亚洲一区二区三区四区五区| 91久久精品美女高潮| 高潮白浆女日韩av免费看| 欧美成aaa人片免费看| 国外成人免费在线播放| 国产69精品久久久久9999| 成人激情综合网| 国产精品人人做人人爽| 日韩美女视频在线观看| 亚洲在线免费视频| 亚洲级视频在线观看免费1级| 日本视频久久久| xxx一区二区| 成人福利免费观看| 欧美激情视频一区二区三区不卡| 日日骚久久av| 国产91精品久久久久久| 91精品国产91久久久久久不卡| 久久久久久亚洲精品| 亚洲欧美资源在线| 日韩精品免费在线观看| 国产成人精品久久亚洲高清不卡| 亚洲一区二区精品| 国产精品av在线播放| 亚洲国产精品免费| 欧美精品一区二区三区国产精品| 国产精品久久77777| 色综合色综合久久综合频道88| 亚洲一级一级97网| 日韩电影在线观看中文字幕| 免费97视频在线精品国自产拍| 亚洲精品一区中文| 国产成人亚洲精品| 黑人巨大精品欧美一区免费视频| 在线看福利67194| 中文字幕久久亚洲| 欧美成人午夜激情| 91精品国产91久久久久久不卡| 欧美日韩国产精品一区| 国产成人精品最新| 亚洲精品自产拍| 国产一区二区三区日韩欧美| 91精品视频在线| 91高清免费视频| 日韩**中文字幕毛片| 久久精品视频99| 久久久精品国产网站| 国产一区二区三区中文| 91久久久久久久久久久| 深夜福利日韩在线看| 亚洲美女免费精品视频在线观看| 美女视频黄免费的亚洲男人天堂| 在线播放国产一区中文字幕剧情欧美| 欧美午夜性色大片在线观看| 深夜成人在线观看| 久久久久国产精品免费网站| 亚洲free性xxxx护士hd| 91久久精品国产91久久| 色999日韩欧美国产| 欧美日韩裸体免费视频| 久久久久久久久久久人体| 欧美成人网在线| 亚洲视频在线观看免费| 久久久中文字幕| 亚洲欧洲免费视频| 国产91色在线免费| 91九色在线视频| 91久久久久久久一区二区| 亚洲国内高清视频| 热re91久久精品国99热蜜臀| 精品综合久久久久久97| 国产精品亚洲欧美导航| 亚洲国产精品成人一区二区| 国产精品免费视频久久久| 亚洲一级片在线看| 国产精品极品在线| 亚洲精品综合精品自拍| 操人视频在线观看欧美| 久久久精品一区二区| 久久免费国产精品1| 成人国内精品久久久久一区| 亚洲2020天天堂在线观看| 欧美一级电影免费在线观看| 精品国产一区二区三区久久狼5月| 欧美精品午夜视频| 久久久成人的性感天堂| 亚洲欧美中文另类| 欧美成人三级视频网站| 国产一区二区视频在线观看| 91性高湖久久久久久久久_久久99| 成人黄色在线免费| 成人日韩在线电影| 国产精品久久久久久久久久尿| 成人h片在线播放免费网站| 亚洲欧洲美洲在线综合| 亚洲视频在线免费观看| 欧美中文在线视频| 国产一区欧美二区三区| 国产精品视频xxxx| 国产成人精品久久二区二区| 欧美激情国内偷拍| 国产亚洲a∨片在线观看| 久久久免费高清电视剧观看| 日韩av电影免费观看高清| 日韩欧美a级成人黄色| 国产成人精品免费久久久久| 色多多国产成人永久免费网站| 日韩欧美国产骚| 久久久久久成人精品| 日韩美女免费观看| 欧美日韩在线另类| 亚洲国产中文字幕在线观看| 亚洲性视频网站| 中文字幕欧美日韩在线| 日韩国产欧美精品一区二区三区| 91香蕉嫩草神马影院在线观看| 欧美日韩中文在线| 在线性视频日韩欧美| 亚洲欧美日韩精品久久亚洲区| 国产精品久久久久久一区二区| 国产精品免费视频xxxx| 色狠狠av一区二区三区香蕉蜜桃| 91免费欧美精品| 久久99国产精品久久久久久久久| 亚洲女人被黑人巨大进入al| 美乳少妇欧美精品| 91日本在线观看| 国产视频自拍一区| 久久伊人91精品综合网站| 久久91亚洲人成电影网站| 亚洲精品国产欧美| 国产a级全部精品| 精品国产91久久久久久| 黑人巨大精品欧美一区二区| 久久97精品久久久久久久不卡| 久久精品这里热有精品| 国产欧美日韩中文字幕在线| 欧美激情国产精品| 国产精品丝袜一区二区三区| 日本国产一区二区三区| 国内外成人免费激情在线视频网站| 亚洲国产精品一区二区三区| 欧美国产日韩一区| 亚洲精品网站在线播放gif| 日韩av免费在线| 久久激情视频免费观看| 亚洲欧洲av一区二区| 日韩毛片在线观看| 亚洲人成在线一二| 国产精品都在这里| 亚洲精品资源美女情侣酒店| 欧美风情在线观看| 91精品国产综合久久香蕉922| 亚洲男人的天堂网站| 中文字幕免费精品一区| 激情久久av一区av二区av三区| 国产精品视频xxxx| 亚洲第一区在线观看| 亚洲四色影视在线观看| 亚洲**2019国产|