Ausführen von Vorgängen für Tabellen und Sichten mit großen Datentypen in SQL mithilfe des WCF-Dienstmodells
Der SQL-Adapter ermöglicht Adapterclients das Lesen und Aktualisieren von Daten in Spalten großer Datentypen, d. h. varchar(max), nvarchar(max) oder varbinary(max). Adapterclients können den Select-Vorgang verwenden, um Daten aus solchen Spalten zu lesen. Um Daten in solche Spalten einzufügen oder zu aktualisieren, macht der Adapter einen Set<column_name-Vorgang> verfügbar, wobei <column_name> der Name der Spalte vom Typ varchar(max), nvarchar(max) oder varbinary(max) ist.
Darüber hinaus können Sie in SQL Server die varbinay(max)-Spalte unstrukturierte Daten wie Textdokumente und Bilder speichern lassen. Solche unstrukturierten Daten werden als FILESTREAM-Daten bezeichnet. FILESTREAM-Daten können als Dateien im Dateisystem gespeichert werden. Der SQL-Adapter ermöglicht es dem Client, FILESTREAM-Daten in Spalten vom Typ varbinary(max) einzugeben. FILESTREAM-Speicher enthält weitere Informationen.
Dieses Thema enthält Informationen zu bestimmten Aufgaben, die Sie auf dem Computer ausführen müssen, auf dem SQL Server ausgeführt wird, und dem Computer, auf dem der Adapterclient ausgeführt wird, um FILESTREAM-Daten einfügen oder aktualisieren zu können. Dieses Thema enthält auch Anweisungen zum Ausführen von Set<column_name-Vorgängen> zum Einfügen von FILESTREAM-Daten.
Hinweis
Wenn Sie Vorgänge für Tabellen ausführen, die Spalten von benutzerdefinierten Typen enthalten, stellen Sie sicher, dass Sie unter Vorgänge für Tabellen und Ansichten mit User-Defined Typen mithilfe des SQL-Adapters verweisen.
Voraussetzungen
Sie müssen die folgenden Aufgaben auf dem Computer ausführen, auf dem SQL Server ausgeführt wird, und auf dem Computer, auf dem der Adapterclient ausgeführt wird.
Auf dem Computer, auf dem SQL Server
Sie müssen FILESTREAM auf der SQL Server instance aktivieren. Weitere Informationen finden Sie unter Aktivieren und Konfigurieren von FILESTREAM.
Sie müssen eine FILESTREAM-fähige Datenbank erstellen. Weitere Informationen finden Sie unter Erstellen einer FILESTREAM-Enabled-Datenbank.
Sie benötigen eine Tabelle zum Speichern von FILESTREAM-Daten. Weitere Informationen finden Sie unter Erstellen einer Tabelle zum Speichern von FILESTREAM-Daten.
Auf dem Computer, auf dem der Adapterclient ausgeführt wird
- Sie müssen das SQL Client Connectivity SDK installiert haben. Sie können das SQL Client Connectivity SDK installieren, indem Sie das SQL Server Setup ausführen und sql Client Connectivity SDK auf der Seite Featureauswahl des Assistenten auswählen. Der Adapter verwendet die sqlncli10.dll, die mit dem SQL Client Connectivity SDK installiert ist, um FILESTREAM-Vorgänge auszuführen.
Nachdem Sie diese Aufgaben abgeschlossen haben, können Sie FILESTREAM-Daten in SQL Server Datenbanktabellen einfügen oder aktualisieren.
In diesem Thema werden Vorgänge für große Datentypen veranschaulicht.
Um zu veranschaulichen, wie Set<column_name-Vorgänge> für Tabellen mit großen Datentypen ausgeführt werden, nehmen Sie die Tabelle Datensätze mit den Spalten ID und Dokument an:
Die Tabelle Records mit allen Daten wird erstellt, indem das SQL-Skript ausgeführt wird, das mit den Beispielen bereitgestellt wird. Weitere Informationen finden Sie unter Adapterbeispiele.
Die Id-Spalte ist vom Typ uniqueidentifier und nimmt eine GUID an. Angenommen, die Id-Spalte verfügt bereits über eine GUID "
438B7B4C-5491-409F-BCC1-78817C399EC3
".Die Spalte Document hat den Typ VARBINARY(MAX). Um die Spalte Document zu aktualisieren, macht der Adapter den SetDocument-Vorgang verfügbar.
Hinweis
Gehen Sie für SQL Server zum Veranschaulichen von FILESTREAM-Vorgängen davon aus, dass die Spalte Document FILESTREAM-Daten speichern kann.
Informationen zu den in diesem Thema verwendeten Beispielen
Im Beispiel in diesem Thema werden Vorgänge für die Tabelle Datensätze ausgeführt. Die Tabelle Records wird erstellt, indem das SQL-Skript ausgeführt wird, das mit den Beispielen bereitgestellt wird. Weitere Informationen zu Beispielen finden Sie unter Adapterbeispiele. Ein Beispiel, Records_FILESTREAM_Op, das auf diesem Thema basiert, wird auch mit den SQL-Adapterbeispielen bereitgestellt.
Die WCF-Clientklasse
Der Name des WCF-Clients, der für die Vorgänge für große Datentypen generiert wird, die der SQL-Adapter ermittelt, basiert auf dem Namen der Tabelle oder Sicht, wie in der folgenden Tabelle aufgeführt.
SQL Server-Datenbankartefakt | WCF-Clientname |
---|---|
Tabelle | TableOp_[Schema]_[TABLE_NAME]Client |
Sicht | ViewOp_[Schema]_[VIEW_NAME]Client |
[SCHEMA] = Sammlung von SQL Server Artefakten, z. B. dbo.
Methodensignatur zum Aufrufen von Vorgängen für Spalten großer Datentypen
Die folgende Tabelle zeigt die Methodensignaturen für die grundlegenden Vorgänge für eine Tabelle. Die Signaturen sind für eine Ansicht identisch, mit der Ausnahme, dass der Ansichtsnamespace und der Name die der Tabelle ersetzen.
Vorgang | Methodensignatur |
---|---|
Festlegen<von column_name> | public void Set<column_name>(string Filter, byte[] Data); |
<Column_name> = Name der Spalte mit großem Datentyp.
Der folgende Code zeigt beispielsweise die Methodensignaturen für eine WCF-Clientklasse, die für den SetDocument-Vorgang in der Tabelle Records unter dem Standardschema "dbo" generiert wurde.
public partial class TableOp_dbo_RecordsClient : System.ServiceModel.ClientBase<TableOp_dbo_Records>, TableOp_dbo_Records {
public void SetDocument (string Filter, byte[] Data);
}
In diesem Codeausschnitt ist TableOp_dbo_RecordsClient der Name der WCF-Klasse in der SqlAdapterBindingClient.cs, die vom Add Adapter Service Reference Plug-In generiert wird.
Parameter für Vorgänge für Spalten großer Datentypen
Dieser Abschnitt enthält die Parameter, die für den Vorgang Set<column_name> erforderlich sind.
Parametername | BESCHREIBUNG |
---|---|
Zeichenfolgenfilter | Gibt die WHERE-Klausel an, auf deren Grundlage der Adapter den Datensatz für die Spalte des großen Datentyps aktualisiert. |
byte[] Daten | Gibt den Wert an, der für die Spalte des großen Datentyps aktualisiert werden muss. |
Der Vorgang set<column_name> gibt keine Werte zurück.
Erstellen eines WCF-Clients zum Aufrufen von Vorgängen für Spalten mit großen Datentypen
Der generische Satz von Aktionen, die erforderlich sind, um einen Vorgang auf SQL Server mithilfe eines WCF-Clients auszuführen, umfasst eine Reihe von Aufgaben, die unter Übersicht über das WCF-Dienstmodell mit dem SQL-Adapter beschrieben werden. In diesem Abschnitt wird beschrieben, wie Sie einen WCF-Client erstellen, um den SetDocument-Vorgang für die Tabelle Records aufzurufen. Der Adapter macht den SetDocument-Vorgang verfügbar, um Daten in Spalten großer Datentypen zu aktualisieren.
So erstellen Sie einen WCF-Client
Erstellen Sie ein Visual C#-Projekt in Visual Studio. Erstellen Sie für dieses Thema eine Konsolenanwendung.
Generieren Sie die WCF-Clientklasse für den SetDocument-Vorgang für die Tabelle Records . Weitere Informationen zum Generieren einer WCF-Clientklasse finden Sie unter Generieren eines WCF-Clients oder WCF-Dienstvertrags für SQL Server Artifacts.
Fügen Sie im Projektmappen-Explorer Verweis auf
Microsoft.Adapters.Sql
,Microsoft.ServiceModel.Channels
undSystem.Transactions
hinzu.Öffnen Sie die Datei Program.cs, und fügen Sie den
System.Transactions
Namespace hinzu.Erstellen Sie in program.cs einen Client, wie im folgenden Codeausschnitt beschrieben.
TableOp_dbo_RecordsClient client = new TableOp_dbo_RecordsClient("SqlAdapterBinding_TableOp_dbo_Records"); client.ClientCredentials.UserName.UserName = ""; client.ClientCredentials.UserName.Password = "";
In diesem Codeausschnitt ist der WCF-Client,
TableOp_dbo_RecordsClient
der in SqlAdapterBindingClient.cs definiert ist. Diese Datei wird vom Add Adapter Service Reference Plug-In generiert.SqlAdapterBinding_TableOp_dbo_Records
ist der Name der Clientendpunktkonfiguration und wird im app.config definiert. Diese Datei wird auch vom Add Adapter Service Reference Plug-In generiert und enthält die Bindungseigenschaften und andere Konfigurationseinstellungen.Achtung
Um Vorgänge für FILESTREAM-Daten auszuführen, müssen Sie immer mithilfe von Windows-Authentifizierung eine Verbindung mit SQL Server herstellen. Um eine Verbindung mit Windows-Authentifizierung herzustellen, müssen Sie wie im vorherigen Codeausschnitt gezeigt einen leeren Benutzernamen und ein leeres Kennwort angeben. Bevor Sie Windows-Authentifizierung zum Herstellen einer Verbindung mit SQL Server verwenden, müssen Sie außerdem die unter Herstellen einer Verbindung mit SQL Server Verwenden der Windows-Authentifizierung mit dem SQL-Adapter beschriebenen Schritte ausgeführt haben.
Hinweis
In diesem Codeausschnitt verwenden Sie die Bindungs- und Endpunktadresse aus der Konfigurationsdatei. Sie können diese Werte auch explizit im Code angeben. Weitere Informationen zu den verschiedenen Möglichkeiten zum Angeben der Clientbindung finden Sie unter Konfigurieren einer Clientbindung für den SQL-Adapter.
Öffnen Sie den Client wie im folgenden Codeausschnitt beschrieben:
try { Console.WriteLine("Opening Client..."); client.Open(); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; }
Rufen Sie den SetDocument-Vorgang für die Tabelle Records auf.
Achtung
DieVorgänge set<column_name> müssen immer in einer Transaktion ausgeführt werden. Um dies sicherzustellen, muss der VorgangSet<column_name> innerhalb eines Transaktionsbereichs und die UseAmbientTransaction-Bindungseigenschaft im app.config auf true festgelegt werden.
using (TransactionScope tx = new TransactionScope()) { string filter = "WHERE Id='438B7B4C-5491-409F-BCC1-78817C399EC3'"; byte[] data = ASCIIEncoding.ASCII.GetBytes("Sample data"); client.SetDocument(filter, data); tx.Complete(); }
Hier konvertiert die Anwendung die Zeichenfolge "Beispieldaten" in eine base64-codierte Zeichenfolge und aktualisiert sie im Datensatz, der die Filterkriterien erfüllt.
Schließen Sie den Client wie im folgenden Codeausschnitt beschrieben:
client.Close(); Console.WriteLine("Press any key to exit..."); Console.ReadLine();
Erstellen Sie das Projekt, und führen Sie es dann aus. Die Anwendung aktualisiert die Spalte Dokument in der Tabelle Datensätze .