CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

(免费提供)执行存储过程函数 ExecuteProcedure ( ........)

楼主xz_king(西煞魄工人)2003-09-02 18:41:28 在 .NET技术 / C# 提问

NOTES:"免费提供"   只是为了引起你的注意。  
   
  最近写了一个函数:专门执行存储过程用的。  
   
   
  public   class   ..............{  
  ///   <summary>  
  ///   执行存储过程  
  ///   </summary>  
  ///   <param   name="procedureName">存储过程名</param>  
  ///   <param   name="args">参数[存储过程名],[参数1],[值1],[参数2],[值2]...</param>  
  ///   <returns>返回结果集DataTable对象</returns>  
  public   DataTable   ExecuteProcedure(string   procedureName   ,   params   object[]   args){  
                    //   m_objConnection   已经定义过了,SqlConnection对象  
    SqlCommand   comm   =   m_objConnection.CreateCommand()   ;  
  SqlTransaction   myTrans   ;  
  comm.CommandType   =   CommandType.StoredProcedure   ;  
  comm.CommandText   =   procedureName   ;  
   
  for(int   index=0   ;   index   <   args.Length   ;   index++){  
  SqlParameter   param   =   new   SqlParameter(   )   ;  
  param.ParameterName   =   args[index].ToString()   ;  
  //param.DbType   =   DbType.Int32   ;  
  index++   ;  
  param.Value   =   args[index]   ;  
  comm.Parameters.Add(param)   ;  
  }  
   
  if(   m_objConnection.State   ==   ConnectionState.Closed   )    
  m_objConnection.Open()   ;  
  myTrans   =   m_objConnection.BeginTransaction()   ;  
  comm.Connection   =   m_objConnection   ;  
  comm.Transaction   =   myTrans   ;  
   
  SqlDataAdapter   adp   =   new   SqlDataAdapter(   comm   )   ;  
  DataTable   table   =   new   DataTable("DataTable")   ;  
   
  try{  
  adp.Fill(   table   )   ;  
  myTrans.Commit()   ;  
  }   catch   {  
  try{  
  myTrans.Rollback()   ;  
  }   catch   {  
  }  
  }   finally   {  
  if(   m_objConnection.State   !=   ConnectionState.Closed   )    
  m_objConnection.Close()   ;  
  }  
   
  adp.Dispose()   ;  
  myTrans.Dispose()   ;  
  comm.Dispose()   ;  
  return   table   ;  
  }  
  }  
  -----------------------------------------------------  
  使用方法:  
  如果有如下这样的存储过程:  
  CREATE   PROCEDURE   up_GetUser  
   
  --   参数部分  
  @UserID   INT   ,--   用户ID  
  as  
  select   *    
  from   user    
  where   id   =   @UserID  
  GO  
   
  -----------------------------------------------------  
  程序中只需:  
  DataTable   table   =   MyClass.ExecuteProcedure("up_GetUser","@UserID",1)  
  就得到了想要的结果。  
   
  -----------------------------------------------------  
  请高人指点一下,还有什么地方需要改进!   谢谢   。   不胜感激 问题点数:44、回复次数:7Top

1 楼carper(卡皮)回复于 2003-09-02 19:03:41 得分 11

如果这个存储过程有几个传出参数,你这个函数就困难了。  
  Top

2 楼colinmad()回复于 2003-09-02 22:01:39 得分 5

upTop

3 楼knightufp(try catch finally .)回复于 2003-09-02 22:10:29 得分 12

如果我的存储过程不是要返回数据,只是执行一些操作呢  
  如果我要返回几个参数呢?Top

4 楼cnlamar(无中生有)回复于 2003-09-02 22:25:08 得分 11

返回的东西做成数组的,如果是执行操作的返回执行成功与否的BOOLTop

5 楼xz_king(西煞魄工人)回复于 2003-09-03 08:24:36 得分 0

为了能适用于大部份存储过程(传入参数,返回结果集),就做到了现在这样。  
  我想如果要想定义有返回值的,应该用到:ref   了吧。  
  可是这个函数不好写(主要是为了通用)  
  xxxxxxxxx(string   procedureName   ,   ref   int   returnValue1   ,   ref   int   returnValue2   ,   params   object[]   args)[  
  ...  
  }  
  这么写还是不通用(只能用于有两个返回值的)  
   
  怎么样写一个更通用的呢?  
  Top

6 楼zhbname(赤澜)回复于 2003-09-03 10:51:29 得分 5

upTop

7 楼crocus(常)回复于 2003-09-24 17:41:21 得分 0

markTop

相关问题

  • 只有函数和扩展存储过程才能从函数内部执行。 ?
  • 怎样在存储过程或者函数中执行插入操作?
  • 能否让mssql定时执行一段存储过程或者函数?
  • 我在一个SQL Server的自定义函数中调用一个自定义的存储过程,执行此函数后发出如下提示:“只有函数和扩展存储过程才能从函数内部执行。
  • 挑战极限的SQL语句2--如何才能才自定义函数中执行SQL的存储过程
  • ORACLE 存储过程中count(ColumName)函数?
  • 悬赏存储过程或函数
  • 存储过程中的函数问题.
  • 如何执行sqlserver的存储过程?
  • 存储过程的执行问题?

关键词

  • 存储过程
  • 函数
  • 执行
  • executeprocedure
  • 参数
  • procedurename
  • comm
  • objconnection
  • 免费提供
  • 对象

得分解答快速导航

  • 帖主:xz_king
  • carper
  • colinmad
  • knightufp
  • cnlamar
  • zhbname

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo