23. juli 2004 - 11:25Der er
13 kommentarer og 1 løsning
Access / Insert smider komma væk
Jeg har en decimal med min totalprisen på en ordre som skal gemmes i en Access2003 database. Problemet er at kommaet forsvinder når databasen opdateres.
Jeg laver et Trace.Write af min variable(decimal) der indeholder prisen umiddelbart før INSERT sætningen bliver udført og der er den som den skal være. Men... når jeg efterfølgende tjekker databasen er kommaet væk.
Ex. 192,75 bliver til 19275 1500,99 bliver til 150099 ...osv
Udpluk fra koden: (Insert metode) int OpretOrdre1(decimal o_Totalpris, string o_BestDato, string o_EkspDato, int k_ID, string e_MAIL) { ........... ........... string queryString = "INSERT INTO [Ordre] ([O_Totalpris], [O_BestDato], [O_EkspDato], [K_ID], [E_MAIL])" + " VALUES (@O_Totalpris, @O_BestDato, @O_EkspDato, @K_ID, @E_MAIL)"; .............. ............. System.Data.IDataParameter dbParam_o_Totalpris = new System.Data.OleDb.OleDbParameter(); dbParam_o_Totalpris.ParameterName = "@O_Totalpris"; dbParam_o_Totalpris.Value = o_Totalpris; dbParam_o_Totalpris.DbType = System.Data.DbType.Decimal; dbCommand.Parameters.Add(dbParam_o_Totalpris); ............. .............} (udpluk fra metoden hvor Insert-metoden kaldes) public void Bestil_Click(object sender, EventArgs e){ ............ ........... total = calcTotal(); Trace.Write(total.ToString()); //Her er værdien ok ex. 192,95 int rowsAff = OpretOrdre1(total, sDato, sDato, kid, umail); .......... .......... }
Prøv at angiv typen ført, og smide derefter din decimal-værdi ind med en Convert.ToDecimal(dbParam_o_Totalpris); Hvis du vil sikre dig at det går ordentlig for sig skal du yderligere angive en formatter, hvilket du kan gøre på flere måder.
Den dyreste (og ikke særlig hensigtsmæssige) er at oprette en culture så kaldet bliver sådan her : Convert.ToDecimal(dbParam_o_Totalpris, new System.Globalization.CultureInfo("da-DK").NumberFormat);
Men du kan også sørge for at bruge den hele tiden - f.eks. ved at sikre dig at du altid angiver en Culture i din aktuelle tråd ved : System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("da-DK");
Derefter kan du i alle tilsvarende formateringrutiner benytte : Convert.ToDecimal(dbParam_o_Totalpris, System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat);
Bemærk at de fleste forhold omkring den slags ting er styret af dine regional settings på serveren.
Men dit problem vil opstå hvis den forsøger at konvertere din string til en decimal, og aktuelt arbejder med en-US (hvor kommaer vanligvis er 1000-tals seperator).
Men min total variable er jo allerede en Decimal og har så vidt jeg kan se allerede det rigtige format...
nå men hvis jeg anvender den "dyre" løsning skal jeg så smide Convert.ToDecimal(dbParam_o_Totalpris, new System.Globalization.CultureInfo("da-DK").NumberFormat); ind i min database metode... og hvordan gør jeg lige det..
Jeg er ikke så stiv i asp.net .... Jeg bruger webmatrix's sql generator til mine databasekald
Og prøv det samme men skift : dbParam_o_Totalpris.DbType = System.Data.DbType.Decimal; Ud med denne : dbParam_o_Totalpris.DbType = System.Data.DbType.String;
Ok .. du får et svar her, men når du gør det på den måde kan du godt resikere at det kikser hvis du lægger det over på en anden server. Hvis du får den slags problemer skriver du bare her igen ok ?
Tak for hjælpen.. Der er heldigvis ikke udsigt til at jeg skal flytte til en ny server.. Men man ved jo aldrig :-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.