SQLDataSources 函式

符合性
引進版本:ODBC 1.0 標準合規性:ISO 92

總結
SQLDataSources 會回傳關於資料來源的資訊。 此功能僅由驅動程式管理器實作。

Syntax

  
SQLRETURN SQLDataSources(  
     SQLHENV          EnvironmentHandle,  
     SQLUSMALLINT     Direction,  
     SQLCHAR *        ServerName,  
     SQLSMALLINT      BufferLength1,  
     SQLSMALLINT *    NameLength1Ptr,  
     SQLCHAR *        Description,  
     SQLSMALLINT      BufferLength2,  
     SQLSMALLINT *    NameLength2Ptr);  

論點

環境控制
[輸入]環境控制。

方向
[輸入]決定驅動管理員回傳資訊的資料來源。 可以是:

SQL_FETCH_NEXT(取下一個資料來源名稱)、SQL_FETCH_FIRST(從清單開頭取回)、SQL_FETCH_FIRST_USER(取第一使用者 DSN)或 SQL_FETCH_FIRST_SYSTEM(取第一個系統 DSN)。

Direction 設為 SQL_FETCH_FIRST 時,後續呼叫 SQLDataSources 並將 Direction 設為 SQL_FETCH_NEXT,會回傳使用者與系統的 DSN。 當 Direction 設為 SQL_FETCH_FIRST_USER 時,所有後續呼叫 SQLDataSourcesDirection 設為 SQL_FETCH_NEXT 時,僅回傳使用者 DSN。 當 Direction 設為 SQL_FETCH_FIRST_SYSTEM 時,所有後續呼叫 SQLDataSourcesDirection 設為 SQL_FETCH_NEXT 只會回傳系統 DSN。

ServerName
[輸出]指標指向緩衝區,回傳資料來源名稱。

ServerNameNULL,NameLength1Ptr 仍會回傳 ServerName 指向緩衝區中可返回的字元總數(不含字元資料的 null-終止字元)。

緩衝長度1
[輸入]*ServerName 緩衝區長度(以字元計);此長度不必超過SQL_MAX_DSN_LENGTH加上空終止特徵。

姓名長度1Ptr
[輸出]指標指向緩衝區,回傳 *ServerName 中可返回的字元總數(不含空終止字元)。 若可回傳的字元數大於或等於 BufferLength1,則 *ServerName 中的資料來源名稱會截斷為 BufferLength1 減去一個空終止字元的長度。

Description
[輸出]指標指向緩衝區,回傳與資料來源相關的驅動程式描述。 例如,dBASE 或 SQL Server。

DescriptionNULL,NameLength2Ptr 仍會回傳描述所指向緩衝區中可返回的字元總 數(不含字元資料的 null-終止字元)。

緩衝長度2
[輸入]*描述 緩衝區的字元長度。

名稱長度2Ptr
[輸出]指標指向緩衝區,回傳*描述中可返回的字元總數(不含空終止字元)。 若可回傳字元數大於或等於 BufferLength2,則 *Description 中的驅動描述會截斷為 BufferLength2 減去空終止字元長度。

Returns

SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_NO_DATA、SQL_ERROR或SQL_INVALID_HANDLE。

Diagnostics

SQLDataSources 回傳 SQL_ERROR 或 SQL_SUCCESS_WITH_INFO 時,可透過呼叫 SQLGetDiagRec 取得對應的 SQLSTATE 值,並將 HandleType 設為 SQL_HANDLE_ENV,Handle 為 Handle 下表列出 SQLDataSources 通常回傳的 SQLSTATE 值,並在此函式的情境中解釋每個值;「(DM)」符號會置於驅動程式管理器回傳的 SQLSTATE 描述前。 除非另有說明,否則與每個 SQLSTATE 值相關聯的傳回碼會SQL_ERROR。

SQLSTATE 錯誤 說明
01000 一般警告 (DM)駕駛經理專屬資訊訊息。 (函式會傳回SQL_SUCCESS_WITH_INFO。)
01004 字串數據,右截斷 (DM) 緩衝區 *ServerName 不足以回傳完整的資料來源名稱。 因此,名稱被縮短。 整個資料來源名稱的長度會以 *NameLength1ptr 格式回傳。 (函式會傳回SQL_SUCCESS_WITH_INFO。)

(DM) 緩衝區 *描述 不夠大,無法回傳完整的驅動程式描述。 因此,描述被刪減了。 未截斷資料來源描述的長度會回傳在 *NameLength2Ptr。 (函式會傳回SQL_SUCCESS_WITH_INFO。)
HY000 一般誤差 (DM) 發生錯誤時,沒有特定的 SQLSTATE 存在,也沒有針對實作定義的 SQLSTATE。 *MessageText 緩衝區中 SQLGetDiagRec回的錯誤訊息描述錯誤及其原因。
HY001 記憶體配置錯誤 (DM) 驅動程式管理器無法分配支援執行或完成函式所需的記憶體。
HY010 函式順序錯誤 (DM) 已針對 StatementHandle 呼叫 SQLExecuteSQLExecDirectSQLMoreResults,並傳回SQL_PARAM_DATA_AVAILABLE。 在擷取所有數據流參數的數據之前,會呼叫此函式。
HY013 記憶體管理錯誤 無法處理函式呼叫,因為基礎記憶體物件無法存取,可能是因為記憶體不足的情況。
HY090 無效的字串或緩衝區長度 (DM) 參數 BufferLength1 指定的值小於 0。

(DM) 參數 BufferLength2 指定的值小於 0。
HY103 無效的取回碼 (DM) 為 Direction 參數指定的值不等於 SQL_FETCH_FIRST、SQL_FETCH_FIRST_USER、SQL_FETCH_FIRST_SYSTEM 或 SQL_FETCH_NEXT。
HY117 聯機因為未知的交易狀態而暫停。 只允許中斷連線和唯讀函式。 (DM) 如需暫停狀態的詳細資訊,請參閱 SQLEndTran 函式

評論

由於 SQLDataSources 實作於驅動程式管理器中,因此無論特定驅動程式是否符合標準,都能支援所有驅動程式。

應用程式可以多次呼叫 SQLDataSources 以取得所有資料來源名稱。 驅動程式管理器會從系統資訊中取得這些資訊。 當資料來源名稱不再存在時,驅動程式管理器會回傳SQL_NO_DATA。 如果 SQLDataSources 在回傳 SQL_NO_DATA 後立即以 SQL_FETCH_NEXT 呼叫,則會回傳第一個資料來源名稱。 關於應用程式如何使用 SQLDataSources 回傳的資訊,請參閱 選擇資料來源或驅動程式

如果第一次呼叫時就傳SQL_FETCH_NEXT給 SQLDataSources ,它會回傳第一個資料來源名稱。

驅動程式決定資料來源名稱如何映射到實際資料來源。

如需相關信息 看!
發現並列出連接資料來源所需的數值 SQLBrowseConnect 函式
連線至資料來源 SQLConnect 函式
使用 連接字串 或對話框連接到數據源 SQLDriverConnect 函式
傳回驅動程式描述和屬性 SQLDrivers 函式