首页 > 其他分享 >odbc客户端连接到服务器

odbc客户端连接到服务器

时间:2024-01-24 22:56:11浏览次数:32  
标签:HANDLE 句柄 SQLAllocHandle odbc SQL 服务器 ODBC 连接 客户端

让我们看一个示例代码client1.c。第一个客户端应用程序连接到数据库,然后退出。

#include <sql.h>
#include <sqlext.h>
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char * argv[] ){
	SQLRETURN   result;
	SQLHENV     henv;
	SQLHDBC     hdbc;
	
	// 1.申请环境句柄
	SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
	// 2.设置环境属性
	SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
	// 3.申请连接句柄
	SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);

	result = SQLConnect(hdbc,  // connection handle
						argv[1], SQL_NTS,   // data source name
						argv[2], SQL_NTS,   // user name
						argv[3], SQL_NTS); // password
	if(result==SQL_SUCCESS || result==SQL_SUCCESS_WITH_INFO){
		printf("connection ok...\n");
		exit(0);
	}
	else{
		printf("connection failed...\n");
		exit(1);
	}
}

使用ODBC时您会注意到的第一件事是必须创建大量句柄。句柄是一种不透明的数据类型?句柄后面有一个数据结构,但您无法访问它。

使用句柄只能做三件事:创建它、销毁它以及将它传递给函数。

ODBC句柄类型

ODBC定义了四种不同类型的句柄:

  1. SQLHENV 是一个环境句柄,它充当ODBC API的顶级句柄。您必须先创建一个环境句柄,然后才能使用ODBC执行任何其他操作。
  2. SQLHDBC 是数据库连接的句柄。连接到数据库时,会初始化 SQLHDBC 句柄。拥有有效的数据库连接句柄后,您可以分配语句句柄。
  3. 语句句柄的类型为 SQLHSTMT。 您必须先创建语句句柄,然后才能向数据库发送命令。结果集信息通过 SQLHSTMT 句柄返回。
  4. ODBC定义的最后一个句柄类型是 SQLHDESCSQLHDESC 句柄是描述符句柄。描述符句柄在编写ODBC驱动程序(而不是客户端应用程序)时使用,并且可以在复杂的错误处理代码中使用。

您在第13行创建一个环境句柄,并通过调用 SQLAllocHandle (SQL_HANDLE_ENV,...)对其进行初始化。SQLAllocHandle()函数有三个参数。第一个参数指定您要创建的句柄类型。第二个参数指定新句柄的父级。最后一个参数是指向要初始化的句柄的指针。表1列出了如何使用 SQLAllocHandle() 分配不同类型的句柄。请注意,环境句柄没有父级,因此您将 SQL_NULL_HANDLE 作为第二个参数传递。

表1 SQLAllocHandle() 参数

符号名称 新句柄的数据类型 家长类型 描述
SQL_HANDLE_ENV SQLHENV 没有父级 环境句柄
SQL_HANDLE_DBC SQLHDBC SQLHENV 数据库连接句柄
SQL_HANDLE_STMT SQLHSTMT SQLHDBC 语句句柄
SQL_HANDLE_DESC SQLHDESC SQLHDBC 描述符句柄

获得初始化的环境句柄后,您需要告诉 ODBC 库您希望找到哪个版本的 ODBC。使用 SQLSetEnvAttr() 函数告诉 ODBC 您将使用 ODBC 3.x 协议进行交互。

在第 15 行,您分配一个连接句柄(SQLHDBC)。将此函数调用与之前对SQLAllocHandle()的调用进行比较:

SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv ); 
SQLAllocHandle( SQL_HANDLE_DBC, henv, &hdbc );

您可以在表1中看到环境句柄没有父级。当您分配环境句柄时,您传递 SQL_NULL_HANDLE而不是父级句柄。当您分配连接句柄时,您是在环境上下文中分配它的;您提供一个环境句柄作为 SQLAllocHandle()的第二个参数。

此时,在示例代码中,您已经分配了一个环境句柄,声明了要使用的 ODBC 协议,并分配了一个连接句柄。您还没有连接到数据源,我们可以使用三个函数来连接到数据源:SQLConnect()SQLDriverConnect()SQLBrowseConnect()。最简单的连接函数是SQLConnect()。这是 SQLConnect()的函数原型:

SQLRETURN SQLConnect( SQLHDBC     ConnectionHandle,
                      SQLCHAR    *DataSourceName,
                      SQLSMALLINT DataSourceLength,
                      SQLCHAR    *UserName,
                      SQLSMALLINT UserNameLength,
                      SQLCHAR    *Password,
                      SQLSMALLINT PasswordLength );

当您调用SQLConnect()时,您需要提供连接句柄、数据源名称、用户名和密码。在此示例代码中,您使用命令行参数作为数据源名称、用户名和密码。请注意,您实际上并没有计算传递给SQLConnect()的每个字符串的长度,而是传递 SQL_NTS 来告诉 ODBC 您正在发送以 NULL 结尾的字符串。

