zoukankan      html  css  js  c++  java
  • C#打包SQL数据库部署安装

    参考《ASP.NET与SQL一起打包部署安装》,这篇文章是针对VB.NET与SQL 一起打包的,但是我使用的是C#,当然只要修改一下主要安装类库就行了!C#的类库代码如下:DBCustomAction.cs

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


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

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

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

      private void ExecuteSql(string conn,string DatabaseName,string Sql)
      {
       SqlConnection mySqlConnection=new SqlConnection(conn);  
       SqlCommand Command=new SqlCommand(Sql, mySqlConnection);  
       mySqlConnection.Open();  
       mySqlConnection.ChangeDatabase(DatabaseName);  
       try
       {
        Command.ExecuteNonQuery();
       }  
       finally
       {
        //close Connection  
        mySqlConnection.Close();
       }
      }

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

      //

      public override void Install(System.Collections.IDictionary stateSaver)
      {
       base.Install(stateSaver);
      
       // ------------------------建立数据库-------------------------------------------------
      
       try
       {
        string connstr = String.Format("data source={0};user id={1};password={2};persist security info=false;packet size=4096", Context.Parameters["server"],Context.Parameters["user"], Context.Parameters["pwd"]);
        //'根据输入的数据库名称建立数据库  
        ExecuteSql(connstr, "master", "CREATE DATABASE " +Context.Parameters["dbname"]);  
        //'调用osql执行脚本  
        Process sqlprocess=new System.Diagnostics.Process();
        sqlprocess.StartInfo.FileName = "osql.exe ";  
        sqlprocess.StartInfo.Arguments = String.Format(" -U {0} -P {1} -d {2} -i {3}db.sql", Context.Parameters["user"], Context.Parameters["pwd"],Context.Parameters["dbname"],Context.Parameters["targetdir"]);
        sqlprocess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        sqlprocess.Start();  
        sqlprocess.WaitForExit(); // '等待执行
        sqlprocess.Close();
      
        //'删除脚本文件
        FileInfo sqlfileinfo =new FileInfo(String.Format("{0}db.sql",Context.Parameters["targetdir"]));
      
        if (sqlfileinfo.Exists)
        {
         sqlfileinfo.Delete();
        }
       }
       catch(Exception ex)
       {
        throw ex;  
       }
      
       //' ---------------------将连接字符串写入Web.config-----------------------------------
      /*
       try
       {
        FileInfo fileinfo = new FileInfo(Context.Parameters["targetdir"] + "\\web.config");
        if (!fileinfo.Exists)
        {
         throw new InstallException("没有找到配置文件");
      
        }
      
        //'实例化xml文档
      
        XmlDocument xmldocument=new XmlDocument();
      
        xmldocument.Load(fileinfo.FullName);
      
      
      
        //'查找到appsettings中的节点
      
        //XmlNode node=new XmlNode();
      
        Boolean FoundIt  = false;
      
        foreach(XmlNode node in xmldocument.SelectSingleNode("appSettings").ChildNodes)
        {  
         if (node.Name == "add")
         {  
          if (node.Attributes.GetNamedItem("key").Value == "connString")
          {
           //'写入连接字符串
           node.Attributes.GetNamedItem("value").Value= String.Format("Persist Security Info=False;Data Source={0};Initial Catalog={1};User ID={2};Password={3};Packet Size=4096;Pooling=true;Max Pool Size=100;Min Pool Size=1",Context.Parameters["server"],Context.Parameters["dbname"], Context.Parameters["user"], Context.Parameters["pwd"]);
           FoundIt= true;  
          }  
         }  
        }
      
        if (!FoundIt)
        {  
         throw new InstallException("web.Config 文件没有包含connString连接字符串设置");
        }   
        xmldocument.Save(fileinfo.FullName);
       }
       catch(Exception ex)
       {
        throw ex;
       } 
       */         
      }

      #region 组件设计器生成的代码
                     /// <summary>
                     /// 设计器支持所需的方法 - 不要使用代码编辑器修改
                     /// 此方法的内容。
                     /// </summary>
                     private void InitializeComponent()
                     {
                      components = new System.ComponentModel.Container();
                     }
      #endregion
     }
    }

    我不需要修改Web.config的部分.
    注意.如果不用SA用户登录数据库的,请先在服务器上建立特定的SQL用户

  • 相关阅读:
    weex 安装过程中遇到的坑
    css3 实现瀑布流
    Apache Commons工具集简介(转)
    关于val(),text(),html()的用法
    由获取子元素的方法find和children所获
    JS中判定问题
    EasyUI中dialog中嵌入form细节问题记录
    EasyUi中的datagird中a标签的click事件无法触发?(已解决)
    JSP中EL表达式取值问题记录(已解决)
    JSONObject转换JSON之将Date转换为指定格式(转)
  • 原文地址:https://www.cnblogs.com/wujy/p/2240695.html
Copyright © 2011-2022 走看看