Laden...

Dezimalen in SQL speichern

Erstellt von Chill-X vor 10 Jahren Letzter Beitrag vor 10 Jahren 3.071 Views
C
Chill-X Themenstarter:in
12 Beiträge seit 2013
vor 10 Jahren
Dezimalen in SQL speichern

verwendetes Datenbanksystem: SQL

Hallo liebe Community,

ich habe mal wieder ein Problem, ich habe hier in den FAQ gelesen, dass aufgrund der Ländereinstellungen eine Dezimale aus C# (100,21) erst per 'str(100,21)' "gecastet" werden muss, damit SQL keinen Fehler wirft.

Nun habe ich damit zwei Probleme:

1: An einer Stelle in meinem Code funktioniert das UPDATE Statement ohne Mucken, leider schreibt SQL die Daten trotzdem als Int (ohne Nachkommastellen) in die Datenbank, obwohl der Datentyp auf Decimal(18,2) eingestellt ist, die Variable als decimal übergeben wurde (100,21) und per str() in dein SQL konformes Format gecastet. Wo liegt denn dann das Problem?

2: An einer anderen Stelle im Code (fast 1:1 der Code aus 1) wirft SQL einen Fehler und meint, dass in die Datenbank keine NULL eingetragen werden kann (das ist auch so gewollt, aber wie gesagt, die Datenbank ist korrekt eingestellt und alle Variablen im UPDATE Statement sind befüllt)

Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt und mir kann jemand helfen.

16.834 Beiträge seit 2008
vor 10 Jahren

Also zu aller erst: wenn alles korrekt ist, dann würde es funktionieren.

Wie sieht Dein Insert / Update-Befehl denn aus?
Spricht irgendwie für [Artikelserie] SQL: Parameter von Befehlen
Wenn Du das korrekt verwendest dann musst Du Dich um die Abhängigkeit der Sprachen und Punkt/Komma nicht kümmern.

Hinweis: wenn Du sagst Du verwendest das Datenbanksystem "SQL", dann hilft das nicht. Du solltest schon sagen, welches DBMS Du wirklich verwendest (MSSQL, MySQL, Oracle...).

C
Chill-X Themenstarter:in
12 Beiträge seit 2013
vor 10 Jahren

Entschuldige, ich bin noch nicht wirklich "drin" in der ganzen Datenbank Sache, ich verwende Visual Studio und damit verbunden die MSSQL Datenbankdatei.

Mittlerweile habe ich Punkt 1 lösen können, indem ich als Variable statt eines Decimal einen Double übergebe. Punkt 2 bleibt leider weiterhin bestehen, Dezimalen werden einfach gecuttet und mit x,00 in die Datenbank geschrieben.

16.834 Beiträge seit 2008
vor 10 Jahren

Wenn Du 18,2 Decimal definierst... erwartest Du dann aller ernstes mehr als 2 Kommazahlen?
Vielleicht einfach mal bissle nachdenken und nachlesen 😉

C
Chill-X Themenstarter:in
12 Beiträge seit 2013
vor 10 Jahren

Zwei Nachkommastellen sind gewollt, mein Problem besteht darin, dass statt 100,21 lediglich 100,00 in die Datenbank geschrieben wird, egal ob ich die Zahl als Variable oder Hard-Coded an das Statement übergebe.

C
282 Beiträge seit 2008
vor 10 Jahren

Die Frage ist dann evtl. wie die Zahlen umgewandelt wurden?

C
Chill-X Themenstarter:in
12 Beiträge seit 2013
vor 10 Jahren

Im Code werden Sie als Double behandelt, aufgrund des Dezimaltrenners im SQL Statement mit str gecastet und als Decimal (18,2) in die DB geschrieben.

F
10.010 Beiträge seit 2004
vor 10 Jahren

[Hinweis] Wie poste ich richtig? Punkt 5

Und diese Kurze Beschreibung von Dir zeigt [Artikelserie] SQL: Parameter von Befehlen

C
Chill-X Themenstarter:in
12 Beiträge seit 2013
vor 10 Jahren

Ob es nun an meiner mangelnden Fähigkeit aussagekräftige Posts zu schreiben liegt oder einfach daran, dass man "Anfängern" hier nicht direkt helfen möchte sei dahingestellt, mittlerweile bin ich aber selbst auf die Lösung gekommen.

Das Problem lag schlicht und ergreifend an dem Covert-Befehl im Statement.

Wenn als Datentyp der Spalte "float" angegeben ist, ich direkt einen String an das Statement übergebe und vorher per .Replace-Methode den Dezimaltrenner durch einen Punkt ersetze funktioniert alles reibungslos.

Vielen Dank trotzdem.

16.834 Beiträge seit 2008
vor 10 Jahren

.. oder Du uns einfach geglaubt und das gemacht hättest, was wir die ganze Zeit sagen:
[Artikelserie] SQL: Parameter von Befehlen

Der Umgang mit Dezimalkennzeichen gehört zu den Grundlagen [Hinweis] Wie poste ich richtig? 1.1.1 und bezüglicher Deiner Aussage und Anfängern [Hinweis] Wie poste ich richtig? Punkt 1.1 und Anfängerforum einrichten (Anfänger helfen Anfängern)?

C
Chill-X Themenstarter:in
12 Beiträge seit 2013
vor 10 Jahren

Okay, ich hätte vielleicht erst die links komplett lesen sollen, bevor ich meinem Ärger Luft mache, aber das Problem ist nun ja gelöst, vielen Dank dafür.

Allerdings habe ich eine weitere Frage, ich hoffe ich werde nicht geköpft, wenn ich dafür kein eigenes Thema erstelle (ich weiß leider gar nicht, nach welchen Stichworten ich suchen soll, bisherige suchen ergaben leider nicht den gewünschten Erfolg)

