ImageVerifierCode 换一换
格式:DOC , 页数:13 ,大小:42KB ,
资源ID:4744121      下载积分:5 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/4744121.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(C#执行存储过程的简化-.NET教程-C#语言.doc)为本站上传会员【二***】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

C#执行存储过程的简化-.NET教程-C#语言.doc

1、· C#执行存储过程的简化-.NET教程,C#语言 · 来源:作者: 发布时间:2007-12-26 10:42:08 · 域名注册 o 8年专业域名注册经验 o com域名59元 虚拟主机 o 提供国际CDN流量,可免备案 o 超强控制面板,可开子站点 VPS主机 o 全国十余家优质机房可选 o 独立操作系统,无限开站点 下面的方法是我在实际研发中摸索出来的,能在非常大程度上简化调用存储过程的代码。 首先来看一下c#调用存储过程的一般过程: 1、打开数据库连接sqlconnection; 2、生成一个sqlcommand; 3、向命令

2、对象填充参数; 4、执行存储过程; 5、关闭连接; 6、其他操作。 我这里讲的主要是简化第3步操作,最终在调用存储过程的时候只需要传递存储过程的名字和相应的参数值。调用示例如下: dbaccess.run("p_am_deletefile", new object[]{loginid, request.userhostaddress, fileid}); 由于在填充参数的时候必须要两个值,一个是参数的名字,一个是参数的值。参数值是由外部传入的,不用考虑;而参数名称是和存储过程相关的东西,应该能由存储过程名称来确定而不用每次调用的时候写上一遍。对于这个问题,如果能

3、将存储过程的参数保存到一个全局的地方,那么在调用存储过程的时候只要能根据存储过程的名字去索引就能了。具体实现的时候我是将这些信息保存在数据库访问组件里面,采用名字/值对的方式。代码如下: public class infotable : nameobjectcollectionbase { public object this[string key] { get { return(this.baseget(key)); } set { this.baseset(key, value); } } } 。。。。。。 protected

4、 static infotable procinfotable = new infotable(); 。。。。。。 public static infotable procinfotable { get { return procinfotable; } } 这样的话,在实际调用存储过程的时候就只需要去查这张表就能知道存储过程的参数名了。实现代码如下: public datatable run(string procname, object[] parms, ref int retvalue) { string[] paraminfo = (

5、string[])(procinfotable[procname]); if (paraminfo == null) { errorinfo.seterrorinfo("未取得" + procname + "的参数!"); return null; } bool bopened = (dbconn.state == connectionstate.open); if (!bopened && !connect()) { return null; } dataset ds = new dataset(); try { sqlcomm

6、and cmd = new sqlcommand(procname, dbconn); mandtype = commandtype.storedprocedure; for (int i = 0; i < parms.length && i < paraminfo.length; ++i) { cmd.parameters.add(new sqlparameter(paraminfo[i], parms[i])); } sqlparameter parmsr = new sqlparameter("return", sqldbtype.int); parm

7、sr.direction = parameterdirection.returnvalue; cmd.parameters.add(parmsr); sqldataadapter adp = new sqldataadapter(cmd); adp.fill(ds); retvalue = (int)(cmd.parameters["return"].value); } catch (exception ex) { errorinfo.seterrorinfo(ex.message); retvalue = -1; } if (!bope

8、ned) close(); if (ds.tables.count > 0) return ds.tables[0]; else return null; } 能看出,每个存储过程的参数列表存储为了一个string[]。接下来的工作就是将系统里头许多的存储过程的参数填充到表procinfotable中。我所用的数据库是sql server 2000,下面给出一个存储过程来解决这个烦人的问题: create procedure dbo.p_am_procinfo ( @procname t_str64 --存储过程的名字 ) as be

9、gin set nocount on if @procname = begin select name as procname from sysobjects where substring(sysobjects.name, 1, 5) = p_am_ end else begin select syscolumns.name as paramname from sysobjects, syscolumns where sysobjects.id = syscolumns.id and sysobjects.name = @procname

10、 order by colid end end 这个存储过程有两个作用,在没有传递存储过程的名字的时候,该存储过程返回所有以”p_am_”开头的存储过程的名字;在传入了相应的存储过程名字后,该存储过程返回该存储过程的参数列表。这样一来,我们在程式开始的地方就能将系统里的存储过程参数列表取出来并保存到数据库访问组件的procinfotable属性中了。具体代码如下: span.dbaccess dbaccess = new span.dbaccess(); // //构造取存储过程的参数表 // span.dbaccess.procinfotable

11、["p_am_procinfo"] = new string[]{"@procname"}; // //取得其他存储过程列表 // datatable dt = dbaccess.run("p_am_procinfo", new object[]{""}); if (dt == null || dt.rows.count <= 0) { return; } // //取得其他存储过程的参数表 // foreach (datarow dr in dt.rows) { datatable dtparams = dbaccess.run

12、"p_am_procinfo", new object[]{dr["procname"]}); if (dtparams != null) { string[] paraminfo = new string[dtparams.rows.count]; for (int i = 0; i < dtparams.rows.count; ++i) paraminfo[i] = dtparams.rows[i]["paramname"].tostring(); span.dbaccess.procinfotable[dr["procname"].tostring()] =

13、 paraminfo; } } 至此,全部技术细节介绍完毕。另外,数据库访问对象的几个接口函数也一并给出: //打开、关闭数据库连接 public bool connect(string strconn) public bool connect() public bool close() //执行sql命令(只有一个int返回) public int exec(string procname, object[] parms) public int exec(string sql) //运行(返回一个datatable) publi

