技术开发 频道

将.NET安装程序部署到SQL Server数据库

  2.在安装程序中部署SQL Server数据库

  通过上面的介绍,一般应用程序的制作非常容易,基本上就是把您的应用程序拖入该安装程序的过程。如果您的应用程序的运行需要数据库的支持(如SQL Server),问题就变得比较复杂一点。

  主要有如下几个方面的问题:

  (1) 如何在获得安装画面的值,比如获得用户输入的用户名密码。

  (2) 如何设计一个程序来与数据库服务器进行交互,创建新的数据库。

  这个例子演示了如何在用户界面自定义对话框要求用户输入信息,然后在自定义操作中把获得的值通过CustomActionData来传递给自定义操作中的主输出,最后在主输出相面里面的程序里面来创建一个数据库。

  通过对上面的例子的理解,基本上可以按照这个方式来创建一个数据库,它通过ADO.net执行SQL语句来完成创建数据库的。但是,如果有大量的数据表以及存储过程需要建立,通过这个的方式非常麻烦。可不可以通过直接在SQL Server中创建相应的数据库生成脚本文件来直接完成呢?

  我们有3个解决方案:
  (1) 通过调用osql来执行数据库脚本文件
  (2) 通过把相应的脚本文件作为资源文件嵌入到项目中,然后通过ADO.net来执行
  (3) 通过调用SQL Server的sp_attach_db的存储过程来直接附加数据库。

  3. 通过调用osql来执行数据库脚本文件

  从上面的例子我们已经知道了如何传递值,那么我们只要在项目文件中程序段中执行osql即可。

  这里有一个问题就是从什么地方找到数据库的脚本文件。我们可以把脚本文件放到文件系统中,直接安装到用户机器上,并可以通过如下方法获得到该文件的位置。

Assembly asm=Assembly.GetExecutingAssembly();
String setuppath
=asm.Location;

  这样我们就可以知道脚本文件的位置了,下面的文件就是如何启动osql程序了。我们可以通过如下的代码段来完成:

Process sqlprocess=new Process(); sqlprocess.StartInfo.FileName="osql.exe";
sqlprocess.StartInfo.Arguments
=String.Format("-U {0} -P {1} -S {2} -i {3}",this.uid,this.pwd,this.serverip,this.spath); //uid 为用户名,pwd为密码,serverip为目标服务器的ip,spath为数据库脚本所在的路径
sqlprocess.StartInfo.WindowStyle
=ProcessWindowStyle.Hidden;
sqlprocess.Start();
sqlprocess.WaitForExit();
//等待程序执行
sqlprocess.
Close();

  从上面可以知道,该方法必须要求安装程序的客户机以及安装好了SQL Server才能使用(osql为安装了SQL Server后提供的命令行下的程序).同时在实际的测试过程中,我们发现如果对于用户在安装程序是选择带有空格的路径,如;C:\program files\yourappliaction\时,安装失败。这个是一个比较严重的问题。

0
相关文章