ASP.NET 項目安裝包制作(二)數據庫安裝、其他組件的安裝

作者: steven hu  來源: 博客園  發布時間: 2010-09-12 22:25  閱讀: 2560 次  推薦: 0   原文鏈接   [收藏]  

  上一節是講述如何制作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包了。

  下載示例

0
0
 
標簽:ASP.NET
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()