Esempio n. 1
0
        /// <summary>
        /// 重建参数集合
        /// </summary>
        /// <param name="lstPrm"></param>
        /// <returns></returns>
        public virtual ParamList RebuildParamList(ref string sql, ParamList lstPrm)
        {
            ParamList     lstRet = new ParamList();
            StringBuilder newSql = new StringBuilder();
            Dictionary <string, DBParameter> dicPrm = new Dictionary <string, DBParameter>();

            foreach (DBParameter prm in lstPrm)
            {
                dicPrm[prm.ParameterName] = prm;
            }
            Queue <RebuildParamInfo> queStrPrm = FindAllParams(sql);
            DBParameter curPrm = null;

            RebuildParamInfo curprmInfo = null;

            if (queStrPrm.Count > 0)
            {
                curprmInfo = queStrPrm.Dequeue();
            }
            for (int i = 0; i < sql.Length; i++)
            {
                if (curprmInfo != null && curprmInfo.Index == i)
                {
                    if (dicPrm.TryGetValue(curprmInfo.ParamName, out curPrm))
                    {
                        string      pName  = "P" + lstRet.Count;
                        DBParameter newPrm = lstRet.AddNew(FormatParamKeyName(pName), curPrm.DbType, curPrm.Value, curPrm.Direction);
                        newPrm.ValueName = FormatValueName(pName);
                        newSql.Append(newPrm.ValueName);
                        i += curprmInfo.ParamName.Length - 1;

                        if (queStrPrm.Count > 0)
                        {
                            curprmInfo = queStrPrm.Dequeue();
                        }
                        continue;
                    }
                }
                newSql.Append(sql[i]);
            }
            sql = newSql.ToString();
            return(lstRet);
        }