ODP.net Oracle Dezimalzahl Präzisions-problem beim füllen eines dataset. Ausnahme: die Arithmetische operation hat einen überlauf verursacht
Arbeite ich in c# .net 2 (Visual Studio 2005 SP1) versucht zu füllen ein dataset mit dem Ergebnis von " select * from Tabelle aus einer Oracle10g-Datenbank. Die .net framework, IDE-und Datenbank - nicht geändert werden bei diesem client-Seite.
Ich bin Verbindung mit dem ODP.net Anbieter die dll-version ist 2.102.2.20
Wenn ich den fill-Befehl, bekomme ich eine Exception:
Arithmetische operation hat einen überlauf verursacht
Auch wenn ich versuchen, anzeigen, die problematische Spalte in der Visual Studio-designer (Show Table Data) bekomme ich für jede Zeile für diese Spalte in der Tabelle. Der code funktioniert perfekt, wenn meine Abfrage ausgewählt werden andere Spalten mit Ganzzahlen Beispiel für das weglassen dieser Spalte.
Der Spalte in Frage, sieht gut aus, wenn ich eine Ansicht in der Datenbank von Kröte, Daten Aussehen:
919.742866695572
Brauche ich die Präzision, wie es erforderlich ist für eine monte-carlo-simulation.
Wenn Sie anstatt einer Daten-adapter zum füllen der datatable, die ich verwenden Sie ein datareader-Objekt, und rufen Sie dataReader.getValue(columnIndex) bekomme ich den gleichen Fehler aber wenn ich den Anruf dataReader.GetOracleDecimal(columnIndex) dann habe ich das Ergebnis bekommen ich bin auf der Suche nach, kein Fehler.
Ich würde eher die Daten verwenden, adapter und dataset füllen (Hinweis: diese sind nicht typisierten datasets als ich konnte nicht wieder automatisch generierte stark typisierten datasets zu arbeiten, die von einer oracle-db). Ich will nicht zu verwenden von datareader und Spaziergang durch die Ergebnisse (wählen Sie aus der Spalte Werte), wie ich bin versucht zu schreiben, als eine Allgemeine Methode funktioniert für viele Szenarien unabhängig von der Anzahl der Spalten, index decimal-Spalten erfordern würde, dass bestimmte Anrufe bekommen von dem Datentyp.
Kann jemand helfen?
Kann ich neue Versionen der ODP.net dlls, um eine Verbindung zu den älteren Oracle10g Datenbank? Frage mich ob das helfen wird.
Dank
Auch bedeutet es, ich muss wissen, über jede Spalte in der Tabelle kann ich nicht einfach eine Decke Select * From Tabelle
InformationsquelleAutor m3ntat | 2009-06-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, dass die Präzision, mit der das Ergebnis Wert ist zu hoch, um das konvertieren zu einem System.Dezimal ohne Datenverlust. Ich vergesse die genaue Zahl von Ziffern erlaubt, aber es ist um die 18 oder so. Ist es akzeptabel, round() das Ergebnis Wert, dass viele Ziffern? In dem Beispiel, das Sie Gaben, eine
round(MyColumn, 15)
oder so sollte ausreichend sein...InformationsquelleAutor Chris R. Donnelly
Sie können versuchen, die neueste version von ODP.Net (11g). Es ist rückwärts kompatibel. Ich es verwenden, um eine Verbindung zu einem 10g-Datenbank ganz gut. Ich denke, es sollte funktionieren mit VS 2005 zu. Für die clickonce-Bereitstellung, fügen Sie einfach die dlls verwiesen wird, die von dieser Frage: Was ist der minimale Speicherbedarf auf dem client benötigt, um eine Verbindung von C# zu einer Oracle-Datenbank? Ein wichtiger Hinweis ist, dass, wenn Sie haben die neueste version von odp.net alle dlls sind im Verzeichnis install. Sie brauchen nicht zu download instant client getrennt. Nur die Suche für Sie.
Sie möchten Oracle Developer Tools für Visual Studio enthält alle dlls, die Sie benötigen. Der einzige Weg, um es installiert auf den client-Maschine wird entweder durch die Installation kompletter Oracle-Client oder instant client (was ich empfehle). Für instant-client, Sie brauchen nur zu finden .dlls (siehe stackoverflow.com/questions/70602/...) für weitere Informationen und fügen Sie diese in Kopie als Inhalt. Dadurch wird sichergestellt, dass Sie ordnungsgemäß implementiert.
InformationsquelleAutor jle