Frage

In meiner Datenbank, ich habe ein paar Spalten in einer meiner Tabellen, die Bit (boolean) Werte sind. Sie dürfen NULL sein, da die Felder nicht immer Daten gehen enthalten.

Ich habe durch den Prozess gegangen einer XSD-DataSet der Erstellung der Tabelle mit und sorgte dafür, dass das AllowDBNull Feld auf True gesetzt ist.

Allerdings, wenn ich einen nach unten Datensatz aus der Datenbank in die Datentabelle mit der konfigurierten GetData-Methode ziehen, ich laufe in die folgenden Fehlermeldung:

[InvalidCastException: Conversion from type 'DBNull' to type 'Boolean' is not valid.]

Muß ich etwas anderes als in dem Default Feld für die Spalte angeben, oder gibt es eine andere Feld zu setzen?

Ich bin in der Entwicklungsphase noch mit diesem Projekt, so dass, wenn die Felder zu einem Zeichen zu ändern und mit einer Y / N / NULL-Option bevorzugt wird, ich wird auf diese Weise nicht zu unerwünschter bin.

War es hilfreich?

Lösung

IMHO sollten Sie nicht zulassen, dass NULL-Wert in einem bit / boolean Feld.

Mike Hadlow hat einen guten Beitrag zu diesem Thema hier:

http://mikehadlow.blogspot.com/2006/10/nullability -voodoo.html

Boolean ist per Definition ein bi-State-Typ. es nullable Indem, fügen Sie einen dritten Zustand. Es kommt wieder zu Ihnen irgendwann zu verfolgen.

Andere Tipps

Ich habe mit Iain zu widersprechen. Drei Wert Logik ist ebenso lebensfähig wie 2-Wert-Logik. Die Person, die in der Tabelle ist lebendig oder tot, oder Sie wissen nicht, ob er noch lebt oder tot ist. Wenn mike seine Art und Weise hatte, konnte man nicht ein bisschen hier verwenden. Sie würden eine FK auf eine Tabelle von Status benötigen, 1 = Alive 2 = Tot, 3 = Unbekannt.

Der ganze Zweck des Bits um Platz zu sparen, können Sie immer die Spalte ein CHAR machen könnten (1) mit einem Constraint die Werte in T oder F, Y oder N (oder U) zu begrenzen.

Aber ich denke, Iain ist falsch interpretiert, was Mike sagt. Mike ist nicht entmutigend die Verwendung von NULL-Werten, schließlich ist er die EndDate Spalte denkt null sein sollte, bis der Vorgang abgeschlossen ist. Er sagt nur nicht einen Nullwert in der Spalte mit mystischen Eigenschaften verleiht ... wie es der Schlüssel ist zu wissen, ob ein Prozess in einem bestimmten Zustand befindet.

In der Tat Nulls in einer Datenbank haben bestimmte sehr nützliche Nebenwirkungen. Oracle (vielleicht auch andere Datenbanken) nicht indexiert nulls. SO, wenn Sie eine Spalte, wo nur ein Wert wichtig ist - wie Sie sagen, eine Mitarbeiterliste haben Sie nie löschen und eine Is_Active_Employee Bit Spalte, die indiziert ist. In diesem Fall für ein etabliertes Unternehmen, die Zahl der Mitarbeiter, die Sie gehabt haben >>> als die Anzahl der Mitarbeiter, die Sie jetzt haben. Sagen Sie bitte 1% 1-en und 99% 0'en haben.

Dieser Index ist 99x größer als es sein muss. Es ist die Indizierung alle 1'en was in Ordnung ist, da sie 1% der Tabelle sind, aber es ist auch mit 0'en für Zeilen, die Sie konnte nie diesen Index zu finden verwenden geladen. Wenn Sie alle wollen ist die inaktiven Mitarbeiter würde die indizierte ignoriert und ein FTS würde durchgeführt werden. Also 1 und NULL wären viel effizienter aus einer Datenbank Perspektive sein.

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