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) 進行新的開發。 請切換至新的 Microsoft OLE DB Driver (MSOLEDBSQL) for SQL Server 以繼續使用。
連接字串參數
若要連線至此提供者,請將 ConnectionString 屬性的 Provider 引數設定為:
SQLOLEDB
您也可以使用 Provider 屬性來設定或讀取此值。
一般連接字串
此提供者的一般連接字串為:
"Provider=SQLOLEDB;Data Source=serverName;"
Initial Catalog=databaseName;
User ID=MyUserID;Password=MyPassword;"
字串包含下列關鍵字:
關鍵字 | 描述 |
---|---|
提供者 | 指定適用於 SQL Server 的 OLE DB 提供者 |
Data Source 或 Server | 指定伺服器的名稱。 |
Initial Catalog 或 Database | 指定伺服器上的資料庫名稱。 |
User ID 或 uid | 指定用於 SQL Server 驗證的使用者名稱。 |
Password 或 pwd | 指定用於 SQL Server 驗證的使用者密碼。 |
注意
如果您要連線至支援 Windows 驗證的資料來源提供者,您應該指定 Trusted_Connection=yes 或 Integrated Security = SSPI,而非在連接字串中指定使用者識別碼和密碼資訊。
提供者特定連接參數
除了 ADO 所定義的連接參數之外,提供者還支援數個提供者特定的連接參數。 如同 ADO 連接屬性,這些提供者特定屬性可以透過 Connection 的 Properties 集合來設定,也可以設定為 ConnectionString 的一部分。
參數 | Description |
---|---|
Trusted_Connection | 指出使用者驗證模式。 這可以設定為 [是] 或 [否]。 預設值為 [否]。 如果此屬性設定為 [是],則 SQLOLEDB 會使用 Microsoft Windows NT 驗證模式來授權使用者存取 Location 和 Datasource 屬性值所指定的 SQL Server 資料庫。 如果此屬性設定為 [否],則 SQLOLEDB 會使用混合模式來授權使用者存取 SQL Server 資料庫。 SQL Server 登入和密碼是在 User Id 和 Password 屬性中指定。 |
目前的語言 | 表示 SQL Server 語言名稱。 識別系統訊息選取與格式所使用的語言。 語言必須安裝在 SQL Server 上,否則開啟連線將會失敗。 |
網路位址 | 指出 Location 屬性所指定 SQL Server 的網路位址。 |
Network Library | 指出用來與 SQL Server 通訊的網路程式庫 (DLL) 名稱。 名稱不得包含路徑或 .dll 副檔名。 預設是由 SQL Server 用戶端組態所提供。 |
使用準備程序 | 決定當備妥命令 (由 Prepared 屬性) 時,SQL Server 是否建立暫存程序。 |
自動轉譯 | 指出是否轉換 OEM/ANSI 字元。 這個屬性可以設定為 True 或 False。 預設值是 True。 如果此屬性設定為 True,當多位元組字元字串從 SQL Server 擷取或傳送至其中時,SQLOLEDB 會執行 OEM/ANSI 字元轉換。 如果此屬性設定為 False,則 SQLOLEDB 不會在多位元組字元字串資料上執行 OEM/ANSI 字元轉換。 |
Packet Size | 指出網路封包大小 (以位元組為單位)。 封包大小屬性值必須介於 512 和 32767 之間。 預設的 SQLOLEDB 網路封包大小為 4096。 |
應用程式名稱 | 指出用戶端應用程式名稱。 |
工作站 ID | 識別工作站的字串。 |
Command 物件使用方式
SQLOLEDB 接受 ODBC、ANSI 和 SQL Server 特定 Transact-SQL 的混合物作為有效的語法。 例如,下列 SQL 陳述式會使用 ODBC SQL 逸出序列來指定 LCASE 字串函數:
SELECT customerid={fn LCASE(CustomerID)} FROM Customers
LCASE 會傳回字元字串,將所有大寫字元轉換為其小寫的對等項目。 ANSI SQL 字串函數 LOWER 會執行相同的作業,因此,下列 SQL 陳述式是相當於先前所顯示 ODBC 陳述式的 ANSI:
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_VARIANT 與 sql_variant 之間有一些關鍵差異。 ADO 也會處理儲存為 sql_variant 值的資料,與處理其他資料類型的方式不同。 下列清單說明當您存取儲存在類型 sql_variant 資料行中的 SQL Server 資料時,需要考量的問題。
在 MDAC 2.7、MDAC 2.8 和 Windows Data Access Components (Windows DAC) 6.0 中,OLE DB Provider for SQL Server 支援 sql_variant 類型。 OLE DB Provider for ODBC 則不支援。
sql_variant 類型與 DBTYPE_VARIANT 資料類型不完全相符。 sql_variant 類型支援 DBTYPE_VARIANT 不支援的一些新子類型,包括 GUID、ANSI (非 UNICODE) 字串,以及 BIGINT。 使用先前所列出以外的子類型將無法正常運作。
sql_variant 子類型 NUMERIC 不符合 DBTYPE_DECIMAL 的大小。
多個資料類型強制型轉會導致類型不符。 例如,將 GUID 子類型的 sql_variant 強制轉型為 DBTYPE_VARIANT 將會導致 safearray 的子類型 (位元組)。 將這個類型轉換回 sql_variant 會導致 array 的新子類型 (位元組)。
包含 sql_variant 資料的 Recordset 欄位可以遠端處理 (封送處理),或只有在 sql_variant 包含特定子類型時才保存。 嘗試使用下列不支援的子類型遠端處理或保存資料時,將會導致從 Microsoft Persistence Provider (MSPersist) 中的執行階段錯誤 (不支援的轉換):VT_VARIANT、VT_RECORD、VT_ILLEGAL、VT_UNKNOWN、VT_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。 如果已設定此屬性,且使用用戶端資料指標引擎開啟 Recordset (adUseClient),則 Recordset.Open 呼叫將會失敗。 如果已設定此屬性,且使用伺服器資料指標開啟 Recordset (adUseServer),則 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會將數個動態屬性插入未開啟的 Connection、Recordset 和 Command 物件的 Properties 集合中。
下表是每個動態屬性的 ADO 和 OLE DB 名稱交叉索引。 OLE DB 程式設計人員參考會根據「Description」一詞參照 ADO 屬性名稱。您可以在 OLE DB 程式設計人員參考中找到這些屬性的詳細資訊。 在索引中搜尋 OLE DB 屬性名稱,或參閱附錄 C:OLE DB 屬性。
連線動態屬性
下列屬性會新增至 Connection 物件的 Properties 集合。
ADO 屬性名稱 | OLE DB 屬性名稱 |
---|---|
Active Sessions | 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 |
Select 清單中的 ORDER BY 資料行 | DBPROP_ORDERBYCOLUMNSINSELECT |
輸出參數使用 | DBPROP_OUTPUTPARAMETERAVAILABILITY |
傳址存取子 | DBPROP_BYREFACCESSORS |
密碼 | DBPROP_AUTH_PASSWORD |
保存安全性資訊 | DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO |
持續性 ID 型別 | DBPROP_PERSISTENTIDTYPE |
準備中止行為 | DBPROP_PREPAREABORTBEHAVIOR |
準備認可行為 | DBPROP_PREPARECOMMITBEHAVIOR |
程序詞彙 | DBPROP_PROCEDURETERM |
提示 | DBPROP_INIT_PROMPT |
提供者易記名稱 | DBPROP_PROVIDERFRIENDLYNAME |
Provider Name | DBPROP_PROVIDERFILENAME |
提供者版本 | DBPROP_PROVIDERVER |
唯讀資料來源 | 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 物件的 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_OTHERUPDATEDELETE |
可見的其他插入 | DBPROP_OTHERINSERT |
輸出編碼屬性 | 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 Root | SSPROP_STREAM_XMLROOT |
XSL | SSPROP_STREAM_XSL |
如需 Microsoft SQL Server OLE DB 提供者的特定實作詳細資料和功能資訊,請參閱 SQL Server提供者。
另請參閱
ConnectionString 屬性 (ADO)Provider 屬性 (ADO)Recordset 物件 (ADO)