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)); } //} }