共用方式為


Microsoft OLE DB Provider for SQL Server 概觀

Microsoft OLE DB Provider for SQL Server (SQLOLEDB) 可讓 ADO 存取 Microsoft SQL Server。

重要

SQL Server Native Client (通常縮寫的 SNAC) 已從 SQL Server 2022 (16.x) 和 SQL Server Management Studio 19 (SSMS) 中移除。 不建議使用 SQL Server Native Client OLE DB 提供者 (SQLNCLI 或 SQLNCLI11) 和舊版 Microsoft OLE DB Provider for SQL Server (SQLOLEDB) 進行新的開發。 從現在起,請切換至適用於 SQL Server 的新的 Microsoft OLE DB Driver (MSOLEDBSQL)

連接字串參數

若要連線到此提供者,請將 Provider 自變數設定為 ConnectionString 屬性:

SQLOLEDB

您也可以使用 Provider 屬性來設定或讀取此值。

一般連接字串

此提供者的典型連接字串為:

"Provider=SQLOLEDB;Data Source=serverName;"
Initial Catalog=databaseName;
User ID=MyUserID;Password=<password>;"

字串包含下列關鍵字:

關鍵詞 描述
提供者 指定用於 SQL Server 的 OLE DB 供應者。
數據源伺服器 指定伺服器的名稱。
初始目錄資料庫 指定伺服器上的資料庫名稱。
用戶標識碼uid 指定使用者名稱(適用於 SQL Server 驗證)。
密碼pwd 指定使用者密碼 (適用於 SQL Server 驗證)。

注意

如果您要連線到支援 Windows 驗證的數據源提供者,您應該指定 Trusted_Connection=yesIntegrated Security = SSPI,而不是連接字元串中的使用者識別符和密碼資訊。

Provider-Specific 連線參數

除了 ADO 所定義的參數之外,提供者還支持數個提供者特定的連接參數。 如同 ADO 連接屬性,這些提供者特定屬性可以透過 Connection 屬性集合來設定,也可以設定為 connectionString 的一部分。

參數 描述
信任連線 指出用戶驗證模式。 這可以設定為 [是][否]。 預設值為 No。 如果此屬性設定為 [是],SQLOLEDB 會使用 Microsoft Windows NT 驗證模式,授權使用者存取 Location 所指定的 SQL Server 資料庫,並 Datasource 屬性值。 如果此屬性設定為 [無 ],SQLOLEDB 會使用混合模式來授權使用者存取 SQL Server 資料庫。 SQL Server 登入和密碼是在 使用者識別碼密碼 屬性中指定。
目前語言 表示 SQL Server 語言名稱。 識別用於系統訊息選取和格式設定的語言。 語言必須安裝在 SQL Server 上,否則開啟連線將會失敗。
網路位址 指出 Location 屬性所指定的 SQL Server 網路位址。
網路連結庫 指出用來與 SQL Server 通訊的網路連結庫 (DLL) 名稱。 名稱不應包含路徑或 .dll 擴展名。 預設是由 SQL Server 用戶端組態所提供。
準備程序使用说明 判斷當命令備妥時,SQL Server 是否建立暫存程式(由 Prepared 屬性)。
自動翻譯 指出 OEM/ANSI 字元是否轉換。 這個屬性可以設定為 TrueFalse。 預設值為 true 。 如果此屬性設定為 True,SQLOLEDB 會在從 SQL Server 擷取或傳送多重位元組字元字串時執行 OEM/ANSI 字元轉換。 如果此屬性設定為 False,SQLOLEDB 不會對多位元組字元字串資料執行 OEM/ANSI 字元轉換。
封包大小 表示以位元組為單位的網路封包大小。 封包大小屬性值必須介於 512 和 32767 之間。 預設的 SQLOLEDB 網路封包大小為 4096。
應用程式名稱 指出用戶端應用程式名稱。
工作站標識碼 識別工作站的字串。

指令物件使用方法

SQLOLEDB 接受 ODBC、ANSI 和 SQL Server 特定 Transact-SQL 的合併語法作為有效的語法。 例如,下列 SQL 語句會使用 ODBC SQL 逸出序列來指定 LCASE 字串函式:

SELECT customerid={fn LCASE(CustomerID)} FROM Customers

LCASE 會傳回字串,將所有大寫字元轉換成相對應的小寫字元。 ANSI SQL 字串函式 LOWER 會執行相同的作業,因此下列 SQL 語句相當於稍早顯示的 ODBC 語句:

SELECT customerid=LOWER(CustomerID) FROM Customers

當指定為命令的文字時,SQLOLEDB 會成功處理語句的任一形式。

預存程式

使用 SQLOLEDB 命令執行 SQL Server 預存程式時,請在命令文字中使用 ODBC 過程呼叫逸出序列。 SQLOLEDB 接著會使用 SQL Server 的遠端過程調用機制,將命令處理優化。 例如,下列 ODBC SQL 語句是 Transact-SQL 表單上慣用的命令文字:

ODBC SQL

{call SalesByCategory('Produce', '1995')}

Transact-SQL

EXECUTE SalesByCategory 'Produce', '1995'

SQL Server 功能

使用 SQL Server 時,ADO 可以使用 XML 來 命令 輸入,並以 XML 數據流格式擷取結果,而不是在 Recordset 物件中擷取結果。 如需詳細資訊,請參閱 使用資料流進行命令輸入將結果集擷取至數據流

使用 MDAC 2.7、MDAC 2.8 或 Windows DAC 6.0 存取sql_variant數據

Microsoft SQL Server 具有稱為 sql_variant的數據類型。 與 OLE DB 的 DBTYPE_VARIANT類似,sql_variant 數據類型可以儲存數種不同類型的數據。 不過,DBTYPE_VARIANTsql_variant之間有幾個主要差異。 ADO 也會處理儲存為 sql_variant 值的數據,與處理其他數據類型的方式不同。 下列清單描述當您存取儲存在類型為 sql_variant數據行的 SQL Server 數據時所要考慮的問題。

  • 在 MDAC 2.7、MDAC 2.8 和 Windows 數據存取元件 (Windows DAC) 6.0 中,OLE DB Provider for SQL Server 支援 sql_variant 類型。 OLE DB 供應者對於 ODBC 不支援。

  • sql_variant 類型與 DBTYPE_VARIANT 數據類型不完全相符。 sql_variant 類型支援一些 DBTYPE_VARIANT 不支援的新子類型, 包括 GUIDANSI (非 UNICODE) 字串,以及 BIGINT。 使用除了先前所列以外的子類型能夠正常運作。

  • sql_variant 子類型 NUMERICDBTYPE_DECIMAL 的大小不匹配。

  • 多個數據類型強制型別會導致類型不相符。 例如,將具有 GUID 子類型的 sql_variant 強制 DBTYPE_VARIANT 會導致 安全陣列(bytes) 子類型。 將這個類型轉換回 sql_variant 會導致新的 陣列子類型(位元組)。

  • Recordset 包含 sql_variant 數據的欄位,只有在 sql_variant 包含特定子類型時,才能透過遠端(封送處理)或保存。 嘗試遙控或持續保存數據時,若使用以下不支援的子類型,將會導致來自Microsoft持久性提供者(MSPersist)的運行时錯誤(不支援的轉換):VT_VARIANTVT_RECORDVT_ILLEGALVT_UNKNOWNVT_BSTR,以及 VT_DISPATCH。

  • MDAC 2.7、MDAC 2.8 和 Windows DAC 6.0 中的 OLE DB Provider for SQL Server 具有名為 Allow Native Variants 的動態屬性,如其名稱所示,可讓開發人員存取其原生格式的 sql_variant,而不是 DBTYPE_VARIANT。 如果已設定這個屬性,且使用用戶端游標引擎(adUseClient)開啟 Recordset,則 Recordset.Open 呼叫將會失敗。 如果已設定此屬性,而且會以伺服器數據指標開啟 RecordsetadUseServer),則 Recordset.Open 呼叫將會成功,但存取類型為 sql_variant 的數據行將會產生錯誤。

  • 在使用 MDAC 2.5 的用戶端應用程式中,sql_variant 數據可以搭配針對 Microsoft sql Server 的查詢使用。 不過,sql_variant 數據的值會視為字串。 這類用戶端應用程式應該升級至 MDAC 2.7、MDAC 2.8 或 Windows DAC 6.0。