14、c datatable run(string procname, object[] parms, ref int retvalue) public datatable run(string procname, object[] parms) public datatable run(string sql) //分页查询(页号从1开始,返回一个datatable) public datatable pagequery ( string selectcmd, int pagesize, int pagenumber ) C#调用存储过程的方法

15、 /数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库. public static string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;   ///

/// 执行存储过程,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Clo

16、se ) ///

/// 存储过程名 /// 存储过程参数 /// SqlDataReader public static SqlDataReader RunProcedure(string storedProcName, IDataParameter[] parameters) {

17、 SqlConnection connection = new SqlConnection(connectionString); SqlDataReader returnReader; connection.Open(); SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters); command.CommandType = CommandType.StoredProcedu

18、re; returnReader = command.ExecuteReader(CommandBehavior.CloseConnection); return returnReader;   }     ///

/// 执行存储过程 /// /// 存储过程名 /// 存储过程参数 /// DataSet结果中的表名 /// DataSet public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName) { using (SqlConnection connection = new SqlConn

20、ection(connectionString)) { DataSet dataSet = new DataSet(); connection.Open(); SqlDataAdapter sqlDA = new SqlDataAdapter(); sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);

21、 sqlDA.Fill(dataSet, tableName); connection.Close(); return dataSet; } } public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName, int Times) { using (SqlConnectio

22、n connection = new SqlConnection(connectionString)) { DataSet dataSet = new DataSet(); connection.Open(); SqlDataAdapter sqlDA = new SqlDataAdapter(); sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName,

23、parameters); sqlDA.SelectCommand.CommandTimeout = Times; sqlDA.Fill(dataSet, tableName); connection.Close(); return dataSet; } }     ///

/// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值)

24、 ///

/// 数据库连接 /// 存储过程名 /// 存储过程参数 /// SqlCommand private static SqlCommand BuildQueryCommand(SqlConnection connect

25、ion, string storedProcName, IDataParameter[] parameters) { SqlCommand command = new SqlCommand(storedProcName, connection); command.CommandType = CommandType.StoredProcedure; foreach (SqlParameter parameter in parameters) {

26、 if (parameter != null) { // 检查未分配值的输出参数,将其分配以DBNull.Value. if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) && (parameter.Value == null))

27、 { parameter.Value = DBNull.Value; } command.Parameters.Add(parameter); } }   return command; }   ///

/// 执行存储过程,返回Output输出参数值 /

28、//

/// 存储过程名 /// 存储过程参数 /// object public static object RunProcedure(string storedProcName, IDataParameter[] paramenters) { using (SqlConnecti

29、on connection = new SqlConnection(connectionString)) { connection.Open(); SqlCommand command = BuildQueryCommand(connection, storedProcName, paramenters); command.ExecuteNonQuery(); object obj=command.Parameters["@Outpu

30、t_Value"].Value; //@Output_Value和具体的存储过程参数对应 if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) { return null; } else { return obj;

31、 } } }   ///

/// 执行存储过程,返回影响的行数 /// /// 存储过程名 /// 存储过程参数 /// 影响的行数 ///

32、> public static int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected) { using (SqlConnection connection = new SqlConnection(connectionString)) { int result; connection.Open();

33、 SqlCommand command = BuildIntCommand(connection, storedProcName, parameters); rowsAffected = command.ExecuteNonQuery(); result = (int)command.Parameters["ReturnValue"].Value; //Connection.Close(); return result;

34、 } }   ///

/// 创建 SqlCommand 对象实例(用来返回一个整数值) /// /// 存储过程名 /// 存储过程参数 /// SqlCommand 对象实例 private stati

35、c SqlCommand BuildIntCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters) { SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters); command.Parameters.Add(new SqlParameter("ReturnValue", SqlDbType.Int, 4, ParameterDirection.ReturnValue, false, 0, 0, string.Empty, DataRowVersion.Default, null)); return command; }   (此文档部分内容来源于网络,如有侵权请告知删除,文档可自行编辑修改内容,供参考,感谢您的配合和支持) 编辑版word

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服