冷月葬花魂 发表于 2015-1-16 22:29:23

ASP.NET网页编程之.net打包主动安装数据库

我也不知道,我原来理解的,NET就是C++编程,只是与JAVA相对,呵呵。以为.ET就是高级C++编程。  一).创立部署项目
  1.在“文件”菜单上指向“增加项目”,然后选择“新建项目”。
  2.在“增加新项目”对话框中,选择“项目范例”窗格中的“安装和部署项目”,然后选择“模板”窗格中的“安装项目”。在“称号”框中键进setup1。
  3.单击“断定”封闭对话框。
  4.项目被增加到办理计划资本办理器中,而且文件体系编纂器翻开。
  5.在“属性”窗口中,选择ProductName属性,并键进信息办理体系。

  二).将主程序项目标输入增加到部署项目中
  1.在“文件体系编纂器”中,选择“使用程叙文件夹”。在“操纵”菜单上,指向“增加”,然后选择“项目输入”。
  2.在“增加项目输入组”对话框中,选择“项目”下拉列表中的“你的程序”。
  3.单击“断定”封闭对话框。
  4.从列表当选择“主输入”和“内容文件”组,然后单击“断定”。

  三).创立安装程序类
  1.在“文件”菜单上指向“新建”,然后选择“项目”。
  2.在“新建项目”对话框中,选择“项目范例”窗格中的“VisualBasic项目”,然后选择“模板”窗格中的“类库”。在“称号”框中键进installDB。
  3.单击“翻开”封闭对话框。
  4.从“项目”菜单当选择“增加新项”。
  5.在“增加新项”对话框当选择“安装程序类”。在“称号”框中键进installDB。
  6.单击“断定”封闭对话框。
  7.具体代码附后。

  四).创立自界说安装对话框
  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=/server=/user=/pwd=/targetdir=""”。

  附:/targetdir=""是安装后的方针路径,为了在installDB类中取得安装后的路径,我们设置此参数。
  六).打包r到场卸载功效:
  办法一:
  1.在打包目中增加文件msiexec.exe(一样平常可在c:windowssystem32下找到)
  2.在文件系yD中x贸绦蛭募A,在msiexec.exe上按右I,x建快速体例,重定名快速体例"卸载".
  3.变动此快速体例的Arguments为"/x{a品id}",a品id的值榇虬目标ProductCode傩灾.
  办法二:(保举)
  1.师长教师成安装包,记下ProductCode(选择办理计划资本办理器根目次如setup1,再检察属性标签,不是右键中的属性),上面要用到
  2.用VS.net创建一个新的把持台程序uninst.exe文件