Recordset 行為

SQLOLEDB 無法使用 SQL Server 資料指標來支援許多命令所產生的多重結果。 如果取用者要求需要 SQL Server 資料指標支援的記錄集,如果所使用的命令文字產生超過單一記錄集的結果,就會發生錯誤。

SQL Server 游標支援可捲動的 SQLOLEDB 記錄集。 SQL Server 會對資料庫中其他使用者所做變更的敏感游標施加限制。 具體而言,某些數據指標中的數據列無法排序,而且嘗試使用包含SQL ORDER BY 子句的命令建立記錄集可能會失敗。

動態屬性

Microsoft OLE DB Provider for SQL Server 會將數個動態屬性插入未開啟 ConnectionRecordsetCommand 物件的 Properties 集合中。

下表是每個動態屬性之 ADO 和 OLE DB 名稱的交叉索引。 OLE DB 程式設計人員參考會依「描述」一詞來參考 ADO 屬性名稱。您可以在 OLE DB 程式設計人員參考中找到這些屬性的詳細資訊。 在索引中搜尋 OLE DB 屬性名稱,或參閱 附錄 C:OLE DB 屬性

連接動態屬性

下列屬性會新增至 Connection 物件的 Properties 集合。

ADO 屬性名稱 OLE DB 屬性名稱
使用中會話 DBPROP_ACTIVESESSIONS
異步中止 DBPROP_ASYNCTXNABORT
可異步提交 DBPROP_ASYNCTNXCOMMIT
自動提交隔離等級 DBPROP_SESS_AUTOCOMMITISOLEVELS
目錄位置 DBPROP_CATALOGLOCATION
目錄詞語 DBPROP_CATALOGTERM (資料庫目錄術語)
欄位定義 DBPROP_COLUMNDEFINITION
連接逾時 DBPROP_INIT_TIMEOUT
目前目錄 DBPROP_CURRENTCATALOG
數據源 DBPROP_INIT_DATASOURCE
數據源名稱 DBPROP_DATASOURCENAME
數據源物件線程模型 DBPROP_DSOTHREADMODEL
DBMS 名稱 DBPROP_DBMSNAME
DBMS 版本 DBPROP_DBMSVER
擴充屬性 DBPROP_INIT_PROVIDERSTRING
GROUP BY 功能支援 DBPROP_GROUPBY
異質數據表支援 DBPROP_HETEROGENEOUSTABLES(異質表屬性)
標識碼區分大小寫 DBPROP_IDENTIFIERCASE
初始目錄 DBPROP_INIT_CATALOG
隔離等級 DBPROP_SUPPORTEDTXNISOLEVELS
隔離保留期 DBPROP_SUPPORTEDTXNISORETAIN
區域識別碼 DBPROP_INIT_LCID
索引大小上限 DBPROP_MAXINDEXSIZE
數據列大小上限 DBPROP_MAXROWSIZE
最大列大小包含 BLOB DBPROP_MAXROWSIZEINCLUDESBLOB
SELECT 中的數據表上限 DBPROP_MAXTABLESINSELECT
多個參數集 DBPROP_MULTIPLEPARAMSETS
多個結果 DBPROP_MULTIPLERESULTS
多個儲存物件 DBPROP_MULTIPLESTORAGEOBJECTS
多數據表更新 DBPROP_MULTITABLEUPDATE
NULL 定序順序 DBPROP_NULLCOLLATION
NULL 串連行為 DBPROP_CONCATNULLBEHAVIOR
OLE DB 版本 DBPROP_PROVIDEROLEDBVER
OLE 物件支援 DBPROP_OLEOBJECTS
開啟數據列集支援 DBPROP_OPENROWSETSUPPORT
選取清單中的 ORDER BY 資料行 DBPROP_ORDERBYCOLUMNSINSELECT
輸出參數可用性 DBPROP_OUTPUTPARAMETERAVAILABILITY
傳遞 Ref 存取子 DBPROP_BYREFACCESSORS
密碼 DBPROP_AUTH_PASSWORD
持續保存安全資訊 DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO
永續性ID類型 DBPROP_PERSISTENTIDTYPE
預備中止行為 DBPROP_PREPAREABORTBEHAVIOR
準備提交行為模式 DBPROP_PREPARECOMMITBEHAVIOR
程序術語 DBPROP_PROCEDURETERM
提示 DBPROP_INIT_PROMPT
提供者易記名稱 DBPROP_PROVIDERFRIENDLYNAME
提供者名稱 DBPROP_PROVIDERFILENAME
提供者版本 DBPROP_PROVIDERVER
Read-Only 數據源 DBPROP_DATASOURCEREADONLY
在命令中進行資料列集轉換 DBPROP_ROWSETCONVERSIONSONCOMMAND
架構術語 DBPROP_SCHEMATERM
架構使用方式 DBPROP_SCHEMAUSAGE
SQL 支援 DBPROP_SQLSUPPORT
結構化記憶體 DBPROP_STRUCTUREDSTORAGE
子查詢支援 DBPROP_SUBQUERIES
表格字詞 DBPROP_TABLETERM
交易資料定義語言 (DDL) DBPROP_SUPPORTEDTXNDDL
用戶標識碼 DBPROP_AUTH_USERID
使用者名 DBPROP_USERNAME
視窗控制碼 DBPROP_INIT_HWND

