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.