Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: SQL Server
Azure SQL-Datenbank
In diesem Beispiel wird gezeigt, wie Sie eine DiffGram-Datei in der Microsoft .NET Framework-Umgebung ausführen, um Datenaktualisierungen auf SQL Server-Tabellen mithilfe von SQLXML Managed Classes (Microsoft.Data.SqlXml) anzuwenden.
In diesem Beispiel aktualisiert das DiffGram Kundeninformationen (CompanyName und ContactName) für den Kunden ALFKI.
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql" sql:mapping-schema="DiffGramSchema.xml">
<diffgr:diffgram
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<DataInstance>
<Customer diffgr:id="Customer1"
msdata:rowOrder="0" diffgr:hasChanges="modified"
CustomerID="ALFKI">
<CompanyName>Bottom Dollar Markets</CompanyName>
<ContactName>Antonio Moreno</ContactName>
</Customer>
</DataInstance>
<diffgr:before>
<Customer diffgr:id="Customer1"
msdata:rowOrder="0"
CustomerID="ALFKI">
<CompanyName>Alfreds Futterkiste</CompanyName>
<ContactName>Maria Anders</ContactName>
</Customer>
</diffgr:before>
</diffgr:diffgram>
</ROOT>
Der Before-Block> enthält ein <Customer-Element> (diffgr:id="Customer1").< Der DataInstance-Block> enthält das entsprechende <Customer-Element> mit derselben ID.< Das Customer-Element> im <NewDataSet> gibt auch diffgr:hasChanges="modified" an.< Dadurch wird ein Updatevorgang angezeigt und der Kundendatensatz in der Cust-Tabelle entsprechend aktualisiert. Beachten Sie, dass, wenn das diffgr:hasChanges-Attribut nicht angegeben ist, die DiffGram-Verarbeitungslogik dieses Element ignoriert und keine Aktualisierungen ausgeführt werden.
Im Folgenden finden Sie Code für eine C#-Lernprogrammanwendung, die zeigt, wie Sie mithilfe der sqlXML Managed Classes das obige DiffGram ausführen und zwei Tabellen (Cust, Ord) aktualisieren, die Sie auch in der tempdb-Datenbank erstellen.
using System;
using System.Data;
using Microsoft.Data.SqlXml;
using System.IO;
class Test
{
static string ConnString = "Provider=SQLOLEDB;Server=MyServer;database=tempdb;Integrated Security=SSPI;";
public static int testParams()
{
SqlXmlAdapter ad;
// Need a memory stream to hold diff gram temporarily
MemoryStream ms = new MemoryStream();
SqlXmlCommand cmd = new SqlXmlCommand(ConnString);
cmd.RootTag = "ROOT";
cmd.CommandStream = new FileStream("MyDiffgram.xml", FileMode.Open, FileAccess.Read);
cmd.CommandType = SqlXmlCommandType.DiffGram;
cmd.SchemaPath = "DiffGramSchema.xml";
// Load data set
DataSet ds = new DataSet();
ad = new SqlXmlAdapter(cmd);
ad.Fill(ds);
ad.Update(ds);
return 0;
}
public static int Main(String[] args)
{
testParams();
return 0;
}
}
So testen Sie die Anwendung
Stellen Sie sicher, dass .NET Framework auf dem Computer installiert ist.
Speichern Sie das folgende XSD-Schema (DiffGramSchema.xml) in einem Ordner:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema"> <xsd:annotation> <xsd:documentation> Diffgram Customers/Orders Schema. </xsd:documentation> <xsd:appinfo> <sql:relationship name="CustomersOrders" parent="Cust" parent-key="CustomerID" child-key="CustomerID" child="Ord"/> </xsd:appinfo> </xsd:annotation> <xsd:element name="Customer" sql:relation="Cust"> <xsd:complexType> <xsd:sequence> <xsd:element name="CompanyName" type="xsd:string"/> <xsd:element name="ContactName" type="xsd:string"/> <xsd:element name="Order" sql:relation="Ord" sql:relationship="CustomersOrders"> <xsd:complexType> <xsd:attribute name="OrderID" type="xsd:int" sql:field="OrderID"/> <xsd:attribute name="CustomerID" type="xsd:string"/> </xsd:complexType> </xsd:element> </xsd:sequence> <xsd:attribute name="CustomerID" type="xsd:string" sql:field="CustomerID"/> </xsd:complexType> </xsd:element> </xsd:schema>
Erstellen Sie diese Tabellen in der tempdb-Datenbank .
CREATE TABLE Cust( CustomerID nchar(5) Primary Key, CompanyName nvarchar(40) NOT NULL , ContactName nvarchar(60) NULL) GO CREATE TABLE Ord( OrderID int Primary Key, CustomerID nchar(5) Foreign Key REFERENCES Cust(CustomerID)) GO
Fügen Sie diese Beispieldaten hinzu:
INSERT INTO Cust(CustomerID, CompanyName, ContactName) VALUES (N'ALFKI', N'Alfreds Futterkiste', N'Maria Anders') INSERT INTO Cust(CustomerID, CompanyName, ContactName) VALUES (N'ANATR', N'Ana Trujillo Emparedados y helados', N'Ana Trujillo') INSERT INTO Cust(CustomerID, CompanyName, ContactName) VALUES (N'ANTON', N'Antonio Moreno Taquería', N'Antonio Moreno') INSERT INTO Ord(OrderID, CustomerID) VALUES(1, N'ALFKI') INSERT INTO Ord(OrderID, CustomerID) VALUES(2, N'ANATR') INSERT INTO Ord(OrderID, CustomerID) VALUES(3, N'ANTON')
Kopieren Sie das oben stehende DiffGram, und fügen Sie es in eine Textdatei ein. Speichern Sie die Datei als MyDiffGram.xml in demselben Ordner, den Sie in Schritt 1 verwendet haben.
Speichern Sie den C#-Code (DiffgramSample.cs) aus dem Beispiel oben im selben Ordner, in dem DiffGramSchema.xml und MyDiffGram.xml aus den vorherigen Schritten gespeichert wurden.
Hinweis
Sie müssen den Namen der SQL Server-Instanz in der Verbindungszeichenfolge von "
MyServer
" auf den tatsächlichen Namen Ihrer installierten Instanz von SQL Server aktualisieren.Wenn Sie die Dateien in einem anderen Ordner speichern, müssen Sie den Code bearbeiten und den entsprechenden Verzeichnispfad für das Zuordnungsschema angeben.
Kompilieren Sie den Code. Verwenden Sie zur Kompilierung des Codes an der Eingabeaufforderung die folgende Zeichenfolge:
csc /reference:Microsoft.Data.SqlXML.dll DiffgramSample.cs
Dadurch wird eine ausführbare Datei (DiffgramSample.exe) erstellt.
Führen Sie DiffgramSample.exe an der Eingabeaufforderung aus.