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

 上一节是讲述如何制作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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值