.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添加到项目中,如下图:

image

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

image

设置生成操作为嵌入的资源。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包打包进安装项目。

image

我们执行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包了。

 

本节完。

 

下载示例

 

来源:http://www.cnblogs.com/huxj/archive/2010/09/12/1824439.html

posted @ 2010-09-13 17:51  guangrou  阅读(186)  评论(0编辑  收藏  举报