Jag vill flytta data mellan två databaser (Access) med samma schema. I vår befintliga VB6 lösning skriver/läser vi till XML och gör allt manuellt. I vår nya lösning, i .Net var tanken att utnyttja funktionaliteten i Dataset'et för att automatisera det hela. Men jag får det inte riktigt att fungera. Granska UpdateCommand & InsertCommand som har skapats automagiskt,Dataset (OdbcDataAdapter)
Har skapat dataadapter och fyllt ett dataset med Employees ur Northwind, och sedan anropat
ds.WriteXml("c:\1.xml", XmlWriteMode.IgnoreSchema)
Eftersom filen överförs via GSM/GPRS vill vi inte dryga ut filen med ett schema vi kan läsa av ur destinationsdatabasen.
Sedan redigerar jag manuellt XML filen så den innhåller lite ändringar och försöker göra följande.
1. Skapa dataadapter för Northwind.Employees
2. Skapa dataset och kör dataadapterns FillSchema
3. Skapa dataset nr2 och läs in XML filen med ReadXML
4. Merga in dataset2 i det tomma (endast schema) datasetet
5. Spara ändringarna till db med dataadapterns Update
Allt ser ut att gå bra, data ändras/uppdateras i dataset'et, men Update till databasen ger inget resultat.
Varför?
I koden nedan kör jag mot Northwind i SQL Server (da1 är en genererad dataadapter med select, insert, update kommandon):
Dim ds As New DataSet
Dim ds2 As New DataSet("Employees")
AddHandler da1.RowUpdated, AddressOf eud
AddHandler da1.RowUpdating, AddressOf eug
Dim da2 As New OdbcDataAdapter("SELECT EmployeeID, LastName, FirstName, Title, TitleOfCourtesy, BirthDate, +HireDate, Address, City, Region, PostalCode, Country, HomePhone, Extension, Photo, Notes, ReportsTo, PhotoPath FROM Employees", cn)
Try
da1.Fill(ds)
da2.MissingSchemaAction = MissingSchemaAction.Error
da2.MissingMappingAction = MissingMappingAction.Error
da2.FillSchema(ds2, SchemaType.Source, "Employees")
ds2.ReadXml("c:\1.xml", XmlReadMode.IgnoreSchema)
ds.Merge(ds2, False)
If ds.HasChanges Then ds.AcceptChanges()
ds.WriteXml("c:\2.xml")
da1.Update(ds, "Employees")
' ds.WriteXml("c:\1.xml", XmlWriteMode.IgnoreSchema)
Catch ex As Exception
MessageBox.Show(ex.Message)
End TrySv: Dataset (OdbcDataAdapter)
det går bra att ändra i det också.
Förmodligen ligger felet där någonstans.
Ola