Hallo!
Ich kriege folgende Exception, wenn ich ein update der Datenbank mache:
Eine nicht behandelte Ausnahme des Typs 'Microsoft.Data.SqlXml.SqlXmlException' ist in microsoft.data.sqlxml.dll aufgetreten.
Zusätzliche Informationen: HRESULT="0x80040e14" Description="SQLOLEDB Fehlerbeschreibung: Nicht eindeutige Aktualisierung, eindeutiger Bezeichner erforderlich Transaktion abgebrochen".
Hier der Code:
void Op()
{
// XML-Daten von der Datenbank abfragen
SqlXmlCommand cmd = new SqlXmlCommand(NorthwindConnString);
DataSet ds = new DataSet();
DataRow dr;
//DataSet füllen
cmd.CommandText ="Autragssicht";
cmd.CommandType = SqlXmlCommandType.XPath;
cmd.SchemaPath = "XmlSchema.xml";
SqlXmlAdapter adapter = new SqlXmlAdapter(cmd);
adapter.Fill(ds);
dr = ds.Tables["Autragssicht"].Rows[0];
dr["ID_Feld"] = "id12";
adapter.Update(ds); //<--------Hier wird die Exception ausgelöst!!!!
Console.ReadLine();
}
Was mache ich falsch bzw. wann taucht so ein Fehler in der Regel auf?
Ich selber habe SqlXml noch nie verwendet....
Scheinbar muss da noch ein MemoryStream rumschwirren (dieser wird zwar im Code nicht verwendet.... aber bei Microsoft weiss man ja nie)....
Bau doch die zeile mit dem MemoryStream mal ein.... vielleicht hilfts ja
DataRow row;
SqlXmlAdapter ad;
//need a memory stream to hold diff gram temporarily
MemoryStream ms = new MemoryStream();
SqlXmlCommand cmd = new SqlXmlCommand(NorthwindConnString);
cmd.RootTag = "ROOT";
cmd.CommandText = "Emp";
cmd.CommandType = SqlXmlCommandType.XPath;
cmd.SchemaPath = "MySchema.xml";
//load data set
DataSet ds = new DataSet();
ad = new SqlXmlAdapter(cmd);
ad.Fill(ds);
row = ds.Tables["Emp"].Rows[0];
row["FName"] = "Susan";
ad.Update(ds);
return 0;
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Original von Programmierhans
Ich selber habe SqlXml noch nie verwendet....
Scheinbar muss da noch ein MemoryStream rumschwirren (dieser wird zwar im Code nicht verwendet.... aber bei Microsoft weiss man ja nie)....
Ich hoffe Du weißt selbst, dass das absoluter Schwachsinn ist!
@f.ritz
Hast Du mal Dein Schema überprüft, vielleicht liegt da der Fehler.
Tut mir leid, ich nehme allse zurück!
Ich habe den Connectionstring falsch strukturiert.
Der Code ist also so richtig.
Trotzdem Danke für die Hilfe!
Hmmm.... tut mir leid, läuft doch nicht!
Der ConnectionString war doch richtig, ein Kollege meinte das es nur daran liegen kann, deswegen der letzte Beitrag. Hilft mir Bitte, iregendwie finde ich die Lösung immer noch nicht dafür!
Also der Code wir gehabt:
void Op()
{
// XML-Daten von der Datenbank abfragen
SqlXmlCommand cmd = new SqlXmlCommand(NorthwindConnString);
DataSet ds = new DataSet();
DataRow dr;
//DataSet füllen
cmd.CommandText ="Autragssicht";
cmd.CommandType = SqlXmlCommandType.XPath;
cmd.SchemaPath = "XmlSchema.xml";
SqlXmlAdapter adapter = new SqlXmlAdapter(cmd);
adapter.Fill(ds);
dr = ds.Tables["Autragssicht"].Rows[0];
dr["ID_Feld"] = "id12";
adapter.Update(ds); //<--------Hier wird die Exception ausgelöst!!!!
Console.ReadLine();
}
Hier noch das Schema für das View auf DB:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="Auftragssicht" sql:relation="Auftrag">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ID_Feld" sql:field="ID" type="xsd:string" />
<xsd:element name="Equipment_No_" sql:field="Equipment_No" type="xsd:string" />
<xsd:element name="Ladungsgewicht_" sql:field="Ladungsgewicht" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
du hast ein untypisiertes DataSet?
Dann versuch mal ihm bei der FIll und der Update Methode den Tabellennamen mit anzugeben, also Adapter.Fill (DataSet, TabelleName)?
Oder ist das bei xml alles anders?
Die Funktionen Fill() und Update() erlauben jeweils nur einen Parameter und zwar von Typ DataSet.
stimmt, der SqlXmlAdapter nimmt nur des DataSet. Wusste nich das der sich grossartig anders verhält als die OleDBDataAdapter...