• .Net Web项目安装包制作 (二)数据库安装、其他组件的安装


    上一节是讲述如何制作Web安装包的过程,只要按照步骤做就可以了。

    这一节将讲述安装过程中如何部署数据库,以及执行其他组件的安装。

    在这里使用直接执行sql脚本来创建数据库。(也可以使用附件数据库文件的形式)

    只要在Install方法中添加执行sql脚本的方法,就是使用SqlConnection连接数据库操作。

    using(SqlConnectionconnection = newSqlConnection(connectionString))
    {
        connection.Open();

        ExecuteSQL(connection, GetResource("createdatabase.sql"));

    }

    /// <summary>
    /// 执行sql语句
    /// </summary>
    /// <param name="connection"></param>
    /// <param name="sql"></param>
    void ExecuteSQL(SqlConnection connection, string sql)
    {
        SqlCommand cmd = new SqlCommand(sql, connection);
        cmd.ExecuteNonQuery();
    }
    /// <summary>
    /// 获取数据库登录连接字符串
    /// </summary>
    /// <param name="databasename">数据库名称</param>
    /// <returns></returns>
    private string GetConnectionString(string databasename)
    {
        return "server=" + Context.Parameters["server"].ToString() + ";database=" + (string.IsNullOrEmpty(databasename) ? "master" : databasename) + ";User ID=" + Context.Parameters["user"].ToString() + ";Password=" + Context.Parameters["pwd"].ToString();
    }

    在这里使用嵌入式资源的形式打包sql脚本。

    我们添加createdatabase.sql和dropdatabase.sql添加到项目中,如下图:

    右击createdatabase.sql查看属性,如下图:

    设置生成操作为嵌入的资源。dropdatabase.sql也是如此操作。

    下面我们来使用代码如何读取资源的脚本,就是上面代码中的GetResource方法。

    /// <summary>
    /// 获取资源文件中的脚本
    /// </summary>
    /// <param name="resourceName"></param>
    /// <returns></returns>
    string GetResource(string resourceName)
    {
        Assembly ass = Assembly.GetExecutingAssembly();
        using (Stream stream = ass.GetManifestResourceStream(ass.GetName().Name + "." + resourceName))
        {
            using (StreamReader reader = new StreamReader(stream, System.Text.Encoding.Default))
            {
                return reader.ReadToEnd();
            }
        }
    }

    这样再来看install方法的全部代码,如下:

    /// <summary>
    /// 安装
    /// </summary>
    /// <param name="stateSaver"></param>
    public override void Install(IDictionary stateSaver)
    {
        base.Install(stateSaver);
    
        string connectionString = GetConnectionString(null);
    
        try
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.Open();
    
                ExecuteSQL(connection, GetResource("createdatabase.sql"));
    
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("数据库安装失败!\n数据库配置有误,请正确配置信息!\n" + ex.Message, "出错啦!");
    
            this.Rollback(stateSaver);
        }
    }

    这样就完成了安装中数据库的创建。

    在卸载中删除数据库则需要重写Uninstall方法,来执行dropdatabase.sql中的脚本。

    /// <summary>
    /// 卸载 
    /// </summary>
    /// <param name="savedState"></param>
    public override void Uninstall(IDictionary savedState)
    {
        base.Uninstall(savedState);
    
        /*
    
         //这里要获取保存的链接字符串
        string connectionString = 
    
       try
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.Open();
    
                ExecuteSQL(connection, GetResource("dropdatabase.sql"));
    
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("数据库卸载失败!\n数据库配置有误,请正确配置信息!\n" + ex.Message, "出错啦!");
        }
         
         */
    }
    创建表、创建示例数据的操作就是类似操作,就是打包新的资源。
     
    Web项目的数据库连接都是在Web.config中的,所以安装过程还要修改Web.config的数据库连接,这里使用简单的替换。
    如下:
    /*
     * 设置webconfig连接字符串
     */
    string webconfigpath = Path.Combine(this.Context.Parameters["targetdir"].ToString(), "web.config");
    string webcofnigstring = File.ReadAllText(webconfigpath).Replace("#constring#", GetConnectionString("hxjdatabasename"));
    File.WriteAllText(webconfigpath, webcofnigstring);
    Web 项目中WebConfig中配置
    <add name="ConnectionString" connectionString="#constring#" providerName="System.Data.SqlClient" />

    就是替换#constring#为安装过程中生成的新的链接字符串。

    还有在我们的OA项目中还是用微软的AJAX库,所以还要安装Ajax包。

    我们将AJAX包打包进安装项目。

    我们执行ajax 2.0.msi的代码,如下:

    /*
     * 安装ajax2.0框架 
     */
    System.Diagnostics.Process process = new System.Diagnostics.Process();
    process.StartInfo.FileName = Path.Combine(this.Context.Parameters["targetdir"].ToString(), "Ajax 2.0.msi");
    process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
    process.Start();
    process.WaitForExit();

    这样在安装过称中就会安装这个ajax包了。

    本节完。

  • 相关阅读:
    javascript中错误使用var造成undefined
    眼下流行的几种排课算法的介绍
    UVA 11212 IDA*
    Delphi 2007体验!
    全局钩子具体解释
    客户信用控制请求
    【2012.1.24更新】不要再在网上搜索eclipse的汉化包了!
    Android URI简单介绍
    数据结构
    关于 Head First SQL 中文版
  • 原文地址:https://www.cnblogs.com/amylis_chen/p/2283498.html
Copyright © 2020-2023  润新知