示例#1
0
        internal void AddQueryParameter(QueryParameter p)
        {
            string name = "p" + GetNextParamIndex().ToString();

            // SQL语句中拼入参数占位符
            _sqlBuidler.Append(ParaNameBuilder.GetPlaceholder(name));

            // 参数集合中添加命令参数
            AddParameter(name, p.Value);
        }
示例#2
0
        /// <summary>
        /// 设置 IN 参数,参数名称格式要求:{parameterName}
        /// 例如:select * from t1 where rid in ( {parameterName} )
        /// </summary>
        /// <param name="name"></param>
        /// <param name="collection"></param>
        private void SetInArrayParameters(string name, ICollection collection)
        {
            //if( collection == null || collection.Count == 0 )
            //	throw new ArgumentNullException("collection");

            StringBuilder sb = new StringBuilder(128);

            // 优先检查 int[], Guid[] 类型,并转成SQL语句中的一部分
            // 因为这些强类型的数据本身是安全的,不存在注入,就不转换成命令参数。
            ArrayToString(collection, sb);

            if (sb.Length == 0)                 // 如果不是 int[], Guid[] ,就转换成命令参数

            {
                foreach (object obj in collection)
                {
                    string paraName = "x" + GetNextParamIndex().ToString();
                    this.AddParameter(paraName, obj);

                    if (sb.Length > 0)
                    {
                        sb.Append(',');
                    }

                    sb.Append(ParaNameBuilder.GetPlaceholder(paraName));
                }
            }

            if (sb.Length == 0)
            {
                sb.Append("NULL");
            }


            if (name == null)                           // 用于LINQ查询中的IN场景
            {
                _sqlBuidler.Append(sb.ToString());
            }

            else                                // 用于替换占位符场景
            {
                string placeholder = "{" + name + "}";
                _sqlBuidler.Replace(placeholder, sb.ToString());
            }
        }
示例#3
0
        private void SetInArrayParameter(string placeholder, ICollection collection)
        {
            StringBuilder sb = new StringBuilder(128);

            // 优先检查 int[], Guid[] 类型,并转成SQL语句中的一部分
            // 因为这些强类型的数据本身是安全的,不存在注入,就不转换成命令参数。
            CPQuery.ArrayToString(collection, sb);

            if (sb.Length == 0)                 // 如果不是 int[], Guid[] ,就转换成命令参数

            {
                foreach (object obj in collection)
                {
                    string name = "x" + (_paramIndex++).ToString();

                    DbParameter parameter = _command.CreateParameter();
                    parameter.ParameterName = ParaNameBuilder.GetParaName(name);
                    parameter.Value         = obj;
                    _command.Parameters.Add(parameter);

                    if (sb.Length > 0)
                    {
                        sb.Append(',');
                    }

                    sb.Append(ParaNameBuilder.GetPlaceholder(name));
                }
            }

            if (sb.Length == 0)
            {
                sb.Append("NULL");
            }

            _command.CommandText = _command.CommandText.Replace(placeholder, sb.ToString());
        }