Recordset 動態屬性

下列屬性會新增至 Recordset 物件的 Properties 集合。

ADO 屬性名稱 OLE DB 屬性名稱
存取順序 DBPROP_ACCESSORDER
封鎖儲存物件 DBPROP_BLOCKINGSTORAGEOBJECTS
書籤類型 DBPROP_BOOKMARKTYPE
可加入書籤 DBPROP_IROWSETLOCATE
變更插入的數據列 DBPROP_CHANGEINSERTEDROWS
資料欄位權限 DBPROP_COLUMNRESTRICT
欄位集通知 DBPROP_NOTIFYCOLUMNSET
命令逾時 DBPROP_COMMANDTIMEOUT
延遲欄 DBPROP_DEFERRED
延遲儲存物件更新 DBPROP_DELAYSTORAGEOBJECTS
回溯擷取 DBPROP_CANFETCHBACKWARDS
保留數據列 DBPROP_CANHOLDROWS
IAccessor DBPROP_IAccessor
IColumnsInfo DBPROP_IColumnsInfo
IColumnsRowset DBPROP_IColumnsRowset
IConnectionPointContainer DBPROP_IConnectionPointContainer
IConvertType DBPROP_IConvertType
固定行列 DBPROP_IMMOBILEROWS
IRowset DBPROP_IRowset
IRowsetChange DBPROP_IRowsetChange
IRowsetIdentity DBPROP_IRowsetIdentity
IRowsetInfo DBPROP_IRowsetInfo
IRowsetLocate DBPROP_IRowsestLocate
IRowsetResynch
IRowsetScroll DBPROP_IRowsetScroll
IRowsetUpdate DBPROP_IRowsetUpdate
ISequentialStream DBPROP_ISequentialStream
ISupportErrorInfo DBPROP_ISupportErrorInfo
文字書籤 DBPROP_LITERALBOOKMARKS
字面行識別 DBPROP_LITERALIDENTITY
開啟的行數上限 DBPROP_MAXOPENROWS
待處理列最大數 DBPROP_MAXPENDINGROWS
最大行數 DBPROP_MAXROWS
通知粒度 DBPROP_NOTIFICATIONGRANULARITY
通知階段 DBPROP_NOTIFICATIONPHASES
物品交易 DBPROP_TRANSACTEDOBJECT
其他人的更動可見 DBPROP_OTHERUPDATEDELETE
其他人的插入可見 DBPROP_OTHERINSERT
自己的變更可見 DBPROP_OWNUPDATEDELETE
插入內容可見 DBPROP_OWNINSERT
中止時保留 DBPROP_ABORTPRESERVE
在提交時保留 DBPROP_COMMITPRESERVE
快速重新啟動 DBPROP_QUICKRESTART
重新進入事件 DBPROP_REENTRANTEVENTS
刪除已刪除的列 DBPROP_REMOVEDELETED
報告多項變更 DBPROP_REPORTMULTIPLECHANGES
返回待定的插入項目 DBPROP_RETURNPENDINGINSERTS
數據列刪除通知 DBPROP_NOTIFYROWDELETE(通知列刪除)
行首次變更通知 DBPROP_NOTIFYROWFIRSTCHANGE
數據列插入通知 DBPROP_NOTIFYROWINSERT
列權限 DBPROP_ROWRESTRICT
列重新同步通知 DBPROP_NOTIFYROWRESYNCH
列線程模型 DBPROP_ROWTHREADMODEL
數據列復原變更通知 DBPROP_NOTIFYROWUNDOCHANGE
列撤銷刪除通知 DBPROP_NOTIFYROWUNDODELETE
數據列復原插入通知 DBPROP_NOTIFYROWUNDOINSERT
數據列更新通知 DBPROP_NOTIFYROWUPDATE
數據列集擷取位置變更通知 DBPROP_NOTIFYROWSETFETCHPOSISIONCHANGE
數據列集發行通知 DBPROP_NOTIFYROWSETRELEASE
向後捲動 DBPROP_CANSCROLLBACKWARDS (可向後捲動)
伺服器游標 DBPROP_SERVERCURSOR
略過已刪除的書籤 DBPROP_BOOKMARKSKIPPED
強健的資料列識別 DBPROP_STRONGITDENTITY
唯一數據列 DBPROP_UNIQUEROWS
可更新性 DBPROP_UPDATABILITY
使用書籤 DBPROP_BOOKMARKS

