WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   sql server 2008, c#, decimal-werte ??? (http://www.wcm.at/forum/showthread.php?t=234586)

Hussl 10.05.2009 19:47

sql server 2008, c#, decimal-werte ???
 
Wieder mal bin ich zu dumm zum sche... programmieren!

Hab eine simple Tabelle, eine XML-Datei, deren Werte ich in die Tabelle einlesen will und ein C#-Programm, das dies alles erledigen soll.

Mein Problem ist, dass die decimal-Werte der XML-Datei nie als Kommazahl in der DB gespeichert werden, obwohl alles als decimal deklariert ist.

DB sieht folgendermaßen aus:

mNodeID, uniqueidentifier
mNodeNR, bigint
mTimestamp, datetime
mUser, nvarchar(100)
mLatitude, decimal
mLongitude, decimal

c#-Programm so:

Code:

SqlCommand dbcom = new SqlCommand("NodeInput", dbconn);
dbcom.CommandType = CommandType.StoredProcedure;
SqlParameter dbpar1 = dbcom.Parameters.Add("@id", SqlDbType.BigInt);
dbpar1.Value = element.Attribute("id").Value;
SqlParameter dbpar2 = dbcom.Parameters.Add("@lat", SqlDbType.Decimal);
dbpar2.Value = System.Convert.ToDecimal(element.Attribute("lat").Value,System.Globalization.CultureInfo.InvariantCulture);
SqlParameter dbpar3 = dbcom.Parameters.Add("@lon", SqlDbType.Decimal);
dbpar3.Value = System.Convert.ToDecimal(element.Attribute("lon").Value, System.Globalization.CultureInfo.InvariantCulture);
SqlParameter dbpar4 = dbcom.Parameters.Add("@user", SqlDbType.NVarChar, 100);
dbpar4.Value = element.Attribute("user").Value;
SqlParameter dbpar5 = dbcom.Parameters.Add("@timestamp", SqlDbType.DateTime);
dbpar5.Value = element.Attribute("timestamp").Value;
int sqlcount = dbcom.ExecuteNonQuery();

und die angesprochene Stored Procedure folgendermaßen:

Code:

ALTER PROCEDURE [dbo].[NodeInput]
(
@id bigint,
@Timestamp datetime,
@user nvarchar(100),
@lat decimal,
@lon decimal
)
AS
BEGIN
SETNOCOUNTON;
INSERT INTO ccNodes(mNodeID, mNodeNR, mTimestamp, mUser, mLatitude, mLongitude)
VALUES (NewID(), @id, @timestamp, @user, @lat, @lon);

END




Ich hab schon alles mögliche versucht, aber immer wieder das selbe: 47.5637201 wird entweder als 475637201 oder als 48 gespeichert...

Ich hoffe, irgendjemand kann mir da helfen. Ich dreh schon durch ;)

Hussl 10.05.2009 19:47

aja, die xml-datei behinhaltet folgendes:

Code:

<node id="1234456" timestamp="2007-10-29T12:01:33Z" user="xyz" lat="47.5637201" lon="12.1581247"/>

Hussl 10.05.2009 21:17

passt, habs gelöst. in der stored procedure musste ich die parameter @lat und @lon mit der precision und scale aufrüsten :)

@lat decimal(18,7)

jetzt funktionierts!


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag