using
System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.IO;
using System.Data.SqlClient;
using System.Reflection;
namespace DBInstall
... {
[RunInstaller(true)]
public partial class Installer2 : Installer
...{
public Installer2()
...{
InitializeComponent();
}
private System.ComponentModel.Container components = null;
//private string strPass = "";
private string server = "",user="",pwd="",dbname="";
Component Designer generated code#region Component Designer generated code
/**//// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
...{
}
#endregion
public override void Install(System.Collections.IDictionary stateSaver)
...{
//入口
dbname= this.Context.Parameters["dbname"]; //dbname 为数据库名称
server = this.Context.Parameters["server"]; //server 为 服务器名称
user = this.Context.Parameters["user"]; //user 为 数据库登录名称
pwd = this.Context.Parameters["pwd"]; //pwd 为 数据库 登录密码
AddDBTable(dbname); //添加表,视图,存储过程
WriteWebConfig(); //更新webconfig 连接字符串
}
private string GetSql(string strName)
...{
try
...{
//' Get the current assembly.
Assembly Asm = Assembly.GetExecutingAssembly();
// Resources are named using a fully qualified name
Stream strm = Asm.GetManifestResourceStream(Asm.GetName().Name + "." + strName);
//Read the contents of the embedded file.
StreamReader reader= new StreamReader(strm);//,System.Text.Encoding.Unicode);
return reader.ReadToEnd();
}
catch
...{
return null;
}
}
/**//// <summary>
/// 执行sql 语句
/// </summary>
/// <param name="DatabaseName"></param>
/// <param name="Sql"></param>
private void ExecuteSql(string DatabaseName , string Sql)
...{
string connString=string.Format("server={0};user id={1};password={2};database={3}",server,user,pwd,DatabaseName);
SqlConnection sqlConnection1 = new SqlConnection(connString) ;
SqlCommand Command = new 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
Command.Connection.Close();
}
}
protected void AddDBTable(string strDBName )
...{
try
...{
//Create the database.
ExecuteSql("master", "CREATE DATABASE " + strDBName);
// Create the tables.
ExecuteSql(strDBName, GetSql("sql.txt"));
}
catch
...{
}
}
/**//// <summary>
///数据库安装完成后更新webconfig 文件
/// </summary>
/// <returns></returns>
private bool WriteWebConfig()
...{
System.IO.FileInfo FileInfo = new System.IO.FileInfo(this.Context.Parameters["targetdir"] + "/web.config");
if (!FileInfo.Exists)
...{
throw new InstallException("Missing config file:" + this.Context.Parameters["targetdir"] + "/web.config");
}
System.Xml.XmlDocument xmlDocument = new System.Xml.XmlDocument();
xmlDocument.Load(FileInfo.FullName);
bool FoundIt = false; //设置变量 初始值false 表示 更新不成功
foreach (System.Xml.XmlNode Node in xmlDocument["configuration"]["connectionStrings"])
...{
if (Node.Name == "add")
...{
if (Node.Attributes.GetNamedItem("name").Value == "sweaterConnectionString")
...{
//Node.Attributes.GetNamedItem("value").Value = String.Format("Persist Security Info=False;Data Source={0};database={1};User ID={2};Password={3};Packet Size=4096;Pooling=true;Max Pool Size=100;Min Pool Size=1", ServerName, DBName, AdminName, AdminPwd);
Node.Attributes.GetNamedItem("connectionString").Value = string.Format("server={0};database={1};uid={2};password={3};Max Pool Size=512",server,dbname,user,pwd);
FoundIt = true;
}
}
}
if (!FoundIt)
...{
throw new InstallException("Error when writing the config file: web.config");
}
xmlDocument.Save(FileInfo.FullName);
return FoundIt;
}
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.IO;
using System.Data.SqlClient;
using System.Reflection;
namespace DBInstall
... {
[RunInstaller(true)]
public partial class Installer2 : Installer
...{
public Installer2()
...{
InitializeComponent();
}
private System.ComponentModel.Container components = null;
//private string strPass = "";
private string server = "",user="",pwd="",dbname="";
Component Designer generated code#region Component Designer generated code
/**//// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
...{
}
#endregion
public override void Install(System.Collections.IDictionary stateSaver)
...{
//入口
dbname= this.Context.Parameters["dbname"]; //dbname 为数据库名称
server = this.Context.Parameters["server"]; //server 为 服务器名称
user = this.Context.Parameters["user"]; //user 为 数据库登录名称
pwd = this.Context.Parameters["pwd"]; //pwd 为 数据库 登录密码
AddDBTable(dbname); //添加表,视图,存储过程
WriteWebConfig(); //更新webconfig 连接字符串
}
private string GetSql(string strName)
...{
try
...{
//' Get the current assembly.
Assembly Asm = Assembly.GetExecutingAssembly();
// Resources are named using a fully qualified name
Stream strm = Asm.GetManifestResourceStream(Asm.GetName().Name + "." + strName);
//Read the contents of the embedded file.
StreamReader reader= new StreamReader(strm);//,System.Text.Encoding.Unicode);
return reader.ReadToEnd();
}
catch
...{
return null;
}
}
/**//// <summary>
/// 执行sql 语句
/// </summary>
/// <param name="DatabaseName"></param>
/// <param name="Sql"></param>
private void ExecuteSql(string DatabaseName , string Sql)
...{
string connString=string.Format("server={0};user id={1};password={2};database={3}",server,user,pwd,DatabaseName);
SqlConnection sqlConnection1 = new SqlConnection(connString) ;
SqlCommand Command = new 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
Command.Connection.Close();
}
}
protected void AddDBTable(string strDBName )
...{
try
...{
//Create the database.
ExecuteSql("master", "CREATE DATABASE " + strDBName);
// Create the tables.
ExecuteSql(strDBName, GetSql("sql.txt"));
}
catch
...{
}
}
/**//// <summary>
///数据库安装完成后更新webconfig 文件
/// </summary>
/// <returns></returns>
private bool WriteWebConfig()
...{
System.IO.FileInfo FileInfo = new System.IO.FileInfo(this.Context.Parameters["targetdir"] + "/web.config");
if (!FileInfo.Exists)
...{
throw new InstallException("Missing config file:" + this.Context.Parameters["targetdir"] + "/web.config");
}
System.Xml.XmlDocument xmlDocument = new System.Xml.XmlDocument();
xmlDocument.Load(FileInfo.FullName);
bool FoundIt = false; //设置变量 初始值false 表示 更新不成功
foreach (System.Xml.XmlNode Node in xmlDocument["configuration"]["connectionStrings"])
...{
if (Node.Name == "add")
...{
if (Node.Attributes.GetNamedItem("name").Value == "sweaterConnectionString")
...{
//Node.Attributes.GetNamedItem("value").Value = String.Format("Persist Security Info=False;Data Source={0};database={1};User ID={2};Password={3};Packet Size=4096;Pooling=true;Max Pool Size=100;Min Pool Size=1", ServerName, DBName, AdminName, AdminPwd);
Node.Attributes.GetNamedItem("connectionString").Value = string.Format("server={0};database={1};uid={2};password={3};Max Pool Size=512",server,dbname,user,pwd);
FoundIt = true;
}
}
}
if (!FoundIt)
...{
throw new InstallException("Error when writing the config file: web.config");
}
xmlDocument.Save(FileInfo.FullName);
return FoundIt;
}
}
}