Поделиться через


Как выделить дескрипторы и соединиться с SQL Server (ODBC)

Выделение дескрипторов и соединение с SQL Server

  1. Включите файлы заголовка ODBC Sql.h, Sqlext.h, Sqltypes.h.

  2. Включите зависящий от драйвера SQL Server файл заголовка Odbcss.h.

  3. Вызовите функцию SQLAllocHandle с параметром HandleType, установленным в значение SQL_HANDLE_ENV, для инициализации ODBC и выделите дескриптор среды.

  4. Вызовите функцию SQLSetEnvAttr с параметром Attribute, имеющим значение SQL_ATTR_ODBC_VERSION, и параметром ValuePtr, имеющим значение SQL_OV_ODBC3 для указания, что приложение будет использовать вызовы функции формата ODBC 3.x.

  5. При необходимости вызовите функцию SQLSetEnvAttr для установки других параметров среды, или функцию SQLGetEnvAttr для их получения.

  6. Для выделения дескриптора соединения вызовите функцию SQLAllocHandle с параметром HandleType, установленным в значение SQL_HANDLE_STMT.

  7. При необходимости вызовите функцию SQLSetConnectAttr для установки параметров соединения, или функцию SQLGetConnectAttr для их получения.

  8. Вызовите функцию SQLConnect для использования существующего источника данных для соединения с SQL Server.

    или

    Вызовите функцию SQLDriverConnect, чтобы использовать строку соединения для соединения с SQL Server.

    Минимальная строка соединения SQL Server имеет одну из двух форм:

    DSN=dsn_name;Trusted_connection=yes;
    DRIVER={SQL Server Native Client 10.0};SERVER=server;Trusted_connection=yes;
    

    Если строка соединения не полная, функция SQLDriverConnect может запросить требуемые сведения. Это управляется значением, указанным для параметра DriverCompletion.

    — или —

    Для создания строки соединения и соединения с SQL Server, последовательно вызовите несколько раз функцию SQLBrowseConnect.

  9. При необходимости, для получения атрибутов и поведения драйвера для источника данных SQL Server можно вызвать функцию SQLGetInfo.

  10. Выделите и используйте инструкции.

  11. Вызовите функцию SQLDisconnect, чтобы отсоединиться от SQL Server и сделать дескриптор соединения доступным для нового соединения.

  12. Для освобождения дескриптора соединения вызовите функцию SQLFreeHandle с параметром HandleType, установленным в значение SQL_HANDLE_DBC.

  13. Для освобождения дескриптора среды вызовите функцию SQLFreeHandle с параметром HandleType, установленным в значение SQL_HANDLE_ENV.

Примечание по безопасностиПримечание по безопасности

При возможности используйте проверку подлинности Windows. Если проверка подлинности Windows недоступна, запросите у пользователя ввод учетных данных во время выполнения. Избегайте хранения учетных данных в файле. Если необходимо сохранить учетные данные, зашифруйте их с помощью API-интерфейса шифрования Win32.

Пример

В этом примере показано, как вызывать функцию SQLDriverConnect для соединения с экземпляром SQL Server без необходимости в существовании источника данных ODBC. Передача функции SQLDriverConnect незавершенной строки соединения приводит к запросу драйвера ODBC к пользователю на ввод отсутствующих сведений.

#define MAXBUFLEN   255

SQLHENV      henv = SQL_NULL_HENV;
SQLHDBC      hdbc1 = SQL_NULL_HDBC;
SQLHSTMT      hstmt1 = SQL_NULL_HSTMT;

SQLCHAR      ConnStrIn[MAXBUFLEN] =
         "DRIVER={SQL Server Native Client 10.0};SERVER=MyServer";

SQLCHAR      ConnStrOut[MAXBUFLEN];
SQLSMALLINT   cbConnStrOut = 0;

// Make connection without data source. Ask that driver 
// prompt if insufficient information. Driver returns
// SQL_ERROR and application prompts user
// for missing information. Window handle not needed for
// SQL_DRIVER_NOPROMPT.
retcode = SQLDriverConnect(hdbc1,      // Connection handle
                  NULL,         // Window handle
                  ConnStrIn,      // Input connect string
                  SQL_NTS,         // Null-terminated string
                  ConnStrOut,      // Address of output buffer
                  MAXBUFLEN,      // Size of output buffer
                  &cbConnStrOut,   // Address of output length
                  SQL_DRIVER_PROMPT);