求C#桌面程序和数据库SQL Server打包方法
发布时间:2025-05-19 11:38:01 发布人:远客网络
一、求C#桌面程序和数据库SQL Server打包方法
网上找的资料,我了下,还行。一).创建部署项目
1.在“文件”菜单上指向“添加项目”,然后选择“新建项目”。
2.在“添加新项目”对话框中,选择“项目类型”窗格中的“安装和部署项目”,然后选择“模板”窗格中的“安装项目”。在“名称”框中键入 setup1。
4.项目被添加到解决方案资源管理器中,并且文件系统编辑器打开。
5.在“属性”窗口中,选择 ProductName属性,并键入信息管理系统。
二).将主程序项目的输出添加到部署项目中
1.在“文件系统编辑器”中,选择“应用程序文件夹”。在“操作”菜单上,指向“添加”,然后选择“项目输出”。
2.在“添加项目输出组”对话框中,选择“项目”下拉列表中的“你的程序”。
4.从列表中选择“主输出”和“内容文件”组,然后单击“确定”。
1.在“文件”菜单上指向“新建”,然后选择“项目”。
2.在“新建项目”对话框中,选择“项目类型”窗格中的“Visual Basic项目”,然后选择“模板”窗格中的“类库”。在“名称”框中键入 installDB。
4.从“项目”菜单中选择“添加新项”。
5.在“添加新项”对话框中选择“安装程序类”。在“名称”框中键入 installDB。
1.在解决方案资源管理器中选择“setup1”项目。在“视图”菜单上指向“编辑器”,然后选择“用户界面”。
2.在用户界面编辑器中,选择“安装”下的“启动”节点。在“操作”菜单上,选择“添加对话框”。
3.在“添加对话框”对话框中,选择“许可协议”对话框,然后单击“确定”关闭对话框。
4.在“添加对话框”对话框中,选择“文本框(A)”对话框,然后单击“确定”关闭对话框。
5.在“操作”菜单上,选择“上移”。重复此步骤,直到“文本框(A)”对话框位于“安装文件夹”节点之上。
6.在“属性”窗口中,选择 BannerText属性并键入:安装数据库.
7.选择 BodyText属性并键入:安装程序将在目标机器上安装数据库
8.选择 Edit1Label属性并键入:数据库名称:
9.选择 Edit1Property属性并键入 CUSTOMTEXTA1
10.选择 Edit1Value属性并键入:dbservers
11.选择 Edit2Label属性并键入:服务器名:
12.选择 Edit2Property属性并键入 CUSTOMTEXTA2
13.选择 Edit2Value属性并键入:(local)
14.选择 Edit3Label属性并键入:用户名:
15.选择 Edit3Value属性并键入:sa
16.选择 Edit3Property属性并键入 CUSTOMTEXTA3
17.选择 Edit4Label属性并键入:密码:
18.选择 Edit4Property属性并键入 CUSTOMTEXTA4
19.选择 Edit2Visible、Edit3Visible和 Edit4Visible属性,并将它们设置为 true
1.在解决方案资源管理器中选择“setup1”项目。在“视图”菜单上指向“编辑器”,然后选择“自定义操作”。
2.在自定义操作编辑器中选择“安装”节点。在“操作”菜单上,选择“添加自定义操作”。
3.在“选择项目中的项”对话框中,双击“应用程序文件夹”。
4.选择“主输出来自 installDB(活动)”项,然后单击“确定”关闭对话框。
5.在“属性”窗口中,选择 CustomActionData属性并键入“/dbname=[CUSTOMTEXTA1]/server=[CUSTOMTEXTA2]/user=[CUSTOMTEXTA3]/pwd=[CUSTOMTEXTA4]/targetdir="[TARGETDIR]\"”。
附:/targetdir="[TARGETDIR]\"是安装后的目标路径,为了在installDB类中获得安装后的路径,我们设置此参数。
1.在打包项目中添加文件msiexec.exe(一般可在c:\windows\system32\下找到)
2.在文件系统视图中选择应用程序文件夹,在msiexec.exe上按右键,选择创建快捷方式,重命名快捷方式为"卸载".
3.更改此快捷方式的Arguments为"/x{产品id}",产品id的值为打包项目的ProductCode属性值.
1.先生成安装包,记下ProductCode(选择解决方案资源管理器根目录如setup1,再查看属性标签,不是右键中的属性),下面要用到
2.用VS.net建立一个新的控制台程序uninst.exe文件
Dim myProcess As Process= New Process
If System.Environment.OSVersion.ToString.IndexOf("NT 5") Then
myProcess.Start("msiexec","/X{2B65D4A9-C146-4808-AB4B-321FB0779559}")'改为自己的ProductCode
3.将控制台程序BIN目录的exe文件加入到打包程序文件中,在程序组创建uninst.exe的快捷方式
installdb.vb类,要添加引用 system.configuration.install.dll:
using System.Configuration.Install;
public class Installer1: System.Configuration.Install.Installer
private System.ComponentModel.Container components= null;
// TODO:在 InitializeComponent调用后添加任何初始化
protected override void Dispose( bool disposing)
///设计器支持所需的方法-不要使用代码编辑器修改
private void InitializeComponent()
components= new System.ComponentModel.Container();
private string GetSql(string Name)
// System.Diagnostics.Process sqlProcess= new System.Diagnostics.Process();
// sqlProcess.StartInfo.FileName="osql.exe";
// sqlProcess.StartInfo.Arguments= String.Format("-U{0}-P{1}-d{2}-i{3}db.sql", this.Context.Parameters["user"], this.Context.Parameters["pwd"],"master", this.Context.Parameters["targetdir"]);
// sqlProcess.StartInfo.WindowStyle= System.Diagnostics.ProcessWindowStyle.Hidden;
// sqlProcess.WaitForExit();//等待执行
// Assembly Asm= Assembly.GetExecutingAssembly();
// System.IO.FileInfo FileInfo= new System.IO.FileInfo(Asm.Location);
// string path=FileInfo.DirectoryName+@"\"+Name;
string path=this.Context.Parameters["targetdir"]+Name;
FileStream fs=new FileStream(path,FileMode.Open,FileAccess.Read,FileShare.Read);
StreamReader reader= new StreamReader(fs,System.Text.Encoding.Default);
Console.Write("In GetSql:"+ex.Message);
private void ExecuteSql(string DataBaseName,string Sql)
SqlConnection sqlConnection1=new SqlConnection();
sqlConnection1.ConnectionString=string.Format("server={0}; user id={1}; password={2}; Database=master",this.Context.Parameters["server"],this.Context.Parameters["user"],this.Context.Parameters["pwd"]);
System.Data.SqlClient.SqlCommand Command= new System.Data.SqlClient.SqlCommand(Sql,sqlConnection1);
Command.Connection.ChangeDatabase(DataBaseName);
Console.Write("In exception handler:"+ex.Message);
protected void AddDBTable(string strDBName)
ExecuteSql("master","CREATE DATABASE"+ strDBName);
ExecuteSql(strDBName,GetSql("sql.txt"));
ExecuteSql("master","exec sp_addlogin'myoamaster','myoamaster','"+strDBName+"',Null,Null");
ExecuteSql(strDBName,"EXEC sp_grantdbaccess'myoamaster','myoamaster'");
ExecuteSql(strDBName,"exec sp_addrolemember'db_owner','myoamaster'");
Console.Write("In exception handler:"+ex.Message);
public override void Install(System.Collections.IDictionary stateSaver)
AddDBTable(this.Context.Parameters["dbname"]);
这里有个sql.txt是数据库的sql脚本,当然可以调用osql来执行sql脚本,其实是一样的。
打包的时候必须把sql.txt文件加进来,否则不会执行。
如果你想附加数据库的mdf文件和ldf文件,用下面这段程序:
private void CreateDataBase(string strSql,string DataName,string strMdf,string strLdf)
SqlConnection myConn= new SqlConnection(strSql);
//EXEC sp_detach_db@dbname='BX_FreightMileage_2'//需要先将数据库分离出来
str="EXEC sp_attach_db@dbname='"+ DataName+"',@filename1='"+ strMdf+"',@filename2='"+strLdf+"'";
SqlCommand myCommand= new SqlCommand(str, myConn);
当然打包的时候也要把这两个数据库文件也加进来。
----------------------------------------------------------------------
sp_attach_db//附加数据库文件到服务器或
sp_attach_db_single_file//附加数据库的单个文件到服务器具体的sql语句就是:例如:
EXEC sp_attach_single_file_db’pubs’,’e:\data\pubs.mdf’sp_attach_db@dbname=”conmis2000″,@filename1=”d:\1\conmis2000_data.mdf”,@filename2=” d:\1\conmis2000_log.ldf”
二、怎么打包数据库语句输出
1.准备一份Install Shield Express,最好是2.01以上的版本,在Delphi的安
装盘上有一个专用版本也可以用,按照制作一般程序安装盘的方法建立安装程序,
2.在你的Windows\System下面找到以下几个文件(当然你的机器必须已经安装
Ntwdblib.dll SQLServer核心文件(这个文件最重要)
3.在Fpecify Components and Files的Groups and Files中,将以上几个文件
加入到Program Files中去.当然你也可以建立一个组,将这些文件拷贝到System目
录中,不过jojo个人倾向于拷贝到安装目录,以便反安装的时候可以彻底的删除它
4.如果你的程序运行比较简单(比如只有一个网段)现在你已经大功告成了,但
不幸的是大多数人的网络环境没有如此简单,下面还要修改注册表:
增加一个:hkey_local_machine_/software/Microsoft/MSSQLserver/CLIENT/db-
其中DSQUERY设定默认的连接协议,这里设定的是IPX,128.1.1.1则是专有的连接,
这里是设定一个连接名称为128.1.1的连接,使用TCP/IP协议,IP地址为128.1.1.1
,你也可以把键名改成其他名称,只要与你的别名中SERVER NAME一项相同即可.
三、SQL server中sql语句怎么创建次要数据库文件
1、create database TwoDataBase创建的数据库名称
2、on primary主文件组, primary可以省略
3、name= N'TwoDataBase',数据库文件的逻辑名
4、filename=N'f:\TwoDataBase.mdf',全路径加上后缀
5、name=N'TwoDataBase2',次要文件名,不能够和主文件同名
6、filename=N'f:\TwoDataBase.ndf',
7、name=N'TwoDataBase_log',逻辑文件名,不能和前面的文件同名,一般都是下划线后加一个 log
8、filename=N'f:\TwoDataBase.ldf',
9、go27 use TwoDataBase;将数据库上下文切换到我们当前创建的数据库上面来
10、次要数据库:是通过将每个文件放在不同的磁盘驱动器上,次要文件可用于将数据分散到多个磁盘上。另外,如果数据库超过了单个 Windows文件的最大大小,可以使用次要数据文件,这样数据库就能继续增长。
11、关系:包含关系,主要数据文件包含数据库的启动信息,并指向数据库中的其他文件,次要数据文件是可选的,由用户定义并存储用户数据。
12、所有的操作中,删除是最简单的。
13、当删除数据库语句执行之后,在数据库内部看不到对应的数据库了;在对于的数据库存储的文件夹内,数据库名字对应的文件夹也被删除了(级联删除:里面的数据表全部删除)。