Nachdem das Programm nun fertig entwickelt ist und alles funktioniert, wie es soll habe ich nun das Problem, dass es nicht auf allen Rechnern problemlos funktioniert. Natürlich habe ich etliche Threads zu dem Thema gelesen, das .Net Framework 4.5 (Programm ist dafür designed) ist installiert UND der SQL Server 2012 Express installiert (wobei das bestimmter Quellen zufolge nicht nötig wäre). Leider kann das Programm keine Verbindung zum Server (lokale DB) herstellen. Installiere ich aber VS12 Ulti mit dem SQL Paket, so funktioniert alles tadellos. Da ich relativ ratlos bin würde ich euch bitten mir zu erläutern, was genau das SQL Paket in der VS Installation umfasst, damit ich mein Code-Kunstwerk endlich auch auf anderen Rechnern zum laufen bekomme.

(SQL Network Interfaces, error 52)

F
10.010 Beiträge seit 2004
vor 10 Jahren

Wenn du LocalDB benutzen willst, musst du die Auch installieren.
Local-DB != SqlServer Express, das sind 2 Produkte die auf der selben Engine basieren.

C
Chill-X Themenstarter:in
12 Beiträge seit 2013
vor 10 Jahren

Entschuldigung, das verstehe ich nicht ganz. Die Datenbank ist eine ganz normale mdf Datei, vielleicht hatte ich mich mit "lokale Datenbank" etwas missverständlich ausgedrückt.

Es ist - wie gesagt - eine mdf Datei, die in einem Ordner in den Eigenen Dokumenten liegen soll.

16.834 Beiträge seit 2008
vor 10 Jahren

Ich hab eigentlich keine Lust mehr Dir zu helfen, weil Du offensichtlich selbst auch keine Lust hast einfach selbst mal etwas nach zu lesen - selbst wenn man die passenden Links gibt.
Eine MDF-Datei ist - vereinfacht gesagt - nichts anderes als der Inhalt einer Datenbank für den SQL Server - ohne SQL Server funktionierts also nicht.
Ich glaube Dir also nicht, dass Du irgendwelche Quellen hast, die Gegenteiliges behaupten. Du hast vielmehr die Hoffnung es sei so. Und wie FZelle schon sagt: Local DB != SQL Server Express.

Du bist gut damit beraten einfach mal nachzulesen, was die verschiedenen Produkte sind und wie sie funktionieren.
Ich persönlich werde Dir jedenfalls Deine nötigen Informationen garantiert nicht auf dem Präsentierteller servieren, nur weil Du einfach zu faul bist ([Hinweis] Wie poste ich richtig? Punkte 4*)
Ich hoff ich habs Dir jetzt deutlich genug gesagt.

C
Chill-X Themenstarter:in
12 Beiträge seit 2013
vor 10 Jahren

Ob du mir glaubst ist mir ehrlich gesagt totalst egal, ich werde wohl selbst wissen, was ich recherchierte und was nicht. Leider finde ich den genauen Thread nicht mehr, in dem die Aussage getroffen wurde, ich kann dir jedoch sagen, dass es im "Stack Overflow" Forum war und die ungefähre Aussage wie folgt war:

Das .Net Framework bringt die benötigten Funktionalitäten für eine lokale Datenbank (mdf) bereits mit, daher ist eine SQL Installation nicht erforderlich.

Meine Frage war lediglich, was Inhalt des SQL Paketes der VS Installation ist, alles weitere hätte ich - entgegen deiner Argumentation - alleine recherchiert.

Der Grund, warum ich hier überhaupt frage ist ganz einfach, dass an machen Stellen behauptet wird man müsse lediglich DLL's die auf dem Zielrechner nicht vorhanden sind mitgeben, an anderen Stellen wird behauptet man müsse eine komplette SQL Express Installation vornehmen.

Und ganz ehrlich, du willst behaupten, dass ich nicht recherchiere? Woher nimmst du dir das Recht? Jeder (auch du) haben einmal ganz klein angefangen und es tut mir auch Leid, dass ich mich wie du behauptest nicht zu 100% an die Forenregeln halte, aber das ist noch lange kein Grund jemanden der relativ neu ist so zu behandeln.

Wenn du mir nicht mehr helfen möchtest, dann lass es, auch wenn ich es schade finde, dass jemand der wohl um einiges mehr Ahnung zu haben scheint seine Hilfe verweigert.

F
10.010 Beiträge seit 2004
vor 10 Jahren

Ich kann Abt durchaus verstehen, denn Du machst den gleichen Fehler wie viele die hier scheitern.
Du liest einfach irgendetwas oder ergooglst dir ein paar Sachen statt Grundlagen zu erlesen.

  1. MDF ist ( wie Abt sagte ) die Extension für eine echte Datenbank des MS Sql Server.
  2. Local DB ist seit Sql Server 2012 eine einfach zu installierende MS Sql Server Express Version die rein als Inprozess Version also ohne laufenden Server funktioniert.
  3. Ein paar DLL's zu installieren reicht beim Sql Server Compact was ein komplett anderes Produkt ist. Die extension ist meist SDF.

Also, wenn du eine MDF hast, gehört die in einen MS Sql Server. Hier musst du dann entweder einen Großen oder den Express installieren.
Wenn in deinem Connectionstring etwas von LocalDB steht dann musst du die LocalDB Version installieren.

Wenn Du in Zukunft nach etwas suchst, tue dir selber einen gefallen und achte auf genaue Bezeichnungen.

C
Chill-X Themenstarter:in
12 Beiträge seit 2013
vor 10 Jahren

Vielen Dank, mit diesem Post kann ich etwas anfangen. Entschuldigt die Unannehmlichkeiten und vielen Dank für die Hilfe!