命令動態屬性

下列屬性會新增至 Command 物件的 Properties 集合。

ADO 屬性名稱 OLE DB 屬性名稱
存取順序 DBPROP_ACCESSORDER
基礎路徑 SSPROP_STREAM_BASEPATH
封鎖儲存物件 DBPROP_BLOCKINGSTORAGEOBJECTS
書籤類型 DBPROP_BOOKMARKTYPE
可加入書籤 DBPROP_IROWSETLOCATE
變更插入的數據列 DBPROP_CHANGEINSERTEDROWS
欄位權限 DBPROP_COLUMNRESTRICT
欄位集通知 DBPROP_NOTIFYCOLUMNSET
內容類型 SSPROP_STREAM_CONTENTTYPE
游標自動擷取 SSPROP_CURSORAUTOFETCH
延遲欄位 DBPROP_DEFERRED
延遲準備 SSPROP_DEFERPREPARE
延遲儲存物件更新 DBPROP_DELAYSTORAGEOBJECTS
向後擷取 DBPROP_CANFETCHBACKWARDS(支援向後提取資料的屬性)
保留數據列 DBPROP_CANHOLDROWS
IAccessor DBPROP_IAccessor
IColumnsInfo DBPROP_IColumnsInfo
IColumnsRowset DBPROP_IColumnsRowset
IConnectionPointContainer DBPROP_IConnectionPointContainer
IConvertType DBPROP_IConvertType
不能移動的列 DBPROP_IMMOBILEROWS
IRowset DBPROP_IRowset
IRowsetChange DBPROP_IRowsetChange
IRowsetIdentity DBPROP_IRowsetIdentity
IRowsetInfo DBPROP_IRowsetInfo
IRowsetLocate DBPROP_IRowsetLocate
IRowsetResynch DBPROP_IRowsetResynch
IRowsetScroll DBPROP_IRowsetScroll
IRowsetUpdate DBPROP_IRowsetUpdate
ISequentialStream DBPROP_ISequentialStream
ISupportErrorInfo DBPROP_ISupportErrorInfo
文字書籤 DBPROP_LITERALBOOKMARKS
字面行識別符 DBPROP_LITERALIDENTITY
鎖定模式 DBPROP_LOCKMODE
開放行數上限 DBPROP_MAXOPENROWS
待處理列最大上限 DBPROP_MAXPENDINGROWS
最大列數 DBPROP_MAXROWS
通知粒度 DBPROP_NOTIFICATIONGRANULARITY
通知階段 DBPROP_NOTIFICATIONPHASES
物品交易 DBPROP_TRANSACTEDOBJECT
其他人的變更可見 資料庫屬性_其他更新刪除
其他人的插入可見 DBPROP_其他插入
輸出編碼屬性 DBPROP_OUTPUTENCODING
輸出流屬性 DBPROP_OUTPUTSTREAM
可見自己的變更 DBPROP_OWNUPDATEDELETE
自己的插入可見 DBPROP_OWNINSERT
中止時保留 DBPROP_ABORTPRESERVE
在提交時保留 DBPROP_COMMITPRESERVE
快速重新啟動 DBPROP_QUICKRESTART
可重入事件 DBPROP_REENTRANTEVENTS
移除已刪除的行 DBPROP_REMOVEDELETED
報告多個變更 DBPROP_REPORTMULTIPLECHANGES
傳回擱置插入 DBPROP_RETURNPENDINGINSERTS
列刪除通知 DBPROP_NOTIFYROWDELETE
列首次變更通知 DBPROP_NOTIFYROWFIRSTCHANGE
數據列插入通知 DBPROP_NOTIFYROWINSERT
資料列權限 DBPROP_ROWRESTRICT
數據列重新同步處理通知 DBPROP_NOTIFYROWRESYNCH
列線程模型 DBPROP_ROWTHREADMODEL
數據列復原變更通知 DBPROP_NOTIFYROWUNDOCHANGE
行撤銷刪除通知 DBPROP_NOTIFYROWUNDODELETE
數據列復原插入通知 DBPROP_NOTIFYROWUNDOINSERT
數據列更新通知 DBPROP_NOTIFYROWUPDATE
數據列集擷取位置變更通知 DBPROP_NOTIFYROWSETFETCHPOSITIONCHANGE
數據列集發行通知 DBPROP_NOTIFYROWSETRELEASE
向後捲動 DBPROP_CANSCROLLBACKWARDS
伺服器游標 DBPROP_SERVERCURSOR
插入時的伺服器數據 DBPROP_SERVERDATAONINSERT
略過已刪除的書籤 DBPROP_BOOKMARKSKIP
強列識別 DBPROP_STRONGIDENTITY
可更新性 DBPROP_UPDATABILITY
使用書籤 DBPROP_BOOKMARKS
XML 根節點 SSPROP_STREAM_XMLROOT
XSL SSPROP_STREAM_XSL

如需 Microsoft SQL Server OLE DB 提供者的特定實作詳細資訊和功能資訊,請參閱 SQL Server 提供者

另請參閱

ConnectionString 屬性 (ADO)Provider 屬性 (ADO)Recordset 物件 (ADO)