Frage

Wir verwenden hier unser eigenes ORM und stellen stark typisierte Wrapper für alle unsere Datenbanktabellen bereit.Wir erlauben auch die Ausführung von schwach typisiertem Ad-hoc-SQL, aber diese Abfragen durchlaufen immer noch dieselbe Klasse, um Werte aus einem Datenleser abzurufen.

Bei der Optimierung dieser Klasse für die Zusammenarbeit mit Oracle sind wir auf eine interessante Frage gestoßen.Ist es besser, DBNull.Value oder null zu verwenden?Gibt es Vorteile bei der Verwendung von DBNull.Value?Es scheint „richtiger“ zu sein, null zu verwenden, da wir uns von der DB-Welt getrennt haben, aber es gibt Implikationen (man kann das nicht einfach blind machen). ToString() wenn ein Wert zum Beispiel null ist), also ist es definitiv etwas, worüber wir eine bewusste Entscheidung treffen müssen.

War es hilfreich?

Lösung

Ich finde es besser, null anstelle von DB null zu verwenden.

Der Grund liegt darin, dass Sie sich, wie Sie sagten, von der DB-Welt abgrenzen.

Im Allgemeinen empfiehlt es sich, Referenztypen zu überprüfen, um sicherzustellen, dass sie nicht ohnehin null sind.Sie werden für andere Dinge als DB-Daten auf Null prüfen, und ich finde, dass es am besten ist, die Konsistenz im gesamten System aufrechtzuerhalten und Null zu verwenden, nicht DBNull.

Auf lange Sicht halte ich es architektonisch für die bessere Lösung.

Andere Tipps

Wenn Sie Ihr eigenes ORM geschrieben haben, würde ich sagen, verwenden Sie einfach null, da Sie es verwenden können, wie Sie möchten.Ich glaube, DBNull wurde ursprünglich nur verwendet, um die Tatsache zu umgehen, dass Werttypen (int, DateTime usw.) dies nicht konnten Sei null, also anstatt einen Wert wie Null oder DateTime.Min zurückzugeben, was der Fall wäre implizieren eine Null (schlecht, schlecht), sie haben DBNull erstellt, um dies anzuzeigen.Vielleicht steckte mehr dahinter, aber ich ging immer davon aus, dass das der Grund war.Da wir jedoch in C# 3.0 nullfähige Typen haben, ist DBNull nicht mehr erforderlich.Tatsächlich verwendet LINQ to SQL überall nur Null.Überhaupt kein Problem.Umarmen Sie die Zukunft...Verwenden Sie null.;-)

Nach meiner Erfahrung funktionieren die .NET DataTables und TableAdapters besser mit DBNull.Bei starker Typisierung werden auch einige spezielle Methoden geöffnet, z. B. DataRow.IsFirstNameNull, wenn sie vorhanden sind.

Ich wünschte, ich könnte Ihnen eine bessere technische Antwort geben, aber für mich ist das Endergebnis, DBNull zu verwenden, wenn ich mit datenbankbezogenen Objekten arbeite, und dann einen „Standard“-Nullwert zu verwenden, wenn ich mit Objekten und .NET-bezogenem Code arbeite.

Verwenden DBNull.
Bei der Verwendung von Null sind einige Probleme aufgetreten.
Wenn ich mich richtig erinnere, können Sie keinen Nullwert in ein Feld einfügen, sondern nur DBNull.
Könnte nur mit Oracle zu tun haben, leider kenne ich die Details nicht mehr.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top