vb.net - .NET saving to DB truncates my decimals instead of rounds them.. what could be possible problems? -
i'm not using entity framework, using microsoft enterprise library.
i have value like: 1.125979843654984 gets truncated 1.125, instead of rounded 1.126.
the precision of column value in decimal(5,3).
what reasons happen?
is there other information provide help?
i'm new .net.
update 1
- add relevant code
the code invokes saving process:
dim dscalcgroupbyband new dataset dscalcgroupbyband.tables.add(dtcalcgroupbyband) dscalcgroupbyband.tables(0).tablename = "table" dal.savegriddataset(dscalcgroupbyband, "select * tblltdcalcgroupbyband igroupky=" & groupdata.groupno, false, false) the method method in variable dal:
public function savegriddataset(byval pds dataset, byval psql string, _ optional byval pcheckisnewgroup boolean = true, _ optional byval pforceasnewgroup boolean = false, _ optional byval psqldelete string = "") boolean dim da new sqldataadapter dim commandbuilder sqlcommandbuilder dim adapter sqldataadapter dim updatedrows integer using connection sqlconnection = _database.createconnection() try if ((pcheckisnewgroup = true) , (groupdata.isnewgroup = true)) or _ (pforceasnewgroup = true) pds = isnewgroup(pds) end if da = new sqldataadapter(psql, connection) '_database.getdataadapter ' make commandbuilder generate insert, update, , delete commands. commandbuilder = new sqlcommandbuilder(da) ' save changes. da.update(pds) catch e invalidoperationexception try ' it's horrible run code, in here, there need tests ' implemented before modifying above code. adapter = new sqldataadapter(psql, connection) commandbuilder = new sqlcommandbuilder(adapter) 'adapter.selectcommand = commandbuilder.getupdatecommand updatedrows = adapter.update(pds) catch ee dbconcurrencyexception ' there no change (data exists, no need update) console.writeline("no data written") end try catch e dbconcurrencyexception ' delete current records using optional delete psqldelete if psqldelete = "" psqldelete = psql.replace("select *", "delete") end if updatesql(psqldelete) ' create dataset if new group , try update again da.update(isnewgroup(pds)) catch e exception console.writeline("un-mitigated exception") console.writeline(e.message) end try end using end function - disclaimer above code snippets: both came legacy code.
using above decimals example: in dtcalcgroupbyband datatable, there exists row field of value 1.125979843654984 corresponding column in database of datatype decimal(5,3) -- however, particular corresponding datacolumn object of datatype system.decimal - problem coming from? perhaps?
anyway, once saved, (after calling dal.savegriddataset(...)), value in table, , shows 1.125 (truncated) instead of 1.126 (rounded)
update 2
using microsoft enterprise library (or other oo way of accessing database), how retrieve column's precision?
the column declared decimal(5,3), 3 places of precision right of decimal value, rest truncated.
if want round value, have round in datatable column before saving database, or in sql statement being executed.
Comments
Post a Comment