(免费提供)执行存储过程函数 ExecuteProcedure ( ........)
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