SQLConnect() 返回 SQLRETURN值。使 ODBC 编程复杂化的原因之一是 ODBC 定义了两个不同的SUCCESS值:SQL_SUCCESSSQL_SUCCESS_WITH_INFO,并且您必须检查这两个值中的任何一个。

在示例代码中,您只需打印一条消息来告诉用户是否可以连接到所请求的数据源。在这个例子中我有点偷懒,一个行为良好的应用程序会拆除数据库连接并正确地丢弃环境和连接句柄。在这种情况下,应用程序在完成与数据库的交互后立即退出。如果您还有更多工作要做并且不再需要数据库连接,那么释放维护连接所需的资源是个好主意。

标签:HANDLE,句柄,SQLAllocHandle,odbc,SQL,服务器,ODBC,连接,客户端
From: https://www.cnblogs.com/jl1771/p/17986044

相关文章

  • 测试DHCP服务器
    一:准备工作1.准备三台虚拟机,不要配ip。都改成仅主机模式,这样它们和DHCP才会相连2.进入有DHCP服务器的虚拟机,更改虚拟网络编辑器(编辑→虚拟网络编辑器(N))不勾选使用本地DHCP服务器,修改子网IP为192.168.1.0二:查看DHCP地址分配1.图形界面的查看IP是否分配到(网络和共享中心→......
  • AR作为FTP服务器
    拓扑:配置:查看代码[AR]discurrent-configuration[V200R003C00]#sysnameARftpserverenable#snmp-agentlocal-engineid800007DB03000000000000snmp-agent#clocktimezoneChina-Standard-Timeminus08:00:00#portallocal-serverloadportalpage.zip......
  • 码农服务器管理
    一、简介码农工作一般会在服务器上进行,一个服务器会分配多个用户,但服务器的硬件资源是有限的。下面,我会介绍在linux环境下(以centos为例)如何对服务器硬件资源进行管理。二、线程服务器的核数量是固定的,在工程过程中经常会进行回归测试以及各种调试工作,服务器管理员可以通过Appl......
  • 【服务器数据恢复】DELL EqualLogic存储中RAID5多块磁盘出现坏道离线,上层虚拟机不可用
    服务器数据恢复环境&故障:某公司IT部门一台某品牌EqualLogicPS6100系列存储在运行过程中突然崩溃。服务器管理员对故障服务器存储进行初步检查,经过检测发现导致该服务器存储无法正常工作的原因是该存储中raid5磁盘阵列内有2块硬盘出现故障离线,导致上层虚拟机不可用。由于该存储......
  • Steam幻兽帕鲁搭建教程,如何选择服务器
    如何选购服务器大家可以根据自己的需求选购,大家最好选用物理服务器,可以找我参考一下。1到6人建议使用16H32G的20带宽的。12人以上建议大家使用E5的CPU内存64G的带宽50起步的。大家在选择服务器商的时候一定要选择正规的拥有资质的,这样售后会有保证,服务器还会稳定。搭建前需要准备下......
  • 奇迹MU:探索私人服务器的魅力
    奇迹MU一直是玩家们喜爱的经典游戏,它以其丰富的剧情、无与伦比的操作感和超高的自由度受到玩家们的热爱。然而,在经历了多年的发展和更新后,游戏的官方服务器可能已经让玩家们感到厌倦,那么为什么不考虑试试玩私人服务器呢?私人服务器在奇迹MU社区中已经广泛流行,通过加入其中,玩家们......
  • (保姆级)服务器-Zabbix6.0使用Python脚本实现带图片的邮箱的报警
    前言近期在琢磨Zabbix邮箱报警的功能,但是网上的教程通常是4.0或5.0版本Zabbix,并使用Python2.7环境,运行在新版本Zabbix6.0上有颇多问题,为此我基于原先教程修改基于Zabbix6.0并使用Python3+的解决方案。期间遇到不少坑,特此分享。Zabbix自带报警Zabbix是自带的邮箱的报警功能有限......
  • 服务器上mysql安装 ,以及客户端Navicat连接
    1.官网下载mysql8.0https://dev.mysql.com/downloads/installer/ 2.安装mysql8.0参考https://blog.csdn.net/weixin_47406082/article/details/131867849?ops_request_misc=&request_id=&biz_id=102&utm_term=mysql%E6%9C%80%E6%96%B0%E7%89%88%E5%AE%89%E8%A3%85%E......
  • centos7环境部署psqlodbc
    1获取unixODBC和psqlodbc源码包打开https://github.com/lurcher/unixODBC/tags,以下载unixODBC-2.3.7.tar.gz为例打开https://www.postgresql.org/ftp/odbc/versions/src/,以下载psqlodbc-09.06.0500.tar.gz为例将下载好的软件包放在/home/postgres2编译安装unixODBC执行如......
  • 前端歌谣-第六十五课-express之服务端渲染和客户端渲染
    前言我是歌谣微信公众号关注前端小歌谣一起学习前端知识今天继续给大家讲解服务端渲染和客户端渲染静态资源的讲解案列index.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,init......