So verwenden Sie den Treiber mit ADO.NET und Visual Studio
.NET-Programme erreichen einen OData-Dienst über den Treiber mit System.Data.Odbc – lesen,
DataAdapter.Fill, CommandBuilder, Parameter –, und die Assistenten von Visual Studio arbeiten
damit wie mit einer SQL-Server-Datenquelle. Drei Einstellungen entscheiden, ob Schreiben gelingt.
Lösungsübersicht
ADO.NET und der TableAdapter-Assistent erzeugen UPDATE und DELETE nach den Regeln des
CommandBuilder. Die Vorgabe (ConflictOption.CompareAllSearchableValues, im Assistenten
„Optimistische Parallelität verwenden“) vergleicht jede Spalte mit ihrem alten Wert. Das lässt sich
nicht in OData ausdrücken: Mit einer Adresse für eigene Anweisungen geht die Anweisung unverändert an
die Datenbank, ohne sie weist der Treiber sie ab, bevor etwas geschrieben ist.
Umsetzung
Verbinden Sie wie gewohnt; die Bitbreite des Prozesses bestimmt den Treiber (Visual Studio ab 2022 ist 64 Bit):
using var connection = new OdbcConnection( "DRIVER={Wkl OData};URL=https://daten.example.com/odata/v4/fachdaten/dbo/;AUTH=WINDOWS"); connection.Open();
Wählen Sie die Nebenläufigkeitsregel:
Lage Einstellung Adresse für eigene Anweisungen vorhanden Vorgabe genügt; die Wertvergleiche prüft die Datenbank ohne Adresse, Tabelle mit Zeilenversion oder Zeilenstempel ( gw_rowstamp)ConflictOption.CompareRowVersion, die Spalte in die Abfrage aufnehmen; im Assistenten „Optimistische Parallelität“ abwählenohne Adresse, Konflikte unwichtig ConflictOption.OverwriteChanges- Setzen Sie für Namen mit Sonderzeichen
QuotePrefix = "["undQuoteSuffix = "]"amOdbcCommandBuilder; ohne sie schreibt er die Namen ungeschützt, bei jedem Treiber.
Ergebnis: Anlegen, Ändern und Löschen über den CommandBuilder gelingen; eine fremde Änderung
erscheint als DBConcurrencyException. Das gilt unter .NET 10, .NET 8 und .NET Framework 4.8, je in
32- und 64-Bit-Prozessen.
Hinweise
- Transaktionen nur, wo der Dienst sie anbietet. Mit dem Datendienst Wkl.Data.Gateway wirken
BeginTransaction,CommitundRollbackwie über den Treiber von SQL Server; ein anderer Dienst ohneStore.Transactionsantwortet aufBeginTransactionmitHYC00statt einer scheinbar geöffneten Transaktion. Siehe Transaktionen. DateTimenur auf die Millisekunde. ADO.NET überträgt einen gebundenenDateTimenur auf die Millisekunde; der Treiber speichert, was ankommt. Der Treiber von SQL Server weist jeden Bruchteil in dieser Bindung ab.- Sichten erscheinen als Tabellen.
$metadataunterscheidet Sichten nicht von Tabellen; der Server-Explorer zeigt sie unter „Tabellen“. Lesen und Abfragen betrifft das nicht.
Verwandte Themen
- Pass-Through-Abfragen einrichten – die Adresse für eigene Anweisungen