連接到資料來源 (ODBC)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

配置環境和連線處理並設定任何連接屬性之後,應用程式會連線到資料來源或驅動程式。 有三個函式可用來連線:

  • SQLConnect

  • SQLDriverConnect

  • SQLBrowseConnect

如需建立資料來源連接的詳細資訊,包括可用的各種連接字串選項,請參閱 搭配 SQL Server Native Client 使用連接字串關鍵字。

SQLConnect

SQLConnect 是最簡單的連線函式。 它接受三個參數:資料來源名稱、使用者識別碼和密碼。 當這三個參數包含連線到資料庫所需的所有資訊時,請使用 SQLConnect 。 若要這樣做,請使用 SQLDataSources 建置資料來源清單;提示使用者輸入資料來源、使用者識別碼和密碼,然後呼叫 SQLConnect

SQLConnect 假設資料來源名稱、使用者識別碼和密碼足以連線到資料來源,而且 ODBC 資料來源包含 ODBC 驅動程式必須建立連線的所有其他資訊。 不同于 SQLDriverConnect 和 SQLBrowseConnect SQLConnect 不會使用連接字串。

SQLDriverConnect

當需要比資料來源名稱、使用者識別碼和密碼更多的資訊時,就會使用 SQLDriverConnect 。 SQLDriverConnect 的其中一個參數 是包含驅動程式特定資訊的連接字串。 基於下列原因,您可以使用 SQLDriverConnect 而非 SQLConnect

  • 若要在連線時間指定驅動程式特定資訊。

  • 要求驅動程式提示使用者提供連線資訊。

  • 在不使用 ODBC 資料來源的情況下連線。

SQLDriverConnect 連接字串包含一系列關鍵字/值組,指定 ODBC 驅動程式支援的所有連接資訊。 除了驅動程式支援的所有連線資訊,每個驅動程式都支援標準 ODBC 關鍵字(DSN、FILEDSN、DRIVER、UID、PWD、PWD 和 SAVEFILE)。 SQLDriverConnect 可用來連接沒有資料來源。 例如,設計為建立 SQL Server 實例的「DSN 減少」連線的應用程式,可以使用定義登入識別碼、密碼、網路程式庫、伺服器名稱以連線的連接字串來呼叫 SQLDriverConnect ,以及要使用的預設資料庫。

使用 SQLDriverConnect 時,有兩個選項可提示使用者輸入任何所需的連線資訊:

  • 應用程式對話方塊

    您可以建立應用程式對話方塊來提示連線資訊,然後呼叫 SQLDriverConnect ,並將 Null 視窗控制碼和 DriverCompletion 設定為 SQL_DRIVER_NOPROMPT。 這些參數設定可防止 ODBC 驅動程式開啟自己的對話方塊。 當控制應用程式的使用者介面很重要時,會使用這個方法。

  • 驅動程式對話方塊

    您可以撰寫應用程式程式碼,將有效的視窗控制碼傳遞至 SQLDriverConnect ,並將 DriverCompletion 參數設定 SQL_DRIVER_COMPLETE、SQL_DRIVER_PROMPT或SQL_DRIVER_COMPLETE_REQUIRED。 驅動程式接著會產生對話方塊,以提示使用者輸入連線資訊。 此方法可簡化應用程式程式碼。

SQLBrowseConnect

SQLBrowseConnect 就像 SQLDriverConnect,會使用連接字串。 不過,藉由使用 SQLBrowseConnect ,應用程式可以在執行時間反復建構完整的連接字串。 這可以讓應用程式執行兩個動作:

  • 建置自己的對話方塊來提示此資訊,藉此保留對其使用者介面的控制。

  • 瀏覽系統中,特定驅動程式可使用的資料來源 (可能是透過數個步驟)。

    例如,使用者介面可能會先瀏覽網路中的伺服器,然後在選擇伺服器之後,瀏覽伺服器中可由驅動程式存取的資料庫。

當 SQLBrowseConnect 完成成功的連線時 ,它會傳回連接字串,該連接字串可用於後續對 SQLDriverConnect 的呼叫。

SQL Server Native Client ODBC 驅動程式一律會在成功的 SQLConnect、 SQLDriverConnect SQLBrowseConnect 上傳回SQL_SUCCESS_WITH_INFO。 當 ODBC 應用程式在取得SQL_SUCCESS_WITH_INFO之後呼叫 SQLGetDiagRec 時,可以接收下列訊息:

5701
指出如果資料來源沒有預設資料庫,SQL Server 會將使用者的內容放入資料來源中定義的預設資料庫,或放入針對連接中使用的登入識別碼所定義的預設資料庫。

5703
指出伺服器上所使用的語言。

下列範例顯示系統管理員成功連線時傳回的訊息:

szSqlState = "01000", *pfNativeError = 5701,  
szErrorMsg="[Microsoft][SQL Server Native Client][SQL Server]  
       Changed database context to 'pubs'."  
szSqlState = "01000", *pfNativeError = 5703,  
szErrorMsg="[Microsoft][SQL Server Native Client][SQL Server]  
       Changed language setting to 'us_english'."  

您可以忽略訊息 5701 和 5703;它們只是資訊。 不過,您不應該忽略SQL_SUCCESS_WITH_INFO傳回碼,因為可能會傳回 5701 或 5703 以外的訊息。 例如,如果驅動程式使用過期的目錄預存程式連接到執行 SQL Server 實例的伺服器,則SQL_SUCCESS_WITH_INFO之後透過 SQLGetDiagRec 傳回的錯誤之一為:

SqlState:   01000  
pfNative:   0  
szErrorMsg: "[Microsoft][SQL Server Native Client]The ODBC  
            catalog stored procedures installed on server  
            my65server are version 06.50.0193; version 07.00.0205  
            or later is required to ensure proper operation.  
            Please contact your system administrator."  

SQL Server 連線之應用程式的錯誤處理函式應該呼叫 SQLGetDiagRec ,直到傳回SQL_NO_DATA為止。 然後,它應該會針對具有 5701 或 5703 之 pfNative 程式 代碼以外的 任何訊息採取行動。

另請參閱

與 SQL Server 進行通訊 (ODBC)