/// <summary> /// 生成函数执行 sql 语句 /// </summary> ///<param name="providerName">ADO.NET 数据库对象</param> /// <param name="dbFunctionType">函数类型</param> /// <param name="funcName">函数名词</param> /// <param name="keyValues">字典类型参数</param> /// <returns></returns> internal static string GenerateFunctionSql(string providerName, DbFunctionType dbFunctionType, string funcName, Dictionary <string, object> keyValues) { // 检查是否支持函数 DbProvider.CheckFunctionSupported(providerName, dbFunctionType); var stringBuilder = new StringBuilder(); stringBuilder.Append($"SELECT{(dbFunctionType == DbFunctionType.Table ? " * FROM" : "")} {funcName}("); if (keyValues != null && keyValues.Count > 0) { var i = 0; foreach (var key in keyValues.Keys) { stringBuilder.Append(FixSqlParameterPlaceholder(providerName, key)); // 处理最后一个参数逗号 if (i != keyValues.Count - 1) { stringBuilder.Append(", "); } i++; } } stringBuilder.Append("); "); return(stringBuilder.ToString()); }
/// <summary> /// 生成函数执行 sql 语句 /// </summary> /// <param name="providerName">ADO.NET 数据库对象</param> /// <param name="dbFunctionType">函数类型</param> /// <param name="funcName">函数名词</param> /// <param name="parameters">函数参数</param> /// <returns>sql 语句</returns> internal static string GenerateFunctionSql(string providerName, DbFunctionType dbFunctionType, string funcName, params DbParameter[] parameters) { // 检查是否支持函数 DbProvider.CheckFunctionSupported(providerName, dbFunctionType); parameters ??= Array.Empty <DbParameter>(); var stringBuilder = new StringBuilder(); stringBuilder.Append($"SELECT{(dbFunctionType == DbFunctionType.Table ? " * FROM" : "")} {funcName}("); // 生成函数参数 for (var i = 0; i < parameters.Length; i++) { var sqlParameter = parameters[i]; // 处理不同数据库的占位符 stringBuilder.Append(FixSqlParameterPlaceholder(providerName, sqlParameter.ParameterName)); // 处理最后一个参数逗号 if (i != parameters.Length - 1) { stringBuilder.Append(", "); } } stringBuilder.Append("); "); return(stringBuilder.ToString()); }
/// <summary> /// 生成函数执行 sql 语句 /// </summary> /// <param name="providerName">ADO.NET 数据库对象</param> /// <param name="dbFunctionType">函数类型</param> /// <param name="funcName">函数名词</param> /// <param name="parameters">函数参数</param> /// <returns>sql 语句</returns> internal static string GenerateFunctionSql(string providerName, DbFunctionType dbFunctionType, string funcName, params DbParameter[] parameters) { // 检查是否支持函数 DbProvider.CheckFunctionSupported(providerName, dbFunctionType); // 生成数据库表值函数 sql return(GenerateDbFunctionSql(providerName, dbFunctionType, funcName, parameters.Select(u => u.ParameterName).ToArray())); }
/// <summary> /// 生成函数执行 sql 语句 /// </summary> ///<param name="providerName">ADO.NET 数据库对象</param> /// <param name="dbFunctionType">函数类型</param> /// <param name="funcName">函数名词</param> /// <param name="model">参数模型</param> /// <returns>(string sql, DbParameter[] parameters)</returns> internal static string GenerateFunctionSql(string providerName, DbFunctionType dbFunctionType, string funcName, object model) { // 检查是否支持函数 DbProvider.CheckFunctionSupported(providerName, dbFunctionType); var modelType = model?.GetType(); // 处理字典类型参数 if (modelType == typeof(Dictionary <string, object>)) { return(GenerateFunctionSql(providerName, dbFunctionType, funcName, (Dictionary <string, object>)model)); } // 获取模型所有公开的属性 var properities = model == null ? Array.Empty <PropertyInfo>() : modelType.GetProperties(BindingFlags.Public | BindingFlags.Instance); // 生成数据库表值函数 sql return(GenerateDbFunctionSql(providerName, dbFunctionType, funcName, properities.Select(u => u.Name).ToArray())); }
/// <summary> /// 生成函数执行 sql 语句 /// </summary> ///<param name="providerName">ADO.NET 数据库对象</param> /// <param name="dbFunctionType">函数类型</param> /// <param name="funcName">函数名词</param> /// <param name="model">参数模型</param> /// <returns>(string sql, DbParameter[] parameters)</returns> internal static string GenerateFunctionSql(string providerName, DbFunctionType dbFunctionType, string funcName, object model) { // 检查是否支持函数 DbProvider.CheckFunctionSupported(providerName, dbFunctionType); var modelType = model?.GetType(); // 处理字典类型参数 if (modelType == typeof(Dictionary <string, object>)) { return(GenerateFunctionSql(providerName, dbFunctionType, funcName, (Dictionary <string, object>)model)); } // 获取模型所有公开的属性 var properities = model == null ? Array.Empty <PropertyInfo>() : modelType.GetProperties(BindingFlags.Public | BindingFlags.Instance); var stringBuilder = new StringBuilder(); stringBuilder.Append($"SELECT{(dbFunctionType == DbFunctionType.Table ? " * FROM" : "")} {funcName}("); for (var i = 0; i < properities.Length; i++) { var property = properities[i]; stringBuilder.Append(FixSqlParameterPlaceholder(providerName, property.Name)); // 处理最后一个参数逗号 if (i != properities.Length - 1) { stringBuilder.Append(", "); } } stringBuilder.Append("); "); return(stringBuilder.ToString()); }