Teilen über


BLOBs und OLE-Objekte

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

OLE DB-Treiber herunterladen

Der OLE DB-Treiber für SQL Server macht die Schnittstelle ISequentialStream verfügbar, um den Consumerzugriff auf die SQL Server-Datentypen ntext, text1, image, varchar(max) , nvarchar(max) , varbinary(max) und XML als Binary Large Objects (Blobs) zu unterstützen. Die Methode Read für ISequentialStream ermöglicht dem Consumer, große Datenmengen in überschaubaren Abschnitten abzurufen.

[1]: Die Schnittstelle „ISequentialStream“ zum Einfügen von UTF-8-codierten Daten in eine Legacytextspalte kann nur auf Servern eingesetzt werden, die UTF-8 unterstützen. Der Versuch, dieses Szenario für einen Server auszuführen, der UTF-8 nicht unterstützt, führt zu folgender Fehlermeldung des Treibers: „Streaming über den ausgewählten Spaltentyp ist nicht zugelassen“.

Ein Beispiel für diese Feature finden Sie unter Festlegen von großen Daten (OLE DB).

Der OLE DB-Treiber für SQL Server kann eine vom Consumer implementierte IStorage-Schnittstelle verwenden, wenn der Consumer den Schnittstellenzeiger in einem für Datenänderungen gebundenen Accessor bereitstellt.

Für Datentypen mit umfangreichen Werten prüft der OLE DB-Treiber für SQL Server, ob in IRowset und DDL-Schnittstellen Annahmen über die Typgröße vorhanden sind. Spalten mit den Datentypen varchar, nvarchar und varbinary, bei denen die maximale Größe auf „Unlimited“ festgelegt ist, werden von den Schemarowsets und Schnittstellen, die Spaltendatentypen wiedergeben, als ISLONG dargestellt.

Der OLE DB-Treiber für SQL Server macht die Datentypen varchar(max) , varbinary(max) und nvarchar(max) als DBTYPE_STR, DBTYPE_BYTES bzw. DBTYPE_WSTR verfügbar.

Um mit diesen Typen zu arbeiten, stehen der Anwendung die folgenden Optionen zur Verfügung:

  • Als den betreffenden Typ binden (DBTYPE_STR, DBTYPE_BYTES, DBTYPE_WSTR). Wenn der Puffer nicht groß genug ist, werden Daten abgeschnitten, wie dies auch in früheren Versionen der Fall war (obwohl jetzt umfangreichere Werte verfügbar sind).

  • Als den betreffenden Typ binden und zudem DBTYPE_BYREF angeben

  • Als DBTYPE_IUNKNOWN binden und Streaming verwenden

Wenn die Bindung an DBTYPE_IUNKNOWN erfolgt, wird die Streamingfunktion ISequentialStream verwendet. Der OLE DB-Treiber für SQL Server unterstützt das Binden von Ausgabeparametern als DBTYPE_IUNKNOWN für Datentypen mit großen Werten. Damit werden Szenarios unterstützt, in denen gespeicherte Prozeduren diese Datentypen als Rückgabewerte zurückgeben, die alle als DBTYPE_IUNKNOWN an den Client zurückgegeben werden.

Speicherobjekteinschränkungen

  • Der OLE DB-Treiber für SQL Server kann nur ein einzelnes geöffnetes Speicherobjekt unterstützen. Wenn versucht wird, mehrere Speicherobjekte zu öffnen (um einen Verweis auf mehrere ISequentialStream-Schnittstellenzeiger abzurufen), wird DBSTATUS_E_CANTCREATE zurückgegeben.

  • Im OLE DB-Treiber für SQL Server lautet der Standardwert der schreibgeschützten DBPROP_BLOCKINGSTORAGEOBJECTS-Eigenschaft VARIANT_TRUE. Deshalb schlagen einige Methoden (solche, die sich nicht in den Speicherobjekten befinden) mit E_UNEXPECTED fehl, wenn ein Speicherobjekt aktiv ist.

  • Die Länge der Daten eines von einem Consumer implementierten Speicherobjekts muss dem OLE DB-Treiber für SQL Server mitgeteilt werden, wenn der auf das Speicherobjekt verweisende Zeilenaccessor erstellt wird. Der Consumer muss einen Längenindikator in der zur Accessorerstellung verwendeten DBBINDING-Struktur binden.

  • Wenn eine Zeile mehrere große Datenwerte enthält und DBPROP_ACCESSORDER nicht auf DBPROPVAL_AO_RANDOM lautet, muss der Consumer entweder ein vom Cursor des OLE DB-Treibers für SQL Server unterstütztes Rowset verwenden, um Zeilendaten abzurufen, oder alle großen Datenwerte vor dem Abrufen weiterer Zeilenwerte verarbeiten. Wenn DBPROP_ACCESSORDER auf DBPROPVAL_AO_RANDOM lautet, speichert der OLE DB-Treiber für SQL Server alle XML-Datentypen als Binary Large Objects (BLOBs) zwischen, damit in jeder beliebigen Reihenfolge auf sie zugegriffen werden kann.

In diesem Abschnitt

Weitere Informationen

OLE DB-Treiber für SQL Server-Programmierung
Verwenden von Datentypen mit umfangreichen Werten