Ejemplo n.º 1
0
 protected void GetSqlParams(SqlForeachParamsPolicy policy, IDataParameter[] parameters,
                             out IDataParameter[] feachParams, out IDataParameter[] reserveParams)
 {
     if (policy.IgnoreParams?.Count > 0)
     {
         var tempFeachParams   = new List <IDataParameter>(); //需要进行遍历的
         var tempReserveParams = new List <IDataParameter>(); //不需要进行遍历的
         foreach (var p in parameters)
         {
             if (policy.IgnoreParams.Contains(p.ParameterName))
             {
                 tempReserveParams.Add(p);
             }
             else
             {
                 tempFeachParams.Add(p);
             }
         }
         feachParams   = tempFeachParams.ToArray();
         reserveParams = tempReserveParams.ToArray();
     }
     else
     {
         feachParams   = parameters;
         reserveParams = new IDataParameter[0];
     }
 }
Ejemplo n.º 2
0
        protected string DoForeachNotKVSplit(ISqlPreExecutePolicyExecutorInfo info, SqlForeachParamsPolicy policy, string sql,
                                             IDataParameter[] feachParams, IDataParameter[] reserveParams, out IDataParameter[] outParams)
        {
            outParams = reserveParams;
            var tag = string.IsNullOrEmpty(policy.Tag) ? SqlConfigConst.SqlForeachParamsLabel : policy.Tag;

            if (policy.IsToSqlParam)
            {
                int    i = 0;
                string vname;
                IDictionary <string, object> dictParams = new Dictionary <string, object>();
                //对key-value进行拼接
                var strVals = feachParams.JoinToString(policy.Separator, l =>
                {
                    vname             = SqlConfigConst.ForeachParamsVNamePrefix + l.ParameterName + "_" + i++;
                    dictParams[vname] = l.Value;
                    return(policy.KPrefix + l.ParameterName + policy.KSuffix + policy.KVSeparator +
                           policy.VPrefix + SqlConfigConst.DBSymbol + vname + policy.VSuffix);
                });
                //合并SqlParameter
                outParams = _util.CombineDataParams(reserveParams,
                                                    _sqlParamCvt.DictionaryToDBParams(info.DB, dictParams));
                //替换到sql中
                sql = sql.Replace(tag, strVals);
            }
            else
            {
                //对key-value进行拼接
                var strVals = feachParams.JoinToString(policy.Separator,
                                                       l => policy.KPrefix + l.ParameterName + policy.KSuffix + policy.KVSeparator +
                                                       policy.VPrefix + l.Value + policy.VSuffix);
                //替换到sql中
                sql = sql.Replace(tag, strVals);
            }
            return(sql);
        }
Ejemplo n.º 3
0
        protected string DoForeachKVSplit(ISqlPreExecutePolicyExecutorInfo info, SqlForeachParamsPolicy policy, string sql,
                                          IDataParameter[] feachParams, IDataParameter[] reserveParams, out IDataParameter[] outParams)
        {
            outParams = reserveParams;
            var  tag    = string.IsNullOrEmpty(policy.Tag) ? SqlConfigConst.SqlForeachParamsLabel : policy.Tag;
            var  ksb    = new StringBuilder();
            var  vsb    = new StringBuilder();
            bool bSplit = false;

            if (policy.IsToSqlParam)
            {
                int    i = 0;
                string vname;
                IDictionary <string, object> dictParams = new Dictionary <string, object>();

                foreach (var l in feachParams)
                {
                    if (bSplit)
                    {
                        ksb.Append(policy.KSeparator);
                        vsb.Append(policy.VSeparator);
                    }
                    else
                    {
                        bSplit = true;
                    }
                    vname             = SqlConfigConst.ForeachParamsVNamePrefix + l.ParameterName + "_" + i++;
                    dictParams[vname] = l.Value;
                    ksb.Append(policy.KPrefix + l.ParameterName + policy.KSuffix);
                    vsb.Append(policy.VPrefix + SqlConfigConst.DBSymbol + vname + policy.VSuffix);
                }

                //合并SqlParameter
                outParams = _util.CombineDataParams(reserveParams,
                                                    _sqlParamCvt.DictionaryToDBParams(info.DB, dictParams));
                //替换到sql中
                sql = sql.Replace(tag + SqlConfigConst.SqlForeachKeyLabel, ksb.ToString());
                sql = sql.Replace(tag + SqlConfigConst.SqlForeachValueLabel, vsb.ToString());
            }
            else
            {
                foreach (var l in feachParams)
                {
                    if (bSplit)
                    {
                        ksb.Append(policy.KSeparator);
                        vsb.Append(policy.VSeparator);
                    }
                    else
                    {
                        bSplit = true;
                    }
                    ksb.Append(policy.KPrefix + l.ParameterName + policy.KSuffix);
                    vsb.Append(policy.VPrefix + l.Value + policy.VSuffix);
                }

                //替换到sql中
                sql = sql.Replace(tag + SqlConfigConst.SqlForeachKeyLabel, ksb.ToString());
                sql = sql.Replace(tag + SqlConfigConst.SqlForeachValueLabel, vsb.ToString());
            }
            return(sql);
        }