符合性
引進版本: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 時,所有後續呼叫 SQLDataSources 且 Direction 設為 SQL_FETCH_NEXT 時,僅回傳使用者 DSN。 當 Direction 設為 SQL_FETCH_FIRST_SYSTEM 時,所有後續呼叫 SQLDataSources 且 Direction 設為 SQL_FETCH_NEXT 只會回傳系統 DSN。
ServerName
[輸出]指標指向緩衝區,回傳資料來源名稱。
若 ServerName 為 NULL,NameLength1Ptr 仍會回傳 ServerName 指向緩衝區中可返回的字元總數(不含字元資料的 null-終止字元)。
緩衝長度1
[輸入]*ServerName 緩衝區長度(以字元計);此長度不必超過SQL_MAX_DSN_LENGTH加上空終止特徵。
姓名長度1Ptr
[輸出]指標指向緩衝區,回傳 *ServerName 中可返回的字元總數(不含空終止字元)。 若可回傳的字元數大於或等於 BufferLength1,則 *ServerName 中的資料來源名稱會截斷為 BufferLength1 減去一個空終止字元的長度。
Description
[輸出]指標指向緩衝區,回傳與資料來源相關的驅動程式描述。 例如,dBASE 或 SQL Server。
若 Description 為 NULL,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 呼叫 SQLExecute、SQLExecDirect 或 SQLMoreResults,並傳回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 函式 |