BLOBs und OLE-Objekte

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

Ein Beispiel, in dem diese Funktion veranschaulicht wird, finden Sie im OLE BD-Beispiel zum Festlegen von großen Daten, verfügbar auf CodePlex; weitere Informationen finden Sie unter Beispiele für SQL Server Database Engine.

Der SQL Server Native Client OLE DB-Anbieter 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 SQL Server Native Client OLE DB-Anbieter, ob in IRowset- und DDL-Schnittstellen Annahmen über die Typgroß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 SQL Server Native Client OLE DB-Anbieter 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, hat eine Anwendung die folgenden Optionen:

  • 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 SQL Server Native Client OLE DB-Anbieter unterstützt das Binden von Ausgabeparametern als DBTYPE_IUNKNOWN für Datentypen mit umfangreichen Werten. Das ist in Szenarien nützlich, in denen eine gespeicherte Prozedur diese Datentypen als Werte zurückgibt, die dem Client als DBTYPE_IUNKNOWN verfügbar gemacht werden.

Speicherobjekteinschränkungen

  • Der SQL Server Native Client OLE DB-Anbieter kann nur ein einzelnes geöffnetes Speicherobjekt unterstützen. Wenn versucht wird, mehr als ein Speicherobjekt zu öffnen (eine Referenz für mehr als einen ISequentialStream-Schnittstellenzeiger abzurufen), wird DBSTATUS_E_CANTCREATE zurückgegeben.

  • Im SQL Server Native Client OLE DB-Anbieter lautet der Standardwert der schreibgeschützten DBPROP_BLOCKINGSTORAGEOBJECTS-Eigenschaft VARIANT_TRUE. Das zeigt an, dass einige Methoden (solche, die sich nicht in den Speicherobjekten befinden) mit E_UNEXPECTED fehlschlagen, wenn ein Speicherobjekt aktiv ist.

  • Die Länge der Daten eines von einem Consumer implementierten Speicherobjekts muss dem SQL Server Native Client OLE DB-Anbieter 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 mehr als einen großen Datenwert enthält und DBPROP_ACCESSORDER nicht auf DBPROPVAL_AO_RANDOM lautet, muss der Consumer entweder ein vom Cursor des SQL Server Native Client OLE DB-Anbieters 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 SQL Server Native Client OLE DB-Anbieter alle XML-Datentypen als Binary Large Objects (BLOBs) zwischen, damit in jeder beliebigen Reihenfolge auf sie zugegriffen werden kann.