微软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();

}

另请参阅

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/562109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML+CSS+JS实现 ❤️3D悬浮粒子翻转动效❤️

效果演示&#xff1a; three基于canvas制作全屏的3D方块粒子悬停&#xff0c;跟随鼠标移动3D翻转动画特效。支持360度无死角翻转效果。 代码目录&#xff1a; 主要代码实现&#xff1a; html代码 : <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&qu…

3 配置ftp文件服务器,03-FTP和TFTP配置

1.1 FTP简介FTP(File Transfer Protocol&#xff0c;文件传输协议)用于在远端服务器和本地主机之间传输文件&#xff0c;是IP网络上传输文件的通用协议。在万维网(WWW&#xff0c;World Wide Web)出现以前&#xff0c;用户使用命令行方式传输文件&#xff0c;最通用的应用程序…

HTML+CSS+JS实现 ❤️新型冠状病毒射击小游戏❤️

效果演示&#xff1a; 代码目录&#xff1a; 主要代码实现&#xff1a; 部分JS代码 : var stage {w: 1280,h: 720 }var _pexcanvas document.getElementById("canvas"); _pexcanvas.width stage.w; _pexcanvas.height stage.h; var ctx _pexcanvas.getContext(…

config设置源 使用pip_python pip源配置

pip源配置文件可以放置的位置&#xff1a;Linux/Unix:/etc/pip.conf~/.pip/pip.conf~/.config/pip/pip.confMac OSX:~/Library/Application Support/pip/pip.conf~/.pip/pip.conf/Library/Application Support/pip/pip.confWindows:%APPDATA%\pip\pip.ini%HOME%\pip\pip.iniC:\…

微信小程序可以加服务器上的字体,微信小程序中自定义字体

微信小程序支持自定义字体开放出来也有段时间&#xff0c;这边整理下使用自定义字体中&#xff0c;容易忽略的一些问题&#xff0c;和简便的全局自定义方式。如果是同时加载两种字体包&#xff0c;先下载下来的会被后下载下来的字体包给覆盖。官网接口文档因此字体包有却只能用…

HTML+CSS+JS实现 ❤️3D奥运五环图形特效❤️

效果演示&#xff1a; 代码目录&#xff1a; 主要代码实现&#xff1a; CSS样式&#xff1a; /*** debug in progress ***/:root {--metal: #ffffff45;--gold: repeating-conic-gradient(#edc800 0deg, #ffe800 15deg, #f3cf00 30deg, #e3b600 45deg, #edc800 60deg) 10% 10%;…

python 替换文本 通配符_使用通配符搜索和替换文本文件中的字符串

尝试在python中对文本文件的内容使用通配符进行搜索/替换&#xff1a;如果文本文件的内容看起来像&#xff1a;"all_bcar_v0038.ma";"all_bcar_v0002.ma";"all_bcar_v0011.ma";"all_bcar_v0011.ma";希望用v1000替换所有版本号以获得以…

【CSDN】-官方插件推荐懒人必备神器

前言&#xff1a; 插件(Plug-in,又称addin、add-in、addon或add-on,又译外挂)是一种遵循一定规范的应用程序接口编写出来的程序。其只能运行在程序规定的系统平台下&#xff08;可能同时支持多个平台&#xff09;&#xff0c;而不能脱离指定的平台单独运行。因为插件需要调用原…

notification源码分析_Ceilometer之notification agent代码分析

说完了polling agent&#xff0c;咱们接着说notification agent&#xff0c;打开setup.cfg文件&#xff0c;找到入口 ceilometer-agent-notification ceilometer.cmd.agent_notification:main&#xff0c;打开文件&#xff0c;发现启动了NotificationService服务&#xff0c;然…

HTML+CSS+JS实现 ❤️3D网状球体动画特效❤️

效果演示&#xff1a; 代码目录&#xff1a; 主要代码实现&#xff1a; CSS样式&#xff1a; property --color-position {syntax: <length-percentage>;inherits: false;initial-value: 30%; }body {margin: 0;overflow: hidden;--color-position: 30%;background: rad…

怎么读取can报文_【案例】东风天龙“仪表未收到EECU报文”

来呀&#xff01;来呀&#xff01;关注我吧&#xff01;&#xff01; 车辆信息车型东风天龙发动机ISD270 50ECU型号CM2150E尿素泵依米泰克故障现象卡车司机反馈车子跑起来没有力、爬坡无力、仪表上指示灯亮和仪表未收到EECU报文故障排除&#xff1a;检测仪无法进入系…

HTML+CSS+JS实现 ❤️悬挂摇摆的弹珠动画特效❤️

效果演示&#xff1a; 代码目录&#xff1a; 主要代码实现&#xff1a; 部分HTML代码 : <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http:…

中如何对一个数取余_如何找到自己在一个城市中的定位?

更多资讯&#xff0c;关注微信公众号&#xff1a;好房U购四川。如何找到自己在一个城市中的定位&#xff1f;最近&#xff0c;各大企业都纷纷启动了校招工作。有条件的&#xff0c;全国都在跑&#xff1b;至少&#xff0c;川内都要跑一跑。而毕业生最迷茫的&#xff0c;不过这两…

HTML+CSS+JS实现 ❤️翻页倒计时ui特效❤️

效果演示&#xff1a; 代码目录&#xff1a; 主要代码实现&#xff1a; CSS样式&#xff1a; charset "utf-8"; body {background-color: #f2f1ed; }.wrap {position: absolute;bottom: 0;top: 0;left: 0;right: 0;margin: auto;height: 310px; }a {text-decoration…

kafka 重新分配节点_Kafka扩容节点和分区迁移

背景最近工作中碰到Kafka 节点的网卡成为了性能瓶颈&#xff0c;为了提高整个消息队列的输出吞吐量&#xff0c;需要将数据量大的Topic 迁移到新的Kafka节点上。操作步骤1. 新建Kafka 节点通过CDH 管理界面在新机器上安装Kafka 服务&#xff0c;并得到相应的Kafka broker id。(…

HTML+CSS+JS实现 ❤️CSS3图片遮罩高亮显示❤️

效果演示&#xff1a; GIF压缩太大、故显示图片查看吧 代码目录&#xff1a; 主要代码实现&#xff1a; CSS样式&#xff1a; charset "utf-8"; * {margin: 0;padding: 0;list-style: none; }body {background-color: #1B1B1B }img {border: 0;cursor: pointer; }a …

rust windows 交叉编译_树莓派上使用rust:交叉编译

方法一树莓派Zero 用的 BCM2835 是 armv6 架构的。arm-linux-gnueabihf-gccpacaur -S arm-linux-gnueabihf-gccrustup target add arm-unknown-linux-gnueabihfCargo 设置需要给 cargo 的配置文件里面指定 arm-unknown-linux-gnueabihf 的 linker.默认配置一般在 ~/.cargo/conf…

HTML+CSS+JS实现 ❤️响应式图文卡片滑块展示特效❤️

效果演示&#xff1a; 代码目录&#xff1a; 主要代码实现&#xff1a; CSS样式&#xff1a; import url("https://fonts.googleapis.com/css?familyQuicksand:400,500,700&subsetlatin-ext"); html {position: relative;overflow-x: hidden !important; }body…

代码写好了怎么在php里裕兴_8 行代码用Python画一个中国地图

源 / SegmentFaultJupyter首先&#xff0c;第一神器是Jupyter。如果你是第一次使用&#xff0c;可能搞不清楚它的开发者做这么个鬼东西出来干什么&#xff0c;说它是博客系统也不像&#xff0c;说它是web服务器也不像&#xff0c;但它就是有用。因为我们传统的web开发首先想的就…

❤️六W字《计算机基础知识》(三)(建议收藏)❤️

推荐阅读&#xff1a; ❤️《计算机基础知识》&#xff08;一&#xff09;&#xff08;建议收藏&#xff09;❤️ ❤️《计算机基础知识》&#xff08;二&#xff09;&#xff08;建议收藏&#xff09;❤️ ❤️ java项目精品实战案例 ❤️ 101. Internet上&#xff0c;访问We…