Laden...

Verstehe die Exception nicht

Erstellt von f.ritz vor 19 Jahren Letzter Beitrag vor 19 Jahren 2.300 Views
f.ritz Themenstarter:in
341 Beiträge seit 2004
vor 19 Jahren
Verstehe die Exception nicht

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?

4.221 Beiträge seit 2005
vor 19 Jahren

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...

N
4.644 Beiträge seit 2004
vor 19 Jahren

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.

f.ritz Themenstarter:in
341 Beiträge seit 2004
vor 19 Jahren

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!

f.ritz Themenstarter:in
341 Beiträge seit 2004
vor 19 Jahren

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>
K
39 Beiträge seit 2005
vor 19 Jahren

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?

f.ritz Themenstarter:in
341 Beiträge seit 2004
vor 19 Jahren

Die Funktionen Fill() und Update() erlauben jeweils nur einen Parameter und zwar von Typ DataSet.

K
39 Beiträge seit 2005
vor 19 Jahren

stimmt, der SqlXmlAdapter nimmt nur des DataSet. Wusste nich das der sich grossartig anders verhält als die OleDBDataAdapter...