private IDataParameter ToDbParameter(DatabaseFunctionColumnDTO column, object value)
        {
            IDataParameter result = new SqlParameter();

            if (column.InputOutput == Enum_DatabaseFunctionParameterType.Input)
            {
                result.Direction = ParameterDirection.Input;
            }
            else if (column.InputOutput == Enum_DatabaseFunctionParameterType.Output)
            {
                result.Direction = ParameterDirection.Output;
            }
            else if (column.InputOutput == Enum_DatabaseFunctionParameterType.InputOutput)
            {
                result.Direction = ParameterDirection.InputOutput;
            }
            else if (column.InputOutput == Enum_DatabaseFunctionParameterType.ReturnValue)
            {
                result.Direction = ParameterDirection.ReturnValue;
            }
            result.ParameterName = column.ParameterName;
            result.DbType        = GetDbType(column);
            result.Value         = value == null ? DBNull.Value : value;
            return(result);
        }
        private List <DatabaseFunctionColumnDTO> ToDatabaseFunctionParameterDTO(DatabaseFunction cItem)
        {
            BizColumn bizColumn = new BizColumn();
            List <DatabaseFunctionColumnDTO> result = new List <DatabaseFunctionColumnDTO>();

            foreach (var column in cItem.DatabaseFunctionParameter)
            {
                var item = new DatabaseFunctionColumnDTO()
                {
                    ID            = column.ID,
                    DataType      = column.DataType,
                    Enable        = column.Enable,
                    ParameterName = column.ParamName,
                    DotNetType    = bizColumn.GetColumnDotNetType(column.DataType, false),
                    Order         = column.Order ?? 0,
                    InputOutput   = (Enum_DatabaseFunctionParameterType)column.InputOutput
                };

                result.Add(item);
            }
            return(result);
        }
 private DbType GetDbType(DatabaseFunctionColumnDTO column)
 {
     if (column.DataType == "bigint")
     {
         return(DbType.Int64);
     }
     else if (column.DataType == "binary")
     {
         return(DbType.Binary);
     }
     else if (column.DataType == "bit")
     {
         return(DbType.Boolean);
     }
     else if (column.DataType == "char")
     {
         return(DbType.String);
     }
     else if (column.DataType == "date ")
     {
         return(DbType.Date);
     }
     else if (column.DataType == "datetime")
     {
         return(DbType.DateTime);
     }
     else if (column.DataType == "decimal")
     {
         return(DbType.Decimal);
     }
     else if (column.DataType == "float")
     {
         return(DbType.Double);
     }
     else if (column.DataType == "int")
     {
         return(DbType.Int32);
     }
     else if (column.DataType == "money")
     {
         return(DbType.Decimal);
     }
     else if (column.DataType == "nchar")
     {
         return(DbType.StringFixedLength);
     }
     else if (column.DataType == "ntext")
     {
         return(DbType.String);
     }
     else if (column.DataType == "numeric")
     {
         return(DbType.Decimal);
     }
     else if (column.DataType == "nvarchar")
     {
         return(DbType.String);
     }
     else if (column.DataType == "smallint")
     {
         return(DbType.Int16);
     }
     else if (column.DataType == "text")
     {
         return(DbType.String);
     }
     else if (column.DataType == "uniqueidentifier")
     {
         return(DbType.Guid);
     }
     else if (column.DataType == "varchar")
     {
         return(DbType.String);
     }
     return(DbType.String);
 }
        //public FunctionResult GetDatabaseFunctionValue(DR_Requester resuester, int functionID, params object[] parameters)
        //{
        //    FunctionResult result = new FunctionResult();
        //    var databaseFunction = bizDatabaseFunction.GetDatabaseFunction(functionID);
        //    return GetDatabaseFunctionValue(resuester, databaseFunction, parameters);

        //}
        private FunctionResult GetDatabaseFunctionValue(DR_Requester resuester, DatabaseFunctionDTO databaseFunction, List <Tuple <string, object> > parameters = null)// params object[] parameters)
        {
            FunctionResult result = new FunctionResult();
            //if (parameters.Count() != databaseFunction.DatabaseFunctionParameter.Count(x => x.InputOutput != Enum_DatabaseFunctionParameterType.ReturnValue))
            //{
            //    result.Exception = new Exception("تعداد پارامترهای ارسالی و تابع یکسان نمیباشد");
            //    result.Result = null;
            //    return result;
            //}
            //else
            //{
            //if (databaseFunction.Type == Enum_DatabaseFunctionType.Function)
            //{

            //}
            //else
            //{

            //}
            int paramCount = 0;

            if (parameters != null)
            {
                paramCount = parameters.Count();
            }
            List <IDataParameter> paramList = new List <IDataParameter>();

            if (databaseFunction.Type == Enum_DatabaseFunctionType.Function)
            {
                if (paramCount < databaseFunction.DatabaseFunctionParameter.Count(x => x.InputOutput == Enum_DatabaseFunctionParameterType.Input))
                {
                    result.Exception = new Exception("تعداد پارامترهای ارسالی و تابع یکسان نمیباشد");
                    result.Result    = null;
                    return(result);
                }

                //    var indexer = 0;
                foreach (var column in databaseFunction.DatabaseFunctionParameter.Where(x => x.InputOutput == Enum_DatabaseFunctionParameterType.Input).OrderBy(x => x.Order))
                {
                    if (parameters != null && parameters.Any(x => x.Item1 == column.ParameterName))
                    {
                        paramList.Add(ToDbParameter(column, parameters.First(x => x.Item1 == column.ParameterName).Item2));
                    }
                    else
                    {
                        result.Exception = new Exception("پارامتر" + " " + column.ParameterName + " " + "مقداردهی نشده است");
                        result.Result    = null;
                        return(result);
                    }
                }
                return(GetDBFunctionValue(databaseFunction, paramList));
            }
            else
            {
                if (paramCount < databaseFunction.DatabaseFunctionParameter.Count(x => x.InputOutput == Enum_DatabaseFunctionParameterType.Input))
                {
                    result.Exception = new Exception("تعداد پارامترهای ارسالی و تابع یکسان نمیباشد");
                    result.Result    = null;
                    return(result);
                }
                DatabaseFunctionColumnDTO outputParameter      = null;
                DatabaseFunctionColumnDTO returnValueParameter = databaseFunction.DatabaseFunctionParameter.FirstOrDefault(x => x.InputOutput == Enum_DatabaseFunctionParameterType.ReturnValue);
                outputParameter = databaseFunction.DatabaseFunctionParameter.FirstOrDefault(x => x.InputOutput == Enum_DatabaseFunctionParameterType.InputOutput || x.InputOutput == Enum_DatabaseFunctionParameterType.Output);
                if (outputParameter == null)
                {
                    if (returnValueParameter != null)
                    {
                        outputParameter = returnValueParameter;
                    }
                    else
                    {
                        result.Exception = new Exception("این تابع خروجی ندارد!");
                        result.Result    = null;
                        return(result);
                    }
                }
                //List<Tuple<DatabaseFunctionColumnDTO, object>> columnsAndValues = new List<Tuple<DatabaseFunctionColumnDTO, object>>();
                //var indexer = 0;
                foreach (var column in databaseFunction.DatabaseFunctionParameter.Where(x => x.InputOutput != Enum_DatabaseFunctionParameterType.ReturnValue).OrderBy(x => x.Order))
                {
                    if (column.InputOutput != Enum_DatabaseFunctionParameterType.Output)
                    {
                        if (parameters != null && parameters.Any(x => x.Item1 == column.ParameterName))
                        {
                            paramList.Add(ToDbParameter(column, parameters.First(x => x.Item1 == column.ParameterName).Item2));
                        }
                        else
                        {
                            if (column.InputOutput == Enum_DatabaseFunctionParameterType.Input)
                            {
                                result.Exception = new Exception("پارامتر" + " " + column.ParameterName + " " + "مقداردهی نشده است");
                                result.Result    = null;
                                return(result);
                            }
                            else
                            {
                                paramList.Add(ToDbParameter(column, GetPropertyDefaultValue(column.DotNetType)));
                            }
                        }
                    }
                    else
                    {
                        //تاحالا پارامتری که output خالی باشه ندیدم پس این تیکه تست نشده
                        paramList.Add(ToDbParameter(column, DBNull.Value));
                    }
                }
                if (returnValueParameter != null)
                {
                    paramList.Add(ToDbParameter(returnValueParameter, DBNull.Value));
                }
                return(GetDBSPValue(databaseFunction, paramList, outputParameter.ParameterName));
            }

            //}
        }