Beispiel #1
0
        /// <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());
        }
Beispiel #2
0
        /// <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());
        }
Beispiel #3
0
        /// <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()));
        }
Beispiel #4
0
        /// <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()));
        }
Beispiel #5
0
        /// <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());
        }