在.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)。 using System; namespace DBCustomAction public DBCustomAction() // TODO: 在 InitializeComponent 调用后添加任何初始化 /// <summary> #region custom setup private void ExecuteSql(string connString,string DatabaseName,string sql) public override void Install(IDictionary stateSaver) private void createDB() //根据输入的数据库名称建立数据库 //调用osql执行脚本 //删除脚本文件 private void updateConfig() if(!fileInfo.Exists) XmlDocument doc=new XmlDocument(); 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(“//appSettings/add[@key=connString]”); if(!foundIt) #endregion
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;
{
/// <summary>
/// DBCustomAction 的摘要说明。
/// </summary>
[RunInstaller(true)]
public class DBCustomAction : System.Configuration.Install.Installer
{
/// <summary>
///@author:overred
/// </summary>
private System.ComponentModel.Container components = null;
{
// 该调用是设计器所必需的。
InitializeComponent();
}
/// 清理所有正在使用的资源。
/// </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
{
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();
}
}
{
createDB();
updateConfig();
}
{
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”]);
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();
}
}
{
try
{
//将连接字符串写入Web.config
System.IO.FileInfo fileInfo=new FileInfo(string.Format(“{0}web.config”,this.Context.Parameters[“targetdir”]));
throw new InstallException(“cant find the web.config”);
doc.Load(fileInfo.FullName);
bool foundIt=false;
if(no!=null)
{
no.Attributes.GetNamedItem(“value”).Value=enCS;
foundIt=true;
}
throw new InstallException(“cant 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();
}
}
}
}
部署安装时写入sql server和web.config_asp.net技巧
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 部署安装时写入sql server和web.config_asp.net技巧
相关推荐
-      对.net framework 反射的反思_asp.net技巧
-      .net3.5和vs2008中的asp.net ajax_asp.net技巧
-      使用asp.net ajax框架扩展html map控件_asp.net技巧
-      asp.net应用程序资源访问安全模型_asp.net技巧
-      photoshop初学者轻松绘制螺旋漩涡特效_photoshop教程
-      photoshop通道结合图层模式抠狗尾巴草_photoshop教程
-      web.config详解+asp.net优化_asp.net技巧
-      asp.net中多彩下拉框的实现_asp.net技巧