日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

微软ODBC服务器驱动,Windows ODBC 驱动程序中的连接弹性

發布時間:2025/3/12 windows 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微软ODBC服务器驱动,Windows ODBC 驱动程序中的连接弹性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Windows ODBC 驅動程序中的連接彈性

09/01/2020

本文內容

為了確保應用程序能與 Azure SQL 數據庫 保持連接,Windows 上的 ODBC 驅動程序可以還原空閑連接。

重要

Microsoft Azure SQL 數據庫和 SQL Server 2014(及更高版本)服務器版本支持連接復原能力功能。

若要詳細了解空閑連接復原,請參閱技術文章 - 空閑連接復原。

為控制重新連接行為,Windows 上 的 ODBC Driver for SQL Server 有以下兩個選項:

連接重試計數。

連接重試計數可在發生連接失敗時,控制重新連接嘗試的次數。 有效值范圍為 0 到 255。 零 (0) 表示不嘗試重新連接。 默認值為一次重新連接嘗試。

在以下情況下可以修改連接重試次數:

定義或修改一個將 ODBC Driver for SQL Server 與“連接重試計數”**** 控件結合使用的數據源。

使用 ConnectRetryCount 連接字符串關鍵字。

若要檢索連接重試嘗試的次數,請使用 SQL_COPT_SS_CONNECT_RETRY_COUNT(只讀)連接屬性****。 如果應用程序連接到的服務器并不支持連接復原,SQL_COPT_SS_CONNECT_RETRY_COUNT 將返回 0。

連接重試間隔。

連接重試間隔指定每次連接重試嘗試之間的秒數。 有效值介于 1 和 60 之間。 重新連接的總時間不能超過連接超時(SQLSetStmtAttr 中的 SQL_ATTR_QUERY_TIMEOUT)。 默認值為 10 秒。

在以下情況下可以修改連接重試間隔:

定義或修改一個將 ODBC Driver for SQL Server 與“連接重試間隔”**** 控件結合使用的數據源。

使用 ConnectRetryInterval 連接字符串關鍵字。

若要檢索連接重試間隔的時間長度,請使用 SQL_COPT_SS_CONNECT_RETRY_INTERVAL(只讀)連接屬性****。

如果應用程序建立與 SQL_DRIVER_COMPLETE_REQUIRED 的連接,并稍后嘗試通過斷開的連接執行語句,ODBC 驅動程序將不再顯示該對話框。 此外,在恢復正在進行期間,

在恢復期間,任何對 SQLGetConnectAttr(SQL_COPT_SS_CONNECTION_DEAD) 的調用都必須返回 SQL_CD_FALSE********。

如果恢復失敗,任何對 SQLGetConnectAttr(SQL_COPT_SS_CONNECTION_DEAD) 的調用都必須返回 SQL_CD_TRUE********。

在服務器上執行命令的任何函數都會返回以下狀態代碼:

狀態

Message

IMC01

連接已斷開,且不能恢復。 客戶端驅動程序嘗試一次或多次恢復連接,但所有嘗試均失敗。 增大 ConnectRetryCount 的值以增加恢復嘗試的次數。

IMC02

服務器未收到恢復嘗試,無法恢復連接。

IMC03

服務器未保留恢復嘗試過程中請求的確切客戶端 TDS 版本,無法恢復連接。

IMC04

服務器未保留恢復嘗試過程中請求的確切服務器主要版本,無法恢復連接。

IMC05

連接已斷開,且不能恢復。 服務器將連接標記為不可恢復。 未嘗試還原連接。

IMC06

連接已斷開,且不能恢復。 客戶端驅動程序將連接標記為不可恢復。 未嘗試還原連接。

示例

以下示例包含兩個函數。 func1 演示如何通過使用 Windows 上的 ODBC Driver for SQL Server 的數據源名稱 (DSN) 建立連接。 DSN 使用 SQL Server 身份驗證,并指定用戶 ID。 然后,func1**** 使用 SQL_COPT_SS_CONNECT_RETRY_COUNT**** 檢索連接重試次數。

func2 使用 SQLDriverConnect、 ConnectRetryCount 連接字符串關鍵字和連接屬性,檢索連接重試和重試間隔的設置。

// Connection_resiliency.cpp

// compile with: odbc32.lib

#include

#include

#include

#include

void func1() {

SQLHENV henv;

SQLHDBC hdbc;

SQLHSTMT hstmt;

SQLRETURN retcode;

SQLSMALLINT i = 21;

// Allocate environment handle

retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);

// Set the ODBC version environment attribute

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {

retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);

// Allocate connection handle

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {

retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);

// Set login timeout to 5 seconds

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {

SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, 0);

// Connect to data source

retcode = SQLConnect(hdbc, (SQLCHAR*) "MyDSN", SQL_NTS, (SQLCHAR*) "userID", SQL_NTS, (SQLCHAR*) "password_for_userID", SQL_NTS);

retcode = SQLGetConnectAttr(hdbc, SQL_COPT_SS_CONNECT_RETRY_COUNT, &i, SQL_IS_INTEGER, NULL);

// Allocate statement handle

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {

retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);

// Process data

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {

SQLFreeHandle(SQL_HANDLE_STMT, hstmt);

}

SQLDisconnect(hdbc);

}

SQLFreeHandle(SQL_HANDLE_DBC, hdbc);

}

}

SQLFreeHandle(SQL_HANDLE_ENV, henv);

}

}

void func2() {

SQLHENV henv;

SQLHDBC hdbc1;

SQLHSTMT hstmt;

SQLRETURN retcode;

SQLSMALLINT i = 21;

#define MAXBUFLEN 255

SQLCHAR ConnStrIn[MAXBUFLEN] = "DRIVER={ODBC Driver 17 for SQL Server};SERVER=server_that_supports_connection_resiliency;UID=userID;PWD= password_for_userID;ConnectRetryCount=2";

SQLCHAR ConnStrOut[MAXBUFLEN];

SQLSMALLINT cbConnStrOut = 0;

// Allocate environment handle

retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);

// Set the ODBC version environment attribute

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {

retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3_80, SQL_IS_INTEGER);

// Allocate connection handle

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {

retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1);

// Set login timeout to 5 seconds

if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {

// SQLSetConnectAttr(hdbc1, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, 0);

retcode = SQLDriverConnect(hdbc1, NULL, ConnStrIn, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_NOPROMPT);

}

retcode = SQLGetConnectAttr(hdbc1, SQL_COPT_SS_CONNECT_RETRY_COUNT, &i, SQL_IS_INTEGER, NULL);

retcode = SQLGetConnectAttr(hdbc1, SQL_COPT_SS_CONNECT_RETRY_INTERVAL, &i, SQL_IS_INTEGER, NULL);

}

}

}

int main() {

func1();

func2();

}

另請參閱

總結

以上是生活随笔為你收集整理的微软ODBC服务器驱动,Windows ODBC 驱动程序中的连接弹性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。