Sonntag, Dezember 15, 2019

Übergeben von null in eine DataTable aus einer einzigen Zeile, bedingte Anweisung Parsen von string-Werten

Habe ich eine app, die Schleifen durch eine Feste Breite Textdatei, liest jede Zeile in eine string-variable und verwendet .Substring () – Methode, um Daten für ein bestimmtes Feld. Für ein gegebenes Feld, es wird überprüft, um zu sehen, ob der Inhalt sind einfach Räume, oder wenn es eigentlich „Daten“, d.h. irgendetwas, sondern Räume. Wenn es Daten, und diese Daten repräsentiert ein Datum, zum Beispiel DateTime.Parse() auf, die Daten und übergeben ein Feld von Typ datetime in C# DataTable; jedoch, wenn es keine Daten-nur Räume, ich will einfach nur einen null-Wert übergeben, um das Feld. Hier ist ein code-snippet zu veranschaulichen:

var dataTable = new DataTable();

dataTable.Columns.Add("Application_Date").DataType = Type.GetType("System.DateTime");

while (!sr.EndOfStream)
{
    string row = sr.ReadLine();

    if (row.Substring(0, 1) == "2" && row.Substring(42, 1) == "T")
    {
        DataRow dr = dataTable.NewRow();

        dr["Application_Date"] = row.Substring(124, 8) != "        " ?
                                 DateTime.Parse(row.Substring(124, 4) +
                                 "-" + row.Substring(128, 2) + "-" +
                                 row.Substring(130, 2)) :
                                 null as DateTime?;                                                         

     }
}

Mein problem ist, dass wenn ich versuche zu laufen, es gibt eine Fehlermeldung, die sagen, es will ein DBNull (Cannot set Column 'Application_Date' to be null. Please use DBNull instead.)

Aber wenn ich versuchen, übergeben Sie einfach einen DBNull statt, es sagt mir, dass es nicht die Konvertierung zwischen DateTime und DBNull (Type of conditional expression cannot be determined because there is no implicit conversion between 'System.DateTime?' and 'System.DBNull')

Was vermisse ich hier?

InformationsquelleAutor Tom Miller | 2011-03-07

2 Kommentare

  1. 36

    Müssen Sie werfen die DateTime zu object um es in den bedingten:

    dr["Application_Date"] = (...) ? (object)DateTime.Parse(...) : DBNull.Value;
    • Danke-das war der trick! Ich jetzt auch verstehen, warum…nochmals vielen Dank!
    • Vielleicht habe ich etwas verpasst hier, aber ich hatte das gleiche problem und konnte es lösen, indem Sie „(Objekt)“ vor dem „DBNull.Wert“ – Teil der Anweisung (nicht vor dem DateTime.Analysieren Teil der Aussage—so der Vorschlag der obigen Antwort).
    • FYI – In VB.NET du brauchst DataTable1.Rows(i)(j) = If(xarray(i, j), CObj(DBNull.Value))
    • ist richtig.

Kostenlose Online-Tests

Letzte Fragen

Tun ItemView löst Blase?

Ich habe eine CompositeView für eine Tabelle. Ich habe Trigger-set in der Kind-ItemView für jede Zeile... var TableRow = Marionette.ItemView.extend({ tagName:...

Wie kann ich untersuchen, WCF was 400 bad request über GET?

Die folgenden WCF-endpoint funktioniert gut mit dem WCF test client: AssetList ListFlaggedAssets(short processCode, string platform, string endpoint = "null", string portalId = "null", int...

Bei der Verwendung von UUIDs, sollte ich auch mit AUTO_INCREMENT?

Wir bauen eine neue web-app, die eine offline-iPad - /Android-app-version auf einer Reihe von lokalen Geräten, die Einsätze mit neuen Daten. Als solche benötigen...

Actionscript-Objekt, das verschiedene Eigenschaften

Wie kann ich die Anzahl der Eigenschaften in einer generischen Actionscript-Objekt? (Wie die Array-Länge) InformationsquelleAutor Fragsworth | 2011-01-15

Wie plot mehrere Graphen und nutzen Sie die Navigations-Taste im [matplotlib]

Die neueste version von matplotlib erstellt automatisch Navigations-buttons unter den graph. Aber die Beispiele, die ich finden alles im Internet zeigen, wie erstellen Sie...