电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 在线教程-> 数据库
部署安装时写入SQL SERVER和Web.config-.NET教程,数据库应用
作者:网友供稿 点击:18
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
在.net平台下,部署 web 解决方案是比较方便的。我们可以利用visual studio.net 2003添加一个web安装项目,在部署的“文件系统编辑器”中添加项目的主输出和内容文件,非常简易地完成安装程序的制作。

    但是,这样制作的安装程序,只是将web页和asp.net程序编译的dll文件安装到目标机器的iis目录,对于一般的应用程序是可以的(比如用access数据库,可以一起打包到安装程序中);如果数据库是sql server,需要在部署的时候一并安装数据库,安装程序的制作就会复杂一些,需要我们自定义安装程序类。在安装程序类中执行sql脚本并将连接字符串写入web.config。

l 安装数据库

微软msdn上介绍过在部署应用程序的时候建立数据库。如:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vsintro7/html/vxwlkwalkthroughusingcustomactiontocreatedatabaseduringinstallation.asp

这种方法是创建一个安装程序类,在安装程序类中调用ado.net执行sql 语句(sql语句放在一个文本文件中)来创建数据库。

 

但是,这种方法有一个问题,如果用sql server2000生成了所有建表、视图、存储过程的一个脚本文件,用ado.net来执行这个脚本文件,就会因为脚本中有许多“go”语句而出现错误。当然,我们可以把“go”替换成换行符,利用ado.net一条条执行sql 语句。很显然,这样的效率比较低。

 

最好的办法是调用osql执行脚本。(或者创建一个数据库项目的cmd文件,而cmd文件建立数据库的时候也是调用的osql)。

using system;
using system.collections;
using system.componentmodel;
using system.configuration.install;
using system.data.sqlclient;
using system.io;
using system.reflection;
using system.diagnostics;
using system.xml;

namespace dbcustomaction
{
/// <summary>
/// dbcustomaction 的摘要说明。
/// </summary>
[runinstaller(true)]
public class dbcustomaction : system.configuration.install.installer
{
/// <summary>
///@author:overred
/// </summary>
private system.componentmodel.container components = null;

public dbcustomaction()
{
// 该调用是设计器所必需的。
initializecomponent();

// todo: 在 initializecomponent 调用后添加任何初始化
}

/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.dispose();
}
}
base.dispose( disposing );
}


#region 组件设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void initializecomponent()
{
components = new system.componentmodel.container();
}
#endregion

#region custom setup

 

private void executesql(string connstring,string databasename,string sql)
{
sqlconnection conn=new sqlconnection(connstring);
sqlcommand cmd=new sqlcommand(sql,conn);
conn.open();
cmd.connection.changedatabase(databasename);
try
{
cmd.executenonquery();
}
catch(exception e)
{
streamwriter w=new streamwriter(@"e:\\log.txt",true);
w.writeline("===in executesql======");
w.writeline(e.tostring());
w.close();
}
finally
{
conn.close();
}
}

public override void install(idictionary statesaver)
{
createdb();
updateconfig();
}

private void createdb()
{
try
{
string connstring=string.format("server={0};user id={1};password={2}",this.context.parameters["server"],this.context.parameters["user"],this.context.parameters["pwd"]);

//根据输入的数据库名称建立数据库
executesql(connstring,"master","create database "+this.context.parameters["dbname"]);

//调用osql执行脚本
string cmd=string.format(" -s{0} -u{1} -p{2} -d{3} -i{4}db.sql",this.context.parameters["server"],this.context.parameters["user"],this.context.parameters["pwd"],this.context.parameters["dbname"],this.context.parameters["targetdir"]);
system.diagnostics.process sqlprocess=new process();
sqlprocess.startinfo.filename="osql.exe";
sqlprocess.startinfo.arguments=cmd;
sqlprocess.startinfo.windowstyle=processwindowstyle.hidden;
sqlprocess.start();
sqlprocess.waitforexit();//等待执行
sqlprocess.close();

//删除脚本文件
system.io.fileinfo sqlfileinfo=new fileinfo(string.format("{0}db.sql",this.context.parameters["targetdir"]));
if(sqlfileinfo.exists)
sqlfileinfo.delete();
}
catch(exception e)
{
streamwriter w=new streamwriter(@"e:\log.txt",true);
w.writeline("===in install======");
w.writeline(e.tostring());
w.close();
}
}

private void updateconfig()
{
try
{
//将连接字符串写入web.config
system.io.fileinfo fileinfo=new fileinfo(string.format("{0}web.config",this.context.parameters["targetdir"]));

if(!fileinfo.exists)
throw new installexception("cant find the web.config");

xmldocument doc=new xmldocument();
doc.load(fileinfo.fullname);
bool foundit=false;

string connstring=string.format("server={0};database={1};user id={2};password={3}",this.context.parameters["server"],this.context.parameters["dbname"],this.context.parameters["user"],this.context.parameters["pwd"]);

string encs=securityhelper.encryptdbconnectionstring(connstring);

xmlnode no=doc.selectsinglenode("//appsettings/add[@key=connstring]");
if(no!=null)
{
no.attributes.getnameditem("value").value=encs;
foundit=true;
}

if(!foundit)
throw new installexception("cant find the connstring setting ");
doc.save(fileinfo.fullname);
}
catch(exception e)
{
streamwriter w=new streamwriter(@"e:\log.txt",true);
w.writeline("===in updata connstring=tjtj=====");
w.writeline(e.tostring());
w.writeline(e.stacktrace);
w.close();
}
}

#endregion
}
}

转自:动态网站制作指南 | www.knowsky.com

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·数据库开发个人总结(ADO.NET小结)-.NET教程,数据库应用
·怎么由DataSet将数据导入Excel?-.NET教程,数据库应用
·动态创建SQL Server数据库、表、存储过程-ASP教程,数据库相关
·Win32环境下动态链接库(DLL)编程原理-.NET教程,数据库应用
·封装的ADO.NET对数据库操作经典类-.NET教程,数据库应用
·在DataGridView中获得DataGridViewCheckBoxColumn的状态-ASP教程,数据库相关
·DataGrid使用心得(附大量代码)-ASP教程,数据库相关
·用代码创建DataGrid的多链接及checkbox事件响应-.NET教程,数据库应用
·ADO.NET 的最佳实践技巧-.NET教程,数据库应用
·转载: 用纯ASP代码实现图片上传并存入数据库中

最新文章
·根据数据表中数据,生成Powerpoint幻灯片-ASP教程,数据库相关
·DataGrid中的按钮反选事件与NamingContainer(命名容器)-downmoon-ASP教程,数据库相关
·使用用VB处理MYSQL数据库中二进制数据问题-.NET教程,VB.Net语言
·关于DataGridView中如何接收处于编辑状态下的当前信息-ASP教程,数据库相关
·在DataGridView中获得DataGridViewCheckBoxColumn的状态-ASP教程,数据库相关
·.net下访问Access数据库需要注意的问题-.NET教程,Asp.Net开发
·ActiveMQ4.1+Spring2.0的POJO JMS方案(上)-.NET教程,数据库应用
·ASP.NET 2.0中直接将Access数据库导入到Excel文件中-.NET教程,Asp.Net开发
·NET(C#)连接各类数据库-集锦-.NET教程,C#语言
·ASP.NET2.0连接SQL Server数据库详解-.NET教程,Asp.Net开发


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号