Похоже WebService все же "дергается", т.к. во время debuging'a я в него залажу и ошибка возникает именно в тех строках, которые я откомментировал ранее. Но вот что за XML файл имеется в виду - понятия не имею. Могу показать файл XSD, на основании которого, как я понимаю, генерируется XML-файл с данными Master-Details таблицы:
<xsd:schema id="RechnungUndTeilnehmerDataSet" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="Rechnung">
<xsd:complexType>
<xsd:all>
<xsd:element name="Rechnungsnummer" msdata:AutoIncrement="true" type="xsd:int" />
<xsd:element name="Rechnungsdatum" type="xsd:date" minOccurs="0" />
<xsd:element name="Benutzer" type="xsd:int" minOccurs="0" />
<xsd:element name="Reservierungsdatum" type="xsd:date" minOccurs="0" />
<xsd:element name="Veranstalter" type="xsd:int" minOccurs="0" />
<xsd:element name="Kundennummer" type="xsd:int" minOccurs="0" />
<xsd:element name="Hinflug_Von" type="xsd:string" minOccurs="0" />
<xsd:element name="Hinflug_Nach" type="xsd:string" minOccurs="0" />
<xsd:element name="Rueckflug_Von" type="xsd:string" minOccurs="0" />
<xsd:element name="Rueckflug_Nach" type="xsd:string" minOccurs="0" />
<xsd:element name="Abflugsdatum_Hin" type="xsd:date" minOccurs="0" />
<xsd:element name="Ankunftsdatum_Hin" type="xsd:date" minOccurs="0" />
<xsd:element name="Abflugsdatum_Rueck" type="xsd:date" minOccurs="0" />
<xsd:element name="Ankunftsdatum_Rueck" type="xsd:date" minOccurs="0" />
<xsd:element name="Abflugszeit_Hin" type="xsd:dateTime" minOccurs="0" />
<xsd:element name="Ankunftszeit_Hin" type="xsd:dateTime" minOccurs="0" />
<xsd:element name="Abflugszeit_Rueck" type="xsd:dateTime" minOccurs="0" />
<xsd:element name="Ankunftszeit_Rueck" type="xsd:dateTime" minOccurs="0" />
<xsd:element name="Flugnummer_Hin" type="xsd:string" minOccurs="0" />
<xsd:element name="Flugnummer_Rueck" type="xsd:string" minOccurs="0" />
<xsd:element name="Visagebuehr" type="xsd:double" minOccurs="0" />
<xsd:element name="Porto" type="xsd:double" minOccurs="0" />
<xsd:element name="RKV" type="xsd:double" minOccurs="0" />
<xsd:element name="Hinterlegung_Flughafen" type="xsd:boolean" minOccurs="0" default="false" />
<xsd:element name="Hinterlegung_Flughafen_Bezahlung" type="xsd:boolean" minOccurs="0" default="false" />
<xsd:element name="Bemerkungen" type="xsd:string" minOccurs="0" />
<xsd:element name="START" type="xsd:string" minOccurs="0" />
<xsd:element name="Reisebedingungen" type="xsd:int" minOccurs="0" />
<xsd:element name="Rabatt" type="xsd:double" minOccurs="0" />
<xsd:element name="Gesamtbetrag" type="xsd:double" minOccurs="0" />
<xsd:element name="Endbetrag" type="xsd:double" minOccurs="0" />
<xsd:element name="Zahlungsbedingungen" type="xsd:int" minOccurs="0" />
<xsd:element name="Versicherungsbedingungen" type="xsd:int" minOccurs="0" />
<xsd:element name="Reservierungsbemerkung" type="xsd:int" minOccurs="0" />
<xsd:element name="Zahlung" type="xsd:double" minOccurs="0" />
<xsd:element name="Zahlung_Am" type="xsd:date" minOccurs="0" />
<xsd:element name="Ticket_Ausgestellt" type="xsd:boolean" minOccurs="0" default="false" />
<xsd:element name="Ticket_Ausgestellt_Am" type="xsd:date" minOccurs="0" />
</xsd:all>
</xsd:complexType>
</xsd:element>
<xsd:element name="Reiseteilnehmer">
<xsd:complexType>
<xsd:all>
<xsd:element name="ReiseteilnehmerID" msdata:AutoIncrement="true" type="xsd:int" />
<xsd:element name="Rechnungsnummer" type="xsd:int" />
<xsd:element name="Nachname" type="xsd:string" minOccurs="0" />
<xsd:element name="Vorname" type="xsd:string" minOccurs="0" />
<xsd:element name="Anrede" type="xsd:string" minOccurs="0" />
<xsd:element name="Geburtstag" type="xsd:date" minOccurs="0" />
<xsd:element name="Bemerkung" type="xsd:string" minOccurs="0" />
<xsd:element name="Ticketpreis" type="xsd:double" minOccurs="0" default="0" />
<xsd:element name="Tax" type="xsd:double" minOccurs="0" default="0" />
</xsd:all>
</xsd:complexType>
</xsd:element>
<xsd:element name="RechnungUndTeilnehmerDataSet" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element ref="Rechnung" />
<xsd:element ref="Reiseteilnehmer" />
</xsd:choice>
</xsd:complexType>
<xsd:unique name="Rechnung_Bedingung" msdata:PrimaryKey="true">
<xsd:selector xpath=".//Rechnung" />
<xsd:field xpath="Rechnungsnummer" />
</xsd:unique>
<xsd:unique name="Reiseteilnehmer_Bedingung" msdata:ConstraintName="Rechnung_Bedingung" msdata:PrimaryKey="true">
<xsd:selector xpath=".//Reiseteilnehmer" />
<xsd:field xpath="ReiseteilnehmerID" />
</xsd:unique>
<xsd:keyref name="RechnungReiseteilnehmer" refer="Rechnung_Bedingung">
<xsd:selector xpath=".//Reiseteilnehmer" />
<xsd:field xpath="Rechnungsnummer" />
</xsd:keyref>
</xsd:element>
</xsd:schema>
На клиенте вызов обновления данных осуществляю в следующей методе:
Public Sub UpdateRechnungDataSet()
Dim currentCursor As Cursor = Cursor.Current
Try
Cursor.Current = Cursors.WaitCursor
Me.BindingContext(dsRechnungUndTeilnehmer, "Rechnung").EndCurrentEdit()
MyStatusBar.Panels(0).Text = "Speichern Rechnungen..."
Dim objService As New ReisebЁ№ro.localhost.DatenService
objService.Credentials = System.Net.CredentialCache.DefaultCredentials
Dim changesDS As DataSet = dsRechnungUndTeilnehmer.GetChanges()
If Not (changesDS Is Nothing) Then
'Execute the XML Web service to update the DataSet
Dim dsRechnung As DataSet = objService.UpdateRechnungUndTeilnehmer(changesDS)
MyStatusBar.Panels(0).Text = "Speichern Reiseteilnehmer..."
dsRechnungUndTeilnehmer.Merge(dsRechnung, False)
'Check for errors - if there are none accept the changes
If (dsRechnungUndTeilnehmer.HasErrors) Then
MessageBox.Show("Fehler beim Speichern - prЁ№fen Sie bitte die Zeilenfehler fЁ№r Details", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
'Accept all the changes - this puts all the rows in the dataset
'back into unchanged or "Original" state
dsRechnungUndTeilnehmer.AcceptChanges()
End If
End If
Catch ex As Exception
Dim sw As StringWriter = New StringWriter
sw.WriteLine("Fehler beim Speichern:")
sw.WriteLine("")
sw.WriteLine(ex.ToString())
MessageBox.Show(sw.ToString(), "Fehler", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
Cursor.Current = currentCursor
MyStatusBar.Panels(0).Text = "Bereit"
End Try
End Sub
Последний раз редактировалось 24 March 2004 12:29
|