c#中自动配置存储过程所需参数

以前在c#中调用带参数的存储过程,每次都是自己一个一个的去配置参数,有时候参数多了配置起来比较麻烦。
        这不,今天又碰到了同样的麻烦了。
        想呀想,怎么才能够偷懒呢?
                 让程序自动匹配参数,哈哈
----------------------------------------------------------------------
         SqlServer中有个这样的存储过程 sp_sproc_columns ,她可以获取单个存储过程或者用户自定义函数的列信息。我今天就用她来获取存储过程的参数信息(用户自定义函数的我在这里就不写了)。
         sp_sproc_columns有6个可写可不写的参数。因为我是要查询指定存储过程的参数,所以在调用她的时候还得带上存储过程名,否则她会将当前数据库里所有的存储过程和自定义函数的信息都查询出来,这样太浪费时间了。
      sp_sproc_columns取得的结果是一个数据集,里面有一个列名叫RETURN_VALUE的参数,我们在设置参数的时候需要把它过滤,因为它代表的是存储过程的返回值。其它参数就都是存储过程所需要配置的参数了。在这里需要注意的是参数的列类型 COLUMN_TYPE,一般情况下只会出现3种值,即RETURN_VALUE的值为5,INPUT参数的值为1,Output参数的值为2。在配置参数的时候:1、首先需要排除将@RETURN_VALUE,2、Output参数的ParameterDirection类型设置要为Output。
下面我将展示我的c#代码,欢饮各位同行来与我探讨。
如有不完善的地方欢迎指教!
 
C#代码:
        /// <summary>
        /// 获取存储过程的参数列表
        /// </summary>
        /// <param name="proc_Name">存储过程名称</param>
        /// <returns>DataTable</returns>
        private static DataTable GetParameters(string proc_Name)
        {
            SqlCommand comm = new SqlCommand("dbo.sp_sproc_columns_90", new SqlConnection(SqlHelper.ConnectionStringMBCheckoutPayPal));
            comm.CommandType = CommandType.StoredProcedure;
            comm.Parameters.AddWithValue("@procedure_name", (object)proc_Name);
            SqlDataAdapter sda = new SqlDataAdapter(comm);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            return dt;
        }
        /// <summary>
        /// 为 SqlCommand 添加参数及赋值
        /// </summary>
        /// <param name="comm">SqlCommand</param>
        /// <param name="paraValues">参数数组(必须遵循存储过程参数列表的顺序)</param>
        private static void AddInParaValues(SqlCommand comm, params object[] paraValues)
        {
            comm.Parameters.Add(new SqlParameter("@RETURN_VALUE", SqlDbType.Int));
            comm.Parameters["@RETURN_VALUE"].Direction = ParameterDirection.ReturnValue;
            if (paraValues != null)
            {
                DataTable dt = GetParameters(comm.CommandText);
                int i = 0;
                foreach (DataRow row in dt.Rows)
                {
                    string key = row[3].ToString();
                    if (key != "@RETURN_VALUE")
                    {
                        int value = int.Parse(row[4].ToString());
                        if (value == 1)
                        {
                            comm.Parameters.AddWithValue(key, paraValues[i]);
                        }
                        else if (value == 2)//value为2则是输出参数
                        {
                            comm.Parameters.AddWithValue(key, paraValues[i]).Direction = ParameterDirection.Output;
                            //comm.Parameters[key].Direction = ParameterDirection.Output;
                        }
                        i++;
                    }
                }
            }
        }

本文出自 “工作、学习笔记” 博客,请务必保留此出处http://maikou.blog.51cto.com/1018364/226607

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值