BLOBs und OLE-Objekte in SQL Server Native Client

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

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

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

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

Bei Datentypen mit großen Werten überprüft der SQL Server Native Client OLE DB-Anbieter in IRowset- und DDL-Schnittstellen auf Typgrößenannahmen. Spalten mit den Datentypen varchar, nvarchar und varbinary , deren maximale Größe auf unbegrenzt festgelegt ist, werden über die Schemarowsets und Schnittstellen, die Spaltendatentypen zurückgeben, als ISLONG dargestellt.

Der SQL Server Native Client OLE DB-Anbieter macht die Typen varchar(max), varbinary(max) und nvarchar(max) als DBTYPE_STR, DBTYPE_BYTES und 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 Bindungsausgabeparameter als DBTYPE_IUNKNOWN für Datentypen mit großen Werten, um Szenarien zu erleichtern, in denen eine gespeicherte Prozedur diese Datentypen als Rückgabewerte zurückgibt, die als DBTYPE_IUNKNOWN für den Client verfügbar gemacht werden.

Speicherobjekteinschränkungen

  • Der SQL Server Native Client OLE DB-Anbieter kann nur ein einzelnes offenes 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 SQL Server Native Client OLE DB-Anbieters ist der Standardwert der schreibgeschützten eigenschaft DBPROP_BLOCKINGSTORAGEOBJECTS 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, die von einem vom Consumer implementierten Speicherobjekt angezeigt werden, muss dem SQL Server Native Client OLE DB-Anbieter bekannt gemacht werden, wenn der Zeilenzugriffsor erstellt wird, der auf das Speicherobjekt verweist. Der Consumer muss einen Längenindikator in der zur Accessorerstellung verwendeten DBBINDING-Struktur binden.

  • Wenn eine Zeile mehr als einen einzelnen großen Datenwert enthält und DBPROP_ACCESSORDER nicht DBPROPVAL_AO_RANDOM ist, muss der Consumer entweder ein SQL Server Native Client Cursor-unterstütztes Rowset des OLE DB-Anbieters verwenden, um Zeilendaten abzurufen oder alle großen Datenwerte vor dem Abrufen anderer Zeilenwerte zu verarbeiten. Wenn DBPROP_ACCESSORDER DBPROPVAL_AO_RANDOM ist, speichert der SQL Server Native Client OLE DB-Anbieter alle XML-Datentypen als binary Large Objects (BLOBs) zwischen, sodass in beliebiger Reihenfolge darauf zugegriffen werden kann.

In diesem Abschnitt

Weitere Informationen

SQL Server Native Client (OLE DB)
Verwenden von Datentypen mit umfangreichen Werten