Enterprise Library 2.0 -- Data Access Application Block (补充)

      前几天一位热心的朋友询问如何在DataAccess Application Block中将参数单独写成一个方法,以方便频繁调用一些存储过程,也可以将这些参数装入缓存以提高程序执行效率,下面将实现该功能的代码贴出来,希望对正在研究这方面知识的朋友有所帮助.

         /// <summary>
        
/// 该方法用于返回一个存储过程的参数数组
        
/// 从而方便了我们在程序中反复调用
        
/// 而且我们可以将返回的参数数组装入缓存,提高程序执行效率
        
/// </summary>
        
/// <param name="db">数据库连接</param>
        
/// <param name="spName">存储过程名称</param>
        
/// <returns>返回参数数组</returns>

         public  DbParameter[] GetDBCommandParameters(Database db ,  string  spName)
        
{
            
//建立一个存储过程的DBCommand
            DbCommand dbcomm = db.GetStoredProcCommand(spName);
            
//根据字面意思可以看到执行该方法是发现DBCommand的参数,即得到该DBCommand的参数
            db.DiscoverParameters(dbcomm);
            
//测试了一下,不管存储过程有没有返回值,在这个参数数组的0位置都是一个@return_value参数,奇怪,将其移出
            dbcomm.Parameters.RemoveAt(0);
            
//定义一个新的参数数组,并将DBCommand中的参数复制到该数组中
            DbParameter[] result = new DbParameter[dbcomm.Parameters.Count];
            dbcomm.Parameters.CopyTo(result,
0);

            
//将参数的初值设为空
            foreach (DbParameter dp in result)
            
{
                dp.Value 
= DBNull.Value;
            }


            
return result;
        }


然后我们在写一个给参数数组赋值的方法,如下:

         /// <summary>
        
/// 对参数数组赋值
        
/// </summary>
        
/// <param name="commandParameters">参数数组</param>
        
/// <param name="parameterValues">对应值数组</param>

         public   void  AssignParameters(DbParameter[] commandParameters,  object [] parameterValues)
        
{
            
if ((commandParameters == null|| (parameterValues == null))
            
{
                
return;
            }


            
if (commandParameters.Length != parameterValues.Length)
            
{
                
throw new ArgumentException("参数数组长度不匹配!");
            }


            
for (int i = 0, j = commandParameters.Length; i < j; i++)
            
{
                commandParameters[i].Value 
= parameterValues[i];
            }



        }


然后我们就可以在程序中按照如下方法调用存储过程了:

        [TestMethod]
        
public   void  SelectPersonBySex()
        
{
            
string sex = "";

            
//创建默认的数据库实例
            Database db = DatabaseFactory.CreateDatabase();
            
string spName = "SelectPersonBySex";

            
//DbCommand dbcomm = db.GetStoredProcCommand(spName);

            
//得到该存储过程的参数数组
            DbParameter[] parameters = this.GetDBCommandParameters(db, spName);
            
object[] strValues = new object[] { sex };
            
//对参数数组赋值
            this.AssignParameters(parameters, strValues);

            DataSet ds 
= db.ExecuteDataSet(spName, parameters);

            Assert.AreEqual(ds.Tables[
0].Rows.Count,1);
        }
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值