您的位置:首页 > 编程语言 > ASP

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

2010-10-26 09:13 567 查看
 上一节是讲述如何制作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包了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: