예제 #1
0
 /// <summary>Extension pour surcharger la méthode <see cref="OracleParameterCollection.AddRange(Array)"/> afin de simplifier le code lors de l'ajout de paramètres à un <see cref="OracleCommand.Parameters"/></summary>
 public static void AddRange(this OracleParameterCollection collection, params OracleParameter[] range)
 {
     collection.AddRange(range);
 }
예제 #2
0
        /// <summary>
        /// 执行存储过程
        /// </summary>
        /// <param name="connectionString">数据库连接</param>
        /// <param name="spName">存储过程名</param>
        /// <param name="paramNameValues">传入的参数值对</param>
        /// <param name="returnParameters">返回执行参数集合</param>
        /// <returns></returns>
        public T Execute4SP <T>(OracleConnection connection, string spName, Dictionary <string, object> paramNameValues, out OracleParameterCollection returnParameters)
        {
            // 0:检查参数

            if (connection == null)
            {
                throw new Exception("Oracle连接为空");
            }
            if (string.IsNullOrEmpty(spName) == true)
            {
                throw new ArgumentException("param spName is null or empty");
            }

            T retVal = default(T);//返回值


            // 得到该存储过程的参数列表,没有对参数传值,也需要查找存储过程参数列表

            // 该集合中的元素即为Command中的参数
            OracleParameter[] tmpParams = OracleHelperParameterCache.GetSpParameterSet(connection, spName);

            // 1:无参数或者采用默认参数的处理
            if (paramNameValues == null || paramNameValues.Count < 1)
            {
                // 调用重载函数
                retVal = Execute <T>(connection, CommandType.StoredProcedure, spName, null);

                // 输出执行参数集合
                returnParameters = new OracleParameterCollection();
                returnParameters.AddRange(tmpParams);

                // 返回值

                return(retVal);
            }

            // 2:有参数值传入的处理

            // 2.1 支持对参数名大小写忽略

            // 增加一个替代者 为参数列表

            Dictionary <string, object> nameValues = new Dictionary <string, object>();

            foreach (KeyValuePair <string, object> item in paramNameValues)
            {
                nameValues.Add(item.Key.Trim().ToUpper(), item.Value);
            }

            // 2.2用替代者给参数集合赋值,根据参数名与键名关联
            foreach (OracleParameter item in tmpParams)
            {
                string paraName = item.ParameterName.Trim().ToUpper();

                if (nameValues.ContainsKey(paraName) == false)
                {
                    continue;// 没有完全匹配,继续
                }

                // 给命令参数赋值,对null和string.Empty转换为DBNull.Value
                object tmpValue = nameValues[paraName];
                item.Value = tmpValue ?? DBNull.Value;

                if (tmpValue is string)
                {
                    if (string.IsNullOrEmpty((string)tmpValue))
                    {
                        item.Value = DBNull.Value;
                    }
                    //各个页面自行过滤 by qiubaosheng 2011-01-24
                    //else
                    //{
                    //    item.Value = ((string)tmpValue).Replace("'",string.Empty).Trim();
                    //}
                }
            }

            // 2.2 善后处理,移除所有替代者的所有元素,避免冲突
            nameValues.Clear();
            nameValues = null;

            // 2.3 调用重载函数
            retVal = Execute <T>(connection, CommandType.StoredProcedure, spName, tmpParams);

            // 2.4 输出命令执行后的参数列表
            returnParameters = new OracleParameterCollection();
            returnParameters.AddRange(tmpParams);

            // 返回值

            return(retVal);
        }