




如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
编辑版word 编辑版word 编辑版word C#执行存储过程的简化-.NET教程,C#语言 来源:作者:发布时间:2007-12-2610:42:08 HYPERLINK"http://www.sudu.cn/domain"域名注册 8年专业域名注册经验 com域名59元 HYPERLINK"http://www.sudu.cn/webhosting"虚拟主机 提供国际CDN流量,可免备案 超强控制面板,可开子站点 HYPERLINK"http://www.sudu.cn/vps"VPS主机 全国十余家优质机房可选 独立操作系统,无限开站点 下面的方法是我在实际研发中摸索出来的,能在非常大程度上简化调用存储过程的代码。首先来看一下c#调用存储过程的一般过程:1、打开数据库连接sqlconnection;2、生成一个sqlcommand;3、向命令对象填充参数;4、执行存储过程;5、关闭连接;6、其他操作。我这里讲的主要是简化第3步操作,最终在调用存储过程的时候只需要传递存储过程的名字和相应的参数值。调用示例如下:dbaccess.run("p_am_deletefile",newobject[]{loginid,request.userhostaddress,fileid});由于在填充参数的时候必须要两个值,一个是参数的名字,一个是参数的值。参数值是由外部传入的,不用考虑;而参数名称是和存储过程相关的东西,应该能由存储过程名称来确定而不用每次调用的时候写上一遍。对于这个问题,如果能将存储过程的参数保存到一个全局的地方,那么在调用存储过程的时候只要能根据存储过程的名字去索引就能了。具体实现的时候我是将这些信息保存在数据库访问组件里面,采用名字/值对的方式。代码如下:publicclassinfotable:nameobjectcollectionbase{publicobjectthis[stringkey]{get{return(this.baseget(key));}set{this.baseset(key,value);}}}。。。。。。protectedstaticinfotableprocinfotable=newinfotable();。。。。。。publicstaticinfotableprocinfotable{get{returnprocinfotable;}}这样的话,在实际调用存储过程的时候就只需要去查这张表就能知道存储过程的参数名了。实现代码如下:publicdatatablerun(stringprocname,object[]parms,refintretvalue){string[]paraminfo=(string[])(procinfotable[procname]);if(paraminfo==null){errorinfo.seterrorinfo("未取得"+procname+"的参数!");returnnull;}boolbopened=(dbconn.state==connectionstate.open);if(!bopened&&!connect()){returnnull;}datasetds=newdataset();try{sqlcommandcmd=newsqlcommand(procname,dbconn);cmd.commandtype=commandtype.storedprocedure;for(inti=0;i<parms.length&&i<paraminfo.length;++i){cmd.parameters.add(newsqlparameter(paraminfo[i],parms[i]));}sqlparameterparmsr=newsqlparameter("return",sqldbtype.int);parmsr.direction=parameterdirection.returnvalue;cmd.parameters.add(parmsr);sqldataadapteradp=newsqldataadapter(cmd);adp.fill(ds);retvalue=(int)(cmd.parameters["return"].value);}catch(exceptionex){errorinfo.seterrorinfo(ex.message);retvalue=-1;}if(!bopened)close();if(ds.tables.count>0)returnds.tables[0];elsereturnnull;}能看出,每个存储过程的参数列表存储为了一个string[]。接下来的工作就是将系统里头许多的存

17****21
实名认证
内容提供者


最近下载