技术开发 频道

.Net Web项目实战:数据库及其组件安装

  下面我们来使用代码如何读取资源的脚本,就是上面代码中的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包打包进安装项目。

2
 

  我们执行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
相关文章