Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   C# Timespan-Umwandlung ungültig bei Firebird und typ.DataSet (https://www.delphipraxis.net/78180-timespan-umwandlung-ungueltig-bei-firebird-und-typ-dataset.html)

Jürgen Thomas 30. Sep 2006 12:51

Datenbank: Firebird • Version: 2.0 • Zugriff über: Firebird NET Provider 2.0.1.0

Timespan-Umwandlung ungültig bei Firebird und typ.DataSet
 
Hallo,

ich habe mir zu einer Firebird-DB ein typisiertes DataSet durch XSD.exe erzeugen lassen. Der FB-Datentyp TIME scheint in NET bei der Umwandlung in TimeSpan Probleme zu verursachen, wenn ich es als Dauer (xsd:duration) und nicht als Uhrzeit (xsd:time) interpretieren möchte:

SQL-Code:
CREATE TABLE SENDUNG (
    ID           D_ZAHL NOT NULL /* D_ZAHL = INTEGER DEFAULT 0 NOT NULL */,
    TITEL_ID     D_ZAHL /* D_ZAHL = INTEGER DEFAULT 0 NOT NULL */,
    DATUM        D_DATE NOT NULL /* D_DATE = DATE */,
    VON          D_ZEIT NOT NULL /* D_ZEIT = TIME */
    //  usw. weitere Felder    );
Dazu habe ich (teilweise manuell) eine Daten.xsd erzeugt u.a. mit diesem Inhalt:
XML-Code:
<xsd:element name="Sendung">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element name="ID" msdata:AutoIncrement="true" type="xsd:int" />
      <xsd:element name="Titel_ID" msdata:AutoIncrement="false" type="xsd:int" />
      <xsd:element name="Datum" type="xsd:date" minOccurs="0" />
      <xsd:element name="von" type="xsd:duration" minOccurs="0" />
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>
Daraus hat XSD folgenden C#-Quelltext erzeugt:
Code:
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
public System.TimeSpan von {
    get {
        try {
            return ((System.TimeSpan)(this[this.tableSendung.vonColumn]));
        }
        catch (System.InvalidCastException e) {
            throw new System.Data.StrongTypingException("Der Wert für Spalte von in Tabelle Sendung ist DBNull.", e);
        }
    }
    set {
        this[this.tableSendung.vonColumn] = value;
    }
}
Beim Einlesen der Daten (im Feld 'Von' steht der Wert '12:07:00') über DataAdapter erhalte ich die folgende Fehlermeldung:
Zitat:

Die angegebene Umwandlung ist ungültig. <01.01.1970 12:07:00> konnte nicht in der von-Spalte gespeichert werden. Erwarteter Typ: TimeSpan
In meiner jetzigen Situation konnte ich 'xsd:duration' durch 'xsd:time' ersetzen und die cs-Datei neu erstellen lassen - und alles funktioniert einwandfrei. Es bleibt die generelle Frage: Wie muss ein duration-Wert in einer FB-DB gespeichert werden, damit er in einem NET-DataSet genutzt werden kann? Ich habe nämlich noch ein weiteres Feld, das wirklich eine Dauer bezeichnet!

Danke für Hinweise! Jürgen

PS. Aus mehreren praktischen Gründen möchte ich Datum, Startzeit "Von" und Schlusszeit "Bis" trennen. Bitte nicht darüber streiten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz