internal void AddQueryParameter(QueryParameter p) { string name = "p" + GetNextParamIndex().ToString(); // SQL语句中拼入参数占位符 _sqlBuidler.Append(ParaNameBuilder.GetPlaceholder(name)); // 参数集合中添加命令参数 AddParameter(name, p.Value); }
/// <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()); } }
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()); }