powerby:landlordh
for2000,xp,2003
Moduleuninstall
SubMain()
DimmyProcessAsProcess=NewProcess
IfSystem.Environment.OSVersion.ToString.IndexOf("NT5")Then
myProcess.Start("msiexec","/X{2B65D4A9-C146-4808-AB4B-321FB0779559}")
改成本人的ProductCode
EndIf
myProcess.Close()
EndSub
EndModule
3.将把持台程序BIN目次的exe文件到场到打包程叙文件中,在程序组创立uninst.exe的快速体例
installdb.vb类,要增加援用system.configuration.install.dll:
usingSystem;
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Configuration.Install;
usingSystem.Reflection;
usingSystem.IO;
usingSystem.Data;
usingSystem.Data.SqlClient;
namespaceinstall
{
///<summary>
///Installer1的择要申明。
///</summary>

publicclassInstaller1:System.Configuration.Install.Installer
{
///<summary>
///必须的计划器变量。
///</summary>
privateSystem.ComponentModel.Containercomponents=null;
publicInstaller1()
{
//该挪用是计划器所必须的。
InitializeComponent();
//TODO:在InitializeComponent挪用后增加任何初始化
}
///<summary>
///清算一切正在利用的资本。
///</summary>
protectedoverridevoidDispose(booldisposing)
{
if(disposing)
{
if(components!=null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
#region组件计划器天生的代码
///<summary>
///计划器撑持所需的办法-不要利用代码编纂器修正
///此办法的内容。
///</summary>
privatevoidInitializeComponent()
{
components=newSystem.ComponentModel.Container();
}
#endregion
privatestringGetSql(stringName)
{
////挪用osql实行剧本
//
//System.Diagnostics.ProcesssqlProcess=newSystem.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.Start();
//
//sqlProcess.WaitForExit();//守候实行
//
//sqlProcess.Close();
try
{
//AssemblyAsm=Assembly.GetExecutingAssembly();
//System.IO.FileInfoFileInfo=newSystem.IO.FileInfo(Asm.Location);
//stringpath=FileInfo.DirectoryName+@""+Name;
stringpath=this.Context.Parameters["targetdir"]+Name;
FileStreamfs=newFileStream(path,FileMode.Open,FileAccess.Read,FileShare.Read);
StreamReaderreader=newStreamReader(fs,System.Text.Encoding.Default);
//System.Text.Encoding.ASCII;
returnreader.ReadToEnd();
}
catch(Exceptionex)
{
Console.Write("InGetSql:"+ex.Message);
throwex;
}
}
privatevoidExecuteSql(stringDataBaseName,stringSql)
{
SqlConnectionsqlConnection1=newSqlConnection();
sqlConnection1.ConnectionString=string.Format("server={0};userid={1};password={2};Database=master",this.Context.Parameters["server"],this.Context.Parameters["user"],this.Context.Parameters["pwd"]);
System.Data.SqlClient.SqlCommandCommand=newSystem.Data.SqlClient.SqlCommand(Sql,sqlConnection1);
try
{
Command.Connection.Open();
Command.Connection.ChangeDatabase(DataBaseName);

Command.ExecuteNonQuery();
}
catch(Exceptionex)
{
Console.Write("Inexceptionhandler:"+ex.Message);
}
finally
{
Command.Connection.Close();
}
}

protectedvoidAddDBTable(stringstrDBName)
{
try
{
ExecuteSql("master","CREATEDATABASE"+strDBName);
ExecuteSql(strDBName,GetSql("sql.txt"));
ExecuteSql("master","execsp_addloginmyoamaster,myoamaster,"+strDBName+",Null,Null");
ExecuteSql(strDBName,"EXECsp_grantdbaccessmyoamaster,myoamaster");
ExecuteSql(strDBName,"execsp_addrolememberdb_owner,myoamaster");
}
catch(Exceptionex)
{
Console.Write("Inexceptionhandler:"+ex.Message);
}
}
publicoverridevoidInstall(System.Collections.IDictionarystateSaver)
{
base.Install(stateSaver);
AddDBTable(this.Context.Parameters["dbname"]);
}
}
}
  这里有个sql.txt是数据库的sql剧本,固然能够挪用osql来实行sql剧本,实际上是一样的。
  打包的时分必需把sql.txt文件加出去,不然不会实行。
  
  假如你想附加数据库的mdf文件和ldf文件,用上面这段程序:
privatevoidCreateDataBase(stringstrSql,stringDataName,stringstrMdf,stringstrLdf)
{
Stringstr;
SqlConnectionmyConn=newSqlConnection(strSql);
//EXECsp_detach_db@dbname=BX_FreightMileage_2//必要先将数据库分别出来
str="EXECsp_attach_db@dbname="+DataName+",@filename1="+strMdf+",@filename2="+strLdf+"";
SqlCommandmyCommand=newSqlCommand(str,myConn);

myConn.Open();
myCommand.ExecuteNonQuery();
myConn.Close();

}
  固然打包的时分也要把这两个数据库文件也加出去。

捆绑编译器。用户不需要受制于厂家,自己就能将程序在新平台上编译运行。除了牛B轰轰的linux,估计也没有系统捆绑c/c++的编译器,而且许多新平台都无法支持复杂的c/c++编译器在上面直接运行。

再现理想 发表于 2015-1-19 14:49:11

它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。

灵魂腐蚀 发表于 2015-1-24 13:40:32

ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码。

兰色精灵 发表于 2015-2-1 16:15:33

ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码。

第二个灵魂 发表于 2015-2-7 08:09:14

现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。

金色的骷髅 发表于 2015-2-21 05:13:38

但是目前在CGI中使用的最为广泛的是Perl语言。所以,狭义上所指的CGI程序一般都是指Perl程序,一般CGI程序的后缀都是.pl或者.cgi。

冷月葬花魂 发表于 2015-3-6 19:48:11

代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。

小魔女 发表于 2015-3-13 07:08:33

由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。

柔情似水 发表于 2015-3-20 16:11:38

Asp.net脚本的出现,为ASP空间带来了更高的稳定性,同时也为程序员建站提供更高环境!
页: [1]
查看完整版本: ASP.NET网页编程之.net打包主动安装数据库