Hello, I try to automate validations on BO's to avoid to send to sql engine invalid fields with numeric types (out of valid range)
I see that the BOM replaces the type of data on FieldNativeDbTypes (example: money as decimal).
Exist some method or anything that I can use to avoid to get schema from SQL?
If not exist anything that I missed out, I have to make on a base BO a property called OriginalType and put here the original values from sql to parse it correct.
On the example that I post below.... because I have money field serialized in BO as decimal, If I put 99999999999999999999 (nine x 20 times) as a decimal value it validate as OK, but when the BO try to save to SQL the column is money and SQL throws a error.
Thanks in advance.
Code that I try to use without sucess:decimal parsedValue = 0;
if (!decimal.TryParse(value.ToString(), out parsedValue)) { AddBrokenRule(field, "el valor del campo es incorrecto (no puede procesarse)"); return;}
switch (FieldNativeDbTypes[field]) { case (int)SqlDbType.BigInt: if (parsedValue < Int64.MinValue || parsedValue > Int64.MaxValue) AddBrokenRule(field, "el valor del campo es incorrecto (valido: -9223372036854775808 a 9223372036854775807)"); break;
case (int)SqlDbType.Int: if (parsedValue < Int32.MinValue || parsedValue > Int32.MaxValue) AddBrokenRule(field, "el valor del campo es incorrecto (valido: -2147483648 a 2147483647)"); break;
case (int)SqlDbType.Money: // !!THIS IS NOT USED BECAUSE BO TRANSLATEs MONEY TO DECIMAL ON PARTIAL (designer) !!! if (parsedValue < -922337203685 || parsedValue > 922337203685) AddBrokenRule(field, "el valor del campo es incorrecto (valido: -922337203685 a 922337203685)"); break;
case (int)SqlDbType.SmallInt: if (parsedValue < Int16.MinValue || parsedValue > Int16.MaxValue) AddBrokenRule(field, "el valor del campo es incorrecto (valido: -922337203685 a 922337203685)"); break;
case (int)SqlDbType.SmallMoney: if (parsedValue < -214748 || parsedValue > 214748) AddBrokenRule(field, "el valor del campo es incorrecto (valido: -922337203685 a 922337203685)"); break;
case (int)SqlDbType.TinyInt: if (parsedValue < byte.MinValue || parsedValue > byte.MaxValue) AddBrokenRule(field, "el valor del campo es incorrecto (valido: 0 a 255)"); break;
case (int)SqlDbType.Decimal: if (parsedValue < decimal.MinValue || parsedValue > decimal.MaxValue) AddBrokenRule(field, "el valor del campo es incorrecto");