一,首先看一篇有关自定义安装程序的介绍
自定义MSI的安装
二,下载上面文章提供的程序示例,将其中的CustomSteps直接加载到自己的解决方案中,即可使用.所要修改的只是script目录下的脚本文件.(修改成你要创建数据库的脚本),添加此程序的主输出到安装程序的'应用程序文件夹'中.(最好在这个文件夹中新建两个文件夹,bin和install,bin里面放你的应用程序的输出文件,install里面放customSteps的输出文件)
三.右键安装程序项目==>视图==>用户界面
右键'启动'==>添加对话框==>文本框(A),上移到第二个位置.
编辑文本框(A)的属性:
BinnerText:数据库参数
BodyText :请配置用于创建数据库的一些参数,每项都必须填写.
Edit1Label:服务器名称:
Edit1Property:SERVER_NAME
Edit1Value:[ComputerName]
Edit2Label:要创建的数据库名称:
Edit2Property:DATABASE_NAME
Edit2Value: //这里可以填一个默认的数据库名称,也可以不填
Edit3Label:用户名:
Edit3Property:USER_NAME
Edit3Value:sa
Edit4Label:密码:
Edit4Property:PASSWORD
然后生成安装程序...over
----------------------------------
另外提供一个自动生成数据库中数据脚本的函数
#region 生成数据表中数据的脚本
public static string CreateDataScript(string tableName)
{
bool isIdEntity=false;//此表中是否有标识列(自增)
string commandText = String.Format("SELECT c.name ,biaoshi=COLUMNPROPERTY( c.id,c.name,'IsIdentity') ,t.name "+
"FROM syscolumns c inner join systypes t on c.xusertype=t.xusertype "+
"WHERE c.ID = OBJECT_ID('{0}')",tableName);
DataTable fieldList = DBHelper.ExecuteDataTable(CommandType.Text,commandText);//这个方法你自己写吧
if(fieldList ==null || fieldList.Rows.Count==0)
return "";
string getvalue = String.Format("SELECT * FROM [{0}]",tableName);
DataTable dt = DBHelper.ExecuteDataTable(CommandType.Text,getvalue);
if(dt==null || dt.Rows.Count==0)
return "";
string middle ="";
for(int j=0;j<dt.Rows.Count;j++)
{
string fieldString="",valueString="";
DataRow dr = dt.Rows[j];
for(int i=0;i<fieldList.Rows.Count;i++)
{
string fieldName = fieldList.Rows[i][0].ToString();
string biaoshi = fieldList.Rows[i][1].ToString();
if(biaoshi=="1")//如果此列是标识列
isIdEntity = true;
fieldString += "["+fieldName+"],";
valueString += "'"+dr[fieldName]+"',";
}
fieldString = fieldString.Substring(0,fieldString.Length-1);
valueString = valueString.Substring(0,valueString.Length-1);
middle+=String.Format("\n INSERT INTO [{0}]({1}) \n VALUES({2})",tableName,fieldString,valueString);
}
string script = "";
if(isIdEntity )
script = String.Format("SET IDENTITY_INSERT [{0}] ON \n"+middle+
"\n\nSET IDENTITY_INSERT [{0}] OFF"+" \n Go",tableName,middle);
else
script = "\n"+middle;
return script;
}
#endregion
在ASP.Net中最为头痛的可能就是打印设置了。
为了这个问题,我都要熬白头了。网上也找了很多代码,但是总是会存在一些问题。根据我自己的实际试验发现不能用,为找不到对象之类的错误提示。
这里给出两种实际可用的方法:
一。通过注册表修改IE打印设置
<HTML>
<HEAD>
<TITLE>New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="YC">
<script language="VBScript">
dim hkey_root,hkey_path,hkey_key
hkey_root="HKEY_CURRENT_USER"
hkey_path="\Software\Microsoft\Internet Explorer\PageSetup" //IE打印设置的注册表地址
function pagesetup_null()
on error resume next
Set RegWsh = CreateObject("WScript.Shell")
hkey_key="\header"
RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"" //页眉
hkey_key="\footer"
RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"" //页脚
hkey_key="\margin_left"
RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"1" //键值设定--左边边界
hkey_key="\margin_top"
RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"1"
hkey_key="\margin_right"
RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"1"
hkey_key="\margin_bottom"
RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"1"
end function
'//
function pagesetup_default()
on error resume next
Set RegWsh = CreateObject("WScript.Shell")
hkey_key="\header"
RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"&w&b页,&p/&P" //页数-
hkey_key="\footer"
RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"&u&b&d" //网址,日期等信息
end function
</script>
</HEAD>
<BODY>
<table width="100%" border=2 cellspacing=1 align=center cellpadding=1 id=tb1>
<tr>
<td>
<br>
<br>
<br>
<p align="center">
<input type="button" value="Clean" onclick="pagesetup_null()"> <input type="button" value="Reset" onclick="pagesetup_default()"><br>
</p>
</td>
</tr>
</table>
</BODY>
</HTML>
除了以上键值以外还有
duplex
orientation
paper_size
paper_source
printer
注意:上面对页边距的设置为:1,实际设置值为25.4。
昨天发现这个方法有一个致命的缺点。那就是这个只能在安装有.Net框架的机子上有效。因为它所调用的WScript.Shell是.Net框架的...我还以为解决了这个烦人的打印控制了,昨天在客户端一运行简直让我伤心死。呵呵。。。。
难道还要让对什么是.net都不知道的用户去安装.net的框架么。不现实。
所以只能又回到javascript中来了。
二。javascript
今天发现原来以前有时有效有时无效的原因是出在,<input name="idPrint" type="button" value="打印" onclick="doprint()">不能放在页面的<form runat="server" id="Form1">之内,客户端的javascript放在runat server怎么行呢。认识到这个问题就好解决了。以下给出原码:
<script language="Javascript"><!--
function doprint() {
//保留客户打印机设置
var h = factory.printing.header;
var f = factory.printing.footer;
var t = factory.printing.topMargin;
var b = factory.printing.bottomMargin;
var l = factory.printing.leftMargin;
var r = factory.printing.rightMargin;
document.all("printbtn").style.visibility = 'hidden';//打印时隐藏打印按钮
//设置页眉页脚上下左右边距
factory.printing.header = "页眉+_+ohiolee的打印世界";
factory.printing.footer = "想设置页脚么,这里哦";
factory.printing.topMargin="6";//存在最小默认值5.02
factory.printing.bottomMargin="6";//存在最小默认值4.13
factory.printing.leftMargin="2";//存在最小默认值5.08
factory.printing.rightMargin="2";//存在最小默认值6.79。。。本人机子上测出来是这样的,不知道普遍是否如此。
//直接打印
factory.DoPrint(false);//true时弹出打印对话框
//返回到原来的打印设置
factory.printing.header = h;
factory.printing.footer = f;
factory.printing.topMargin=t;
factory.printing.bottomMargin=b;
factory.printing.leftMargin=l;
factory.printing.rightMargin=r;
//显示打印按钮
document.all("printbtn").style.visibility = 'visible';//通过document.all("printbtn").来指定页面中的任何类,并给以进一步属性设置
}
//--></script>
</HEAD>
<body>
<OBJECT id="factory" style="DISPLAY: none" codeBase="ScriptX.cab#Version=5,0,4,185" classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814"
viewastext>
</OBJECT>
<div id="printbtn"><input name="idPrint" type="button" value="打印" onclick="doprint()"></div>
codeBase="http://www.meadroid.com/scriptx/ScriptX.cab#Version=5,60,0,360" 这里需要给出ActiveX ScriptX.cab的地址,你可以下载到自己的网站中并提供出来,也可以引用其他网站的。当用户访问该网页时,将自动判断该浏览器是否已装有,没有的话,弹出下载警告。同意下载之后,就可以了。
注意不要把<div id="printbtn"><input name="idPrint" type="button" value="打印" onclick="doprint()"></div>放在runat server的form中哦。。。不要再犯像我一样的错误了哦。
相关推荐
SQL数据库安装部署与.net打包 介绍的很详细,想打包部署数据库的可以看下
借鉴MSDN webcasts的Asp.net程序部署和李洪根的一篇文章,然后加上自己的亲身体会,把整个SQL和Asp.net(vb.net)一起打包的全过程写一下。
打包,并自动安装SQL数据库. 修正了MVP李洪根".NET平台下WEB应用程序的部署(安装数据库和自动配置)"中的osql用法错误,已测试通过。
详细介绍ADO.NET平台下WEB应用程序的部署(安装数据库和自动配置),适合初学者
1. 打开VS.NET2005。 2.在“文件”菜单上指向“新建项目”。 3. 在“新建项目”对话框中,选择“项目类型”窗格中的”其他项目类型”中的“安装和部署”,然后选择“模板”窗格中的“安装项目”。在“名称”框中...
SQL数据库的打包部署安装 目的:在客户端服务器上”附加数据库文件”
用于程序打包部署说明。
在快速了解了C#以及.NET如何工作之后,本书深入研究了.NET Standard 2.0类库,其中包括打包和部署自己的库,以及使用通用库来处理集合,性能,监视,序列化等主题。文件,数据库和加密。本书的最后一部分演示了可以...
免费面积分 C# SQL (.mdb) 打包部署安装
个人整理.NET Web应用程序打包为安装文件,可设置安装过程是否新建数据库,以程序安装的方式替代部署的过程
将 ASP.NET 2.0 应用程序服务配置为使用 SQL Server 2000 或 SQL Server 2005 ASP.NET 2.0 中的数据源控件 使用 ASP.NET 2.0 ObjectDataSource 控件 ASP.NET 2.0 的内部变化 使用SQL Cache Dependency 代替 ...
但是,这样制作的安装程序,只是将Web页和ASP.NET程序编译的DLL文件安装到目标机器的IIS目录,对于一般的应用程序是可以的(比如用Access数据库,可以一起打包到安装程序中);如果数据库是SQL SERVER,需要在部署...
个人整理.NET Web应用程序打包为安装文件,可设置安装过程是否新建数据库,以程序安装的方式替代部署的过程
第2章 .NET实践领域 2.1 从内部挖掘 2.1.1 技术债 2.1.2 缺陷跟踪系统 2.1.3 反思分析 2.1.4 前瞻性分析 2.2 应用程序生命周期管理 2.3 设计模式和开发指南 2.3.1 .NET设计规范 2.3.2 微软的模式和实践小组 2.3.3 ...
● 打包和部署ASP.NET应用程序的方法 ● 快速、逻辑地检索、更新和删除数据 本书读者对象 本书适合于有一些ASP.NET基础知识的学习者以及准备迁移到ASP.NET 2.0的有经验的程序员和开发人员。 目录回到顶部↑ 第1...
然后讲解5个项目的开发实例,每个项目均遵循“需求分析→开发规划→数据库设计及实现→各模块界面设计及功能实现→打包部署”的开发思路做深入讲解,详尽剖析大量源代码,适时讲解开发技巧,从而增长读者的开发阅历...
通过使用Microsoft Visual Studio实现安装部署,最终打包成.exe安装程序(可以是winForm也可以是asp.net web应用程序),还讲解了如何自动安装SQL SERVER并且安装应用程序的数据库。 资源包括: 1、Microsoft Visual...
如果你安装了VSS 6,也需要再安装一次VSS 6C,否则在VS.Net环境中将源代码加入到VSS数据库中将会出现错误。 二、 创建空的SourceSafe数据库在开始工作之前,需要建立一个空的SourceSafe数据库,来存放源代码控制数据...
然后讲解5个项目的开发实例,每个项目均遵循“需求分析→开发规划→数据库设计及实现→各模块界面设计及功能实现→打包部署”的开发思路做深入讲解,详尽剖析大量源代码,适时讲解开发技巧,从而增长读者的开发阅历...
五、下列ASP.NET语句( )正确地创建了一个与SQL Server数据库的连接。 A.SqlConnection con1 = new Connection(“Data Source = localhost; Trusted_Connection =Yes; Initial Catalog = myDB”); B.SqlConnection ...