C#安装项目文件,自动读取参数的安装类(自动安装SQL SERVER数据库)

来源:互联网 发布:免费电子签名软件 编辑:程序博客网 时间:2024/06/06 01:58

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


namespace DBCustomAction
{
 /// <summary>
 /// DBCustomAction 的摘要说明。
 /// </summary>
 [RunInstaller(true)]
 public class DBCustomAction : System.Configuration.Install.Installer
 {
  /// <summary>
  /// 必需的设计器变量。
  /// </summary>
  private System.ComponentModel.Container components = null;
  private string strPass = "";

  public DBCustomAction()
  {
   // 该调用是设计器所必需的。
   InitializeComponent();

   // TODO: 在 InitComponent 调用后添加任何初始化
  }

  #region Component Designer generated code
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {

  }
  #endregion

  public override void Install(System.Collections.IDictionary stateSaver)
  {
  
   //入口
   strPass = this.Context.Parameters["strPass"];
   AddDBTable("RequestSys");//RequestSys为数据库名称
   


  }
  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;
   }
                                  
  }
  private void ExecuteSql(string DatabaseName , string Sql)
  {

   SqlConnection sqlConnection1 = new SqlConnection("user id=sa;password="+strPass+";database=master;server=(local)") ;
   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
   {
    
   }
  }
  

 }
}

 

附:

自定义操作设置

CustomActionData

属性两个值以上设置方法如下: 

/strPass=[STRPASS] /edit2=[EDITC2]

参考

http://msdn2.microsoft.com/zh-tw/library/2w2fhwzz.aspx

原创粉丝点击