Frage

Ich habe nicht mit den Parametern in ADO.Net sehr viel gearbeitet. Ich schreibe einen benutzerdefinierten .NET Data Provider (nach dem Vorbild SqlClient) und habe die IsNullable Eigenschaft in meinen Parametern Klasse zu implementieren, die von DbParameter erbt. Meine Daten-Provider werden nicht gespeicherte Prozeduren unterstützen, so dass ich nur Input (Substitutionsstil) Parameter unterstützen.

Die docs MSDN sind eher unklar auf die Funktionalität von IsNullable, die besagt, „Ruft einen Wert ab, der Parameter akzeptiert Nullwerte gibt an, ob.“ Googeln dreht eine Menge Leute verwirrt über das, was IsNullable tut und sagt, dass IsNullable auf false verbieten sie nicht von einem Parameter verwendet wird ein Nullwert, wie sie es erwartet hätte.

Auf dieser Grundlage, ich denke, dass vielleicht die IsNullable Eigenschaft auf der Verwendung mit einer gespeicherten Prozedur gehört, und ob die Parameter der gespeicherten Prozedur NULL sein kann, nicht, ob der Parameterwert kann null sein.

In diesem Fall, da ich Prozeduren nicht gespeichert haben, kann meine Implementierung nur sein:

        public override bool IsNullable { get { return false; } set {} }

Um zu vermeiden, mit einigem Test-Code hantieren, um zu sehen, wie SqlParameter Implementierung von IsNullable funktioniert, ich es schätzen würde, wenn jemand in dem Schreiben von Code erfährt Parameter könnte IsNullable erklären.

War es hilfreich?

Lösung

Die IsNullable Eigenschaft ist informativ. Es ist hilfreich, wenn ein Teil des Codes der Parameter erstellt und ein anderer es tatsächlich nutzt. Zum Beispiel könnte der Parameter automatisch aus der Datenbank abgeleitet wird, in diesem Fall ist es für den Programmierer nützlich ist in die Lage sein, um zu sehen, ob ein Nullwert ist wahrscheinlich in Kauf genommen werden.

Das ist mein Verständnis der IsNullable Eigenschaft. Ich weiß nicht wirklich wissen, jede Dokumentation, dass „beweisen“ dies tatsächlich korrekt ist.


Unterstützung dieser Ansicht wäre die Umsetzung des Oracle Oracle.DataAccess.Client.OracleParameter Klasse , wo ihr docs Zustand:

  

IsNullable

     

Diese Eigenschaft wird nicht unterstützt.

Und es ist eine Tatsache, dass der Wert dieser Eigenschaft ist irrelevant, wenn sie mit Oracle 10 oder 11 oder 12, entweder über die MS-Treiber oder den genannten Schnittstellentreiber Oracle.

Verhalten bei anderen Datenbanken kann natürlich abweichen.

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