2009-09-22 7 views
8

Ich habe ein stark typisiertes Dataset (MyDataSet) in meiner .NET App erstellt. Der Einfachheit halber werden wir sagen, dass es eine DataTable (MyDataTable) mit einer Spalte (MyCol) hat. MyCol hat seine DataType-Eigenschaft auf "System.Int32" und seine AllowDBNull-Eigenschaft auf "True" festgelegt.Wie kann ich DBNull als Wert in mein stark typisiertes Dataset aufnehmen?

Ich möchte manuell eine neue Zeile erstellen und sie zu diesem Dataset hinzufügen. Ich erstelle die Zeile ohne ein Problem, mit etwas wie:

MyDataSet.MyDataTableRow myRow = MySimpleDataSet.MyDataTable.NewItemRow(); 

Fein. Aber wenn ich versuche, den Wert auf DBNull zu setzen:

myRow.MyCol = DBNull.Value; 

Mir wurde gesagt, dass ich es nicht tun kann ... dass es nicht so in einen int werfen kann. Das ist in gewisser Weise sinnvoll, da ich es als int definiert habe ... aber wie kann ich DBNull da rein bekommen? Darf ich DBNull nicht dort drin haben? Ist das nicht die Eigenschaft AllowDBNull?

Ich vermisse offensichtlich etwas Grundlegendes. Kann mir jemand erklären, was es ist?

EDIT: Ich habe auch versucht, "int?" wie der DataType, aber Visual Studio löst einen Fehler aus, wenn ich es eintrage und sage, dass "Spalte einen gültigen DataType benötigt".

+0

Dies kann helfen: http://stackoverflow.com/questions/879095/nullable-int-column-in-dataset –

Antwort

13

Sie haben in der MyDataTableRow-Klasse eine generierte Methode namens: SetMyColNull().

myRow.SetMyColNull(); 

Sie können auch tun:

myRow["MyCol"] = DBNull.Value; 

weil myRow["MyCol"] vom Typ object

EDIT (ergänzt durch Frage OP):

Es gibt auch ein Gegenstück Verfahren erzeugt um diesen Wert wieder zu lesen, IsMyColNull().

+1

Egad! Wie habe ich das übersehen/nicht? Ausgezeichnet! Danke vielmals! – Beska

0

Int akzeptiert nicht null, aber int? (die INullable-Version) tut. Ich denke, dass Sie diesen Datentyp stattdessen benötigen.

+1

Leider funktioniert das nicht ...Ich habe das versucht (ich sollte das in der Frage erwähnen ... Ich werde es bearbeiten, um dies zu tun.) Wenn ich das mache, erscheint ein Fenster, das beschwert, dass "Spalte einen gültigen DataType benötigt". – Beska

1

Es gibt zwei Dinge.

Das Zulassen von DBNull ist eine separate Einstellung, da der Wert auf DBNull gesetzt werden kann.

Ich habe nur die DataSet XSD-Schnittstelle verwendet, um dies zu setzen ... aber ich musste nicht nur "AllowDBNull = true", sondern ich musste auch "NullValue = (null)" setzen. Ursprünglich wurde "NullValue" auf "(Exception)" gesetzt. Dies bedeutet, dass das Dataset bieng .Fill() ed mit null akzeptiert, es aber nicht erlaubt, den Wert manuell auf null zu setzen.

Nicht sicher, ob das Ihr Problem ist, aber es klingt ähnlich.

+0

Das funktioniert nur mit Strings ... –

1

Wechseln Sie einfach in den Designer-Modus im Dataset und klicken Sie mit der rechten Maustaste auf das Feld, das null sein soll, und wählen Sie im Eigenschaftenfenster AllowDBNull auf True und NullValue auf (NULL); es funktioniert für mich richtig! mit freundlichen Grüßen!

+0

Das funktioniert nur für Strings ... –

Verwandte Themen