
- 外文名
- ODBC
- 架 构
- 应用程序
- 提出者
- Microsoft
- 中文名
- 开放数据库互连
- 管理方法
- 单束式驱动程序
-
ODBC
2019-04-20 10:41:47一、ODBC安装 1)UnixODBC安装 * yum安装 # yum install -y unixODBC.x86_64 * * 验证安装 # rpm -qa | grep unixODBC unixODBC-2.3.1-11.el7.x86_64 2)PostgresqlODBC安装 * yum安装 # yum install -y ...一、ODBC安装
1)UnixODBC安装
* yum安装
# yum install -y unixODBC.x86_64*
* 验证安装
# rpm -qa | grep unixODBC
unixODBC-2.3.1-11.el7.x86_64
2)PostgresqlODBC安装
* yum安装
# yum install -y postgresql-odbc.x86_64* 验证安装
# rpm -qa | grep postgresql-odbc
postgresql-odbc-09.03.0100-2.el7.x86_64二、ODBC配置
1)查看odbcinst
# cat /etc/odbcinst.ini
~
[PostgreSQL]
D
Description = ODBC for PostgreSQL
D
Driver = /usr/lib/psqlodbcw.so
S
Setup = /usr/lib/libodbcpsqlS.so
D
Driver64 = /usr/lib64/psqlodbcw.so
S
Setup64 = /usr/lib64/libodbcpsqlS.soFileUsage = 1
2)配置odbc
# vim /etc/odbc.ini
~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[pg]
Description = Test to pg
Driver = PostgreSQL
Database = postgres
Servername = 192.168.9.139
UserName = admin
Password = admin
Port = 5432
ReadOnly = 0ConnSettings = set client_encoding to UTF8
~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~3)验证odbc
* isql访问
# isql pg admin admin -
odbc
2018-05-04 14:04:20前期准备,将使用的数据源配置到windows的ODBC中(1)找到Windows下的ODBC开始-控制面板-管理工具(2)打开用户DSN,需要配置系统DSN,需要配置配置:上面页面点击添加后出现以下页面:选中你要加的数据源后点击完成...1.简介
windows上的开放数据库连接(Open Database Connectivity)
2.前期准备,将使用的数据源配置到windows的ODBC中
(1)找到Windows下的ODBC
开始-控制面板-管理工具
(2)打开
用户DSN,需要配置
系统DSN,需要配置
配置:
上面页面点击添加后出现以下页面:选中你要加的数据源后点击完成
将数据源的信息填写
测试链接,成功后点击ok即可
确认以下两个位置都是以上的配置,这样就不影响任何地方调用obdc了,因为32、64都配置好了:
(3)下载需要的odbc数据连接驱动
sql server的odbc驱动:0117
postgresql的odbc驱动:
3.测试odbc是否可以连接数据库
使用excle测试:
出现如下界面证明odbc中的数据源配置生效
-
ODBC驱动程序ODBC驱动程序
2010-05-19 14:15:16在做软件安装包时,把MySQL ODBC 3.51驱动程序必要的文件一起打进安装包,让用户安装软件的时候,自动在系统ODBC 数据源管理器的连接池添加MySQL ODBC 3.51 Driver驱动程序。 InstallSheild添加MySQL ODBC驱动程序 -
ODBC 函数
2019-08-20 16:30:39ODBC连接类函数 odbc_connect 打开一个ODBC连接 odbc_close 关闭一个已经打开的ODBC连接 odbc_close_all 关闭所有已经打开的ODBC连接 odbc_pconnect 打开一个持续有效的ODBC连接 ODBC操作类函数 odbc...ODBC连接类函数
odbc_connect 打开一个ODBC连接 odbc_close 关闭一个已经打开的ODBC连接 odbc_close_all 关闭所有已经打开的ODBC连接 odbc_pconnect 打开一个持续有效的ODBC连接
ODBC操作类函数
odbc_commit 更新所有处于未决状态的操作 odbc_do 在打开的ODBC连接上执行SQL语句 odbc_exec 执行SQL语句 odbc_execute 执行一个预置的SQL语句 odbc_free_result 释放传回资料所占用的内存 odbc_prepare 预置SQL语句的执行 odbc_rollback 撤销所有处于未决状态的操作
ODBC信息获取类函数
odbc_columnprivileges 列出给定表的列和相关的权限 odbc_columns 列出指定表的列的名称 odbc_cursor 获取光标的名称 odbc_data_source 返回连接数据库的信息 odbc_error 获取最后的错误代码 odbc_errormsg 获取最后的错误信息 odbc_fetch_array 获取结果集数组 odbc_fetch_into 获取传回的指定列 odbc_fetch_object 返回结果集到对象 odbc_fetch_row 获取传回的一列 odbc_field_len 获取字段的长度 odbc_field_name 获取字段的名称 odbc_field_num 获取字段的序号 odbc_field_precision 获取字段的长度 odbc_field_scale 获取字段的浮点数 odbc_field_type 获取字段的资料类型 odbc_foreignkeys 返回特定表的外来键 odbc_gettypeinfo 返回数据库的类型信息 odbc_longreadlen 设定传回栏的最大值 odbc_num_fields 获取字段数目 odbc_num_rows 获取传回的列数目 odbc_primarykeys 返回列的名字作为表的主键 odbc_procedurecolumns 返回检索过程的参数信息 odbc_procedures 获取存在于特定数据源中的进程信息 odbc_result_all 传回HTML表格信息 odbc_result 获取结果数据 odbc_specialcolumns 返回一个表中在传送更新时可以自动更新的列 odbc_statistics 获取表的状态及其索引 odbc_tableprivileges 列出表格和每个表格关联的权限 odbc_tables 获取特定数据库上的表的名称
ODBC设置类函数
odbc_autocommit 开启或关闭自动更新 odbc_binmode 设定二进制的数据处理方式 odbc_next_result 检查下一个结果集是否可用 odbc_setoption 调整ODBC设定
-
odbc, 连接到ODBC数据库( 使用DBI接口).zip
2019-09-17 18:32:07odbc, 连接到ODBC数据库( 使用DBI接口) odbc ODBC的目标是提供符合开放数据库连接 ( ODBC ) 驱动程序的dbi兼容接口。 这样,ODBC drivers drivers ODBC ODBC ODBC Oracle SQL Server /SQ -
mysql-connector-odbc-5.1.5-win32.msi MySql ODBC驱动
2009-11-21 16:14:34MySQL Connector/ODBC是MYSQL数据库的ODBC驱动程序,统安装了这个程序之后,就可以通过ODBC来访问MySQL,这样就可以实现SQLServer、Access和MySQL之间的数据转换,还可以支持ASP访问MySQL数据库。 -
【ODBC】ODBC连接数据库详细说明
2018-05-06 12:15:48ODBC一、ODBC简介开放数据库互连(ODBC)是微软提出的数据库访问接口标准。开放数据库互连定义了访问数据库的API一个规范,这些API独立于不同厂商的DBMS,也独立于具体的编程语言。通过使用ODBC,应用程序能够使用...ODBC
一、ODBC简介
开放数据库互连(ODBC)是微软提出的数据库访问接口标准。开放数据库互连定义了访问数据库的API一个规范,这些API独立于不同厂商的DBMS,也独立于具体的编程语言。通过使用ODBC,应用程序能够使用相同的源代码和各种各样的数据库进行交互。这使得开发者不需要以特殊的数据库管理系统DBMS为目标,或者了解不同支撑背景的数据库的详细细节,就能够开发和发布客户/服务器应用程序。下面是ODBC应用系统的体系结构。
二、ODBC句柄
应用程序运行后,为维护执行的状态,ODBC 管理器和ODBC 驱动程序中必须保持足够的控制信息。应用程序要求ODBC 管理器和ODBC 驱动程序为ODBC环境、每个连接以及每个SQL语句分配描述/控制信息存储空间,并返回指向各个存储区的句柄供其使用。
(1)环境句柄:整个ODBC上下文的根句柄。标识全程数据访问控制信息的内存结构,包括有效连接句柄以及当前活动连接句柄。ODBC将环境句柄定义为HENV类型的变量。应用程序使用单一的环境句柄,在连接到数据源以前必须申请该句柄。
(2)连接句柄:管理有关数据库会话的所有信息。连接句柄标识每个特定的连接信息的内存结构。ODBC将环境句柄定义为HDBC类型的变量。应用程序在连接数据源之前申请连接句柄。每个连接句柄与环境句柄有关,环境句柄上可以有多个与其有关的连接句柄。
(3)语句句柄:ODBC语句包括应用访问数据源的SQL语句和语句相关的管理信息,语句句柄标识每个语句管理信息的内存结构。ODBC将语句句柄定义为HSTMT类型的变量。应用程序在提交SQL请求之前也必须申请语句句柄。每个语句句柄与一个连接句柄有关,每个连接句柄上可以有多个与其有关的语句句柄。
三、ODBC程序执行流程
Ø 分配环境句柄
基于ODBC3.X版本的应用统一使用SQLAllocHandle来分配句柄。调用时设计不同的句柄类型就可以获得该类型的句柄。但在API内部实现上一般重新转换为执行SQLAllocEnv,SQLAllocConnect和SQLAllocStmt,这样可以达到兼容和代码重用作用。SQLAllocEnv:用来分配环境句柄。
例如:ret = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &oraclehenv);
Ø 分配连接句柄
SQLAllocConnect:用来分配连接句柄。连接句柄提供对一些信息的访问,例如,在连接上的有效语句及标识符句柄,以及当前是否打开一些一个事务处理。调用SQLAllocConnect 函 数 获 取 连 接 句 柄。例如:
ret = SQLAllocHandle(SQL_HANDLE_DBC, oraclehenv, &oraclehdbc);
Ø 建立数据源
使用已分配的连接句柄来建立应用程序和数据源/数据库系统的连接,进行句柄和数据源的绑定。绑定也由目标数据源的ODBC驱动程序完成。
例 如:ret = SQLConnect(oraclehdbc,
"conn",SQL_NTS, //ODBC的DNS名称
"scott",SQL_NTS, //用户账号
"123",SQL_NTS); //密码
Ø 分配语句句柄
用户对DBC数据源的存取操作,都是通过SQL语句实现的。在这个过程中,应用程序 将通过连接向ODBC数据库提交SQL语句,以完成用户请求的操作。即通过执行SQLAllocHandle或SQLAllocStmt来分配语句句柄。调用SQLAllocStmt 函数获取语句句柄。例如:
SQLstmt= "SELECT * FROM authors"
rc= SQLAllocStmt(hdbc, hstmt)
Ø 执行SQL语句
执行SQL语句。 执行SQL 语 句 的方法比较多, 最简单明了的方法是调用SQLAllocStmt函数,例如:
SQLstmt= "SELECT * FROM authors"
rc= SQLExecDirect(hstmt, SQLstmt, Len(SQLstmt))
如果SQL语句被顺利提交并正确执行,那么就会产生一个结果集。检索结果集的方法有很多,最简单最直接的方法是调用SQLFetch 和SQLGetData 函 数。
SQLFetch函数的功能是将结果集的当前记录指针移至下一个记录;
SQLGetData函数的功能是提取结果集中当前记录的某个字段值。通常可以采用一个循环以提取结果集中所有记录的所有字段值,该循环重复执行SQLFetch和SQLGetData函数,直至SQLFetch函数返回SQL_NO_DATA_FOUND, 这表示已经到达结果集的末尾。
DimColVal As String * 225
ColVal= String(255, 0)
Ø 结束应用程序
在应用程序完成数据库操作, 退出运行之前,必须释放程序中使用的系统资源。这些系统资源包括:语句句柄、连接句柄和ODBC环境句柄。完成这个过程的如下:
调用SQLFreeStmt 函数释放语句句柄及其相关的系统资源。例如:
rc= SQLFreeStmt(hstmt, SQL_DROP)
调用SQLDisconnect 函数关闭连接。 例 如:
rc= SQLDisconnect(hdbc)
调用SQLFreeConnect函数释放连接句柄及其相关的系统资源。例如:
rc= SQLFreeConnect(hdbc)
调用SQLFreeEnv函数释放环境句柄及其相关的系统资源,停止ODBC 操作。 例如:
rc= SQLFreeEnv(henv)
(7)错 误 处 理
所有DBCAPI函 数, 若在执行期间发生错误, 都将返回一个标准错误代码SQL_ERROR。
一般来讲,在每次调用ODBC API 函 数 之 后, 都应该检查该函数返回值,确定该函数是否成功地执行,再决定是否继续后续过程。 而详细的错误信息,可以调用SQLError 函数获得。SQLError 函数将返回下列信息: 标准的ODBC错误状态码 ODBC 数据源提供的内部错误编码错误信息串
四、开发环境的配置
1.创建Oracle ODBC数据源
对于WIN 7系统来说,打开控制面板,找到ODBC,具体位置如下图所示,如果没有找到,可以在右上角搜索栏里面输入ODBC,就可以找到了。
对于WIN XP系统来说,打开控制面板,找到管理工具,找到数据源(ODBC),显示ODBC数据源管理器对话框。对话框如下图所示。
2.设置和配置一个系统DSN,单击“系统DSN标签”,选择“添加”。
3.找到需要配置的数据源,单击完成,弹出如下对话框,
4.输入数据源的名称,一个简单的描述,用户名和网络连接名。点击确认。
五、学生表创建
1.首先创建stu表
create table stu(
sno char(11) ,
sname varchar2(10),
sex char(2),
sage number,
sdepart varchar2(30)
);
六、数据类型
七、参考资料
数据库系统概论 第四版 王珊 萨师煊 高等教育出版社
电子资料链接:http://pan.baidu.com/s/1su9c5
ODBC程序
开发工具vs2017<database.h>
#pragma once #ifndef _DATABASE_H #define _DATABASE_H #include <sql.h> #include<sqlext.h> #include<sqltypes.h> typedef struct { SQLHENV oraclehenv; //环境句柄 SQLHDBC oraclehdbc; //连接句柄 SQLHSTMT oraclehsmt; //语句句柄 SQLRETURN ret; //结果集 }DATABASE; DATABASE getConnection(); //获取连接 void init(DATABASE *d); //初始化 void freeConnection(DATABASE d); //释放连接资源 #endif // !_DATABASE_H
<student.h>
#pragma once #include "DATABASE.h" #ifndef _STUDENT_H #define _STUDENT_H #include <sql.h> #include<sqlext.h> #include<sqltypes.h> #define sno_length 11 #define sname_length 10 #define sdepart_length 30 #define ssex_length 5 typedef struct { SQLCHAR sno[sno_length], sname[sname_length], sdepart[sdepart_length], ssex[ssex_length]; SQLSMALLINT sage; SQLINTEGER cbsno, cbsname, cbdepart, cbsage, cbsex; }STUDENT; SQLCHAR *get(SQLCHAR *p, char *s); //将char数组转换SQLCHAR类型 void processSQL(SQLCHAR *sql, SQLHSTMT oraclehsmt); void display(DATABASE d); void getStu(char *sno, SQLHSTMT oraclehsmt); int insert(STUDENT, DATABASE); void deleteStu(char *sno, DATABASE d); SQLRETURN updateStu(STUDENT s, DATABASE d); STUDENT inputStu(); void error(SQLRETURN err, int n); #endif // !_DATABASE_H
<getConnection.cpp>
#include"DATABASE.h" #include <sql.h> #include<sqlext.h> #include<sqltypes.h> #include<stdlib.h> #include <stdio.h> #include<windows.h> #include<string.h> DATABASE getConnection() { DATABASE d; /****分配环境句柄********/ d.ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &d.oraclehenv); d.ret = SQLSetEnvAttr(d.oraclehenv, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0); /********建立连接*********/ d.ret = SQLAllocHandle(SQL_HANDLE_DBC, d.oraclehenv, &d.oraclehdbc); d.ret = SQLConnect(d.oraclehdbc, (SQLCHAR *)"con", SQL_NTS, (SQLCHAR *)"HR", SQL_NTS, (SQLCHAR *)"oracle", SQL_NTS); if (SQL_SUCCEEDED(d.ret)) { puts("Connect Sucess!"); init(&d); } else { //连接失败时返回错误值 puts("Conect Fail!"); } return d; } void init(DATABASE *d) { /***初始化句柄*/ SQLEndTran(SQL_HANDLE_DBC, d->oraclehdbc, SQL_COMMIT); //提交事务 d->ret = SQLAllocHandle(SQL_HANDLE_STMT, d->oraclehdbc, &d->oraclehsmt); //初始化语句句柄 d->ret = SQLSetStmtAttr(d->oraclehsmt, SQL_ATTR_ROW_BIND_TYPE, (SQLPOINTER)SQL_BIND_BY_COLUMN, SQL_IS_INTEGER);//设置语句选项 } void freeConnection(DATABASE d) { SQLEndTran(SQL_HANDLE_DBC, d.oraclehdbc, SQL_COMMIT); //提交事务 SQLFreeHandle(SQL_HANDLE_STMT, d.oraclehsmt); SQLDisconnect(d.oraclehdbc); SQLFreeHandle(SQL_HANDLE_DBC, d.oraclehdbc); SQLFreeHandle(SQL_HANDLE_ENV, d.oraclehenv); printf("释放连接\n\n"); }
<operateStudent.cpp>
#include "DATABASE.h" #include "STUDENT.h" #include <sql.h> #include<sqlext.h> #include<sqltypes.h> #include<stdlib.h> #include <stdio.h> void processSQL(SQLCHAR *sql, SQLHSTMT oraclehsmt) { STUDENT s; int count = 1; s.cbsno = SQL_NTS; s.cbsname = SQL_NTS; s.cbdepart = SQL_NTS; s.cbsage = 0; s.cbsex = SQL_NTS; SQLRETURN ret = SQLExecDirect(oraclehsmt, sql, SQL_NTS); if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) { ret = SQLBindCol(oraclehsmt, 1, SQL_C_CHAR, s.sno, sno_length, &s.cbsno); ret = SQLBindCol(oraclehsmt, 2, SQL_C_CHAR, s.sname, sname_length, &s.cbsname); ret = SQLBindCol(oraclehsmt, 3, SQL_C_CHAR, s.ssex, ssex_length, &s.cbsex); ret = SQLBindCol(oraclehsmt, 4, SQL_C_LONG, &s.sage, 0, &s.cbsage); ret = SQLBindCol(oraclehsmt, 5, SQL_C_CHAR, s.sdepart, sdepart_length, &s.cbdepart); } /***处理结果**/ while ((ret = SQLFetch(oraclehsmt)) != SQL_NO_DATA_FOUND ) { if (ret == SQL_ERROR) { printf("erro!\n"); } else { printf("\t%-3d %s %s %s %4d %s\n", ++count, s.sno, s.sname, s.ssex, s.sage, s.sdepart); } } } void display(DATABASE d) { SQLCHAR *sql = (SQLCHAR *)"select * from stu"; processSQL(sql, d.oraclehsmt); } /*****插入********/ int insert(STUDENT s, DATABASE d) { char str[100] = "insert into stu values("; char *age = (char *)malloc(sizeof(s.sage) + 1); _itoa_s((int)s.sage, age, 10, 10); strcat_s(str, sizeof(str), "'"); strcat_s(str, sizeof(str), (char *)s.sno); strcat_s(str, sizeof(str), "',"); strcat_s(str, sizeof(str), "'"); strcat_s(str, sizeof(str), (char *)s.sname); strcat_s(str, sizeof(str), "',"); strcat_s(str, sizeof(str), "'"); strcat_s(str, sizeof(str), (char*)s.ssex); strcat_s(str, sizeof(str), "',"); strcat_s(str, sizeof(str), "'"); strcat_s(str, sizeof(str), age); strcat_s(str, sizeof(str), "',"); strcat_s(str, sizeof(str), "'"); strcat_s(str, sizeof(str), (char *)s.sdepart); strcat_s(str, sizeof(str), "')"); d.ret = SQLExecDirect(d.oraclehsmt, (SQLCHAR *)str, SQL_NTS); error(d.ret, 77); return 0; } SQLCHAR *get(SQLCHAR *p, char *s) { if ((s == NULL) || (p == NULL)) { return NULL; } SQLCHAR *r = p; while ((*r++ = *s++) != '\0'); return p; } void getStu(char *sno, SQLHSTMT oraclehsmt) { SQLCHAR *sql; char str[100] = "select * from stu where sno = \'"; strcat_s(str, sizeof(str), sno); strcat_s(str, sizeof(str), "'"); sql = (SQLCHAR *)str; printf("getStu()函数\n"); getchar(); processSQL(sql, oraclehsmt); } void deleteStu(char *sno, DATABASE d) { SQLCHAR *sql = NULL; char str[100] = "delete from stu where sno = \'"; strcat_s(str, sizeof(str), sno); strcat_s(str, sizeof(str), "'"); sql = (SQLCHAR *)str; d.ret = SQLExecDirect(d.oraclehsmt, sql, SQL_NTS); error(d.ret, 114); } SQLRETURN updateStu(STUDENT s, DATABASE d) { SQLRETURN ret; SQLCHAR *sql = NULL; char str[100] = "update stu set "; char *age = (char *)malloc(sizeof(s.sage) + 1); _itoa_s((int)s.sage, age, 10, 10); strcat_s(str, sizeof(str), "sname = \'"); strcat_s(str, sizeof(str), (char *)s.sname); strcat_s(str, sizeof(str), "', "); strcat_s(str, sizeof(str), "sex = \'"); strcat_s(str, sizeof(str), (char *)s.ssex); strcat_s(str, sizeof(str), "', "); strcat_s(str, sizeof(str), "sage = \'"); strcat_s(str, sizeof(str), age); strcat_s(str, sizeof(str), "', "); strcat_s(str, sizeof(str), "sdepart = \'"); strcat_s(str, sizeof(str), (char *)s.sdepart); strcat_s(str, sizeof(str), "' "); strcat_s(str, sizeof(str), "where sno = \'"); strcat_s(str, sizeof(str), (char *)s.sno); strcat_s(str, sizeof(str), "'"); for (int i = 0; i < sizeof(str); i++) { printf("%c", str[i]); } printf("\n"); sql = (SQLCHAR *)str; ret = SQLExecDirect(d.oraclehsmt, sql, SQL_NTS); error(ret, 150); return ret; } STUDENT inputStu() { STUDENT s; char sno[sno_length], sname[sname_length], ssex[ssex_length], sdepart[sdepart_length], ssage[5]; int sage; fflush(stdin); printf("请输入一个学号:"); gets_s(sno, sizeof(sno)); printf("\n请输入一个姓名:"); gets_s(sname, sizeof(sname)); printf("\n请输入一个性别:"); gets_s(ssex, sizeof(ssex)); printf("\n请输入一个年龄:"); sage = atoi(gets_s(ssage)); printf("\n请输入一个部门:"); gets_s(sdepart, sizeof(sdepart)); get(s.sno, sno); get(s.sname, sname); get(s.ssex, ssex); s.sage = sage; get(s.sdepart, sdepart); return s; } void error(SQLRETURN err, int n) { printf("%d ", n); switch (err) { case SQL_SUCCESS:puts("****SQL_SUCCESS*****"); break; case SQL_SUCCESS_WITH_INFO:puts("SQL_SUCCESS_WITH_INFO"); break; case SQL_ERROR:puts("SQL_ERROR"); break; case SQL_INVALID_HANDLE:puts("SQL_INVALID_HANDLE"); break; case SQL_NO_DATA_FOUND:puts("SQL_NO_DATA_FOUND"); break; case SQL_NEED_DATA:puts("SQL_NEED_DATA"); break; default:puts("err"); } }
<Test.cpp>
#include "STUDENT.h" #include "DATABASE.h" #include <sql.h> #include<sqlext.h> #include<sqltypes.h> #include<stdlib.h> #include <stdio.h> #include<windows.h> #include<string.h> char menu() { char choice; printf("\t a.查询4所有人的信息\n"); printf("\t s.查询个人信息指定学号\n"); printf("\t i.插入\n"); printf("\t d.删除\n"); printf("\t u.修改\n"); printf("\t q.退出\n"); printf("\n **********************\n \t请输入你的选项:"); choice = getchar(); return choice; } void deal(char choice, DATABASE d) { getchar(); switch (choice) { init(&d); case 'a':display(d);break; case 's': { char sno[10]; fflush(stdin); printf("\n请输入学号:"); gets_s(sno); printf("sno = %s\n", sno); getStu(sno, d.oraclehsmt); break; } case 'i': { STUDENT s = inputStu(); insert(s, d);break; } case 'd': { char sno[10]; printf("请输入学号:"); gets_s(sno); deleteStu(sno, d); break; } case 'u': { STUDENT s = inputStu(); updateStu(s, d);break; } case 'q': freeConnection(d); exit(0); default:printf("输入错误,请从新输入\n"); break; } printf("\n\t***************处理结束******************\n"); } int main() { DATABASE database = getConnection(); do { char c; c = menu(); deal(c,database); getchar(); system("cls"); } while (true); return 0; }
<sql>
drop table stu; create table stu( sno char(10), sname varchar2(10), sex char(5), sage number, sdepart varchar2(30), primary key(sno) ); insert into stu values('201500730','张三','男',20,'计算机系' ); insert into stu values('201500731','李四','男',20,'计算机系' ); insert into stu values('201500732','王五','男',20,'计算机系' ); insert into stu values('201500733','赵六','男',20,'计算机系' ); commit; select * from stu;
-
FreeSwitch配置ODBC
2020-04-03 13:59:05环境:CentOS Linux release 7.7 ...yum install -y unixODBC unixODBC-devel mysql-connector-odbc 配置ODBC 数据源 编辑/etc/odbc.ini PASSWORD —— 这里使用的密码为空值,可以根据自己... -
Clickhouse ODBC
2020-06-16 15:24:06参考: https://www.altinity.com/blog/2018/9/20/using-odbc-with-clickhouse -
ODBC连接MySQL
2018-05-12 22:54:35C++使用ODBC连接MySQL -
mysql和odbc驱动
2018-11-23 10:41:20mysql-5.5.36-win32、mysql-5.7.22-win32、mysql-connector-odbc-5.1.5-win32、mysql-connector-odbc-5.2.7-win32、mysql-connector-odbc-5.2.7-winx64、mysql-connector-odbc-5.3.9-win32、mysql-connector-odbc-... -
Oracle ODBC driver
2008-12-19 07:51:52NOTE: The following ODBC Drivers are ODBC Version 3.52, Level 2 compatible drivers. Oracle ODBC Drivers for Oracle 10.2 Version Date Download Size Bullet 10.2.0.3.0 12-Dec-2006 ORA10203.... -
SQL Server ODBC 驱动
2018-03-28 17:34:11在安装ODBC驱动后,能通过ODBC访问SQL Server 数据库。 -
ODBC介绍
2017-01-03 23:28:02Tableau 和 ODBC ODBC 代表 Open Database Connectivity(开放式数据库连接),是允许各种软件访问数据的行业标准。ODBC 的基本前提是 SQL 查询的标准语法,软件应用程序使用该语法连接到数据库并从数据库请求数据... -
Kylin ODBC安装
2018-06-23 11:57:521 Kylin ODBC安装 参考网址:http://kylin.apache.org/docs15/tutorial/odbc.html Kylin提供了ODBC驱动,用以兼容ODBC的客户端应用能够访问数据。 32bit 和 64bit的驱动都提供了。 在Windows7,windows Server... -
php odbc 结果集处理,php常用ODBC函数集
2021-03-26 12:31:02ODBC连接类函数odbc_connect函数:打开一个ODBC连接odbc_close函数:关闭一个已经打开的ODBC连接odbc_close_all函数:关闭所有已经打开的ODBC连接odbc_pconnect函数:打开一个持续有效的ODBC连接ODBC操作类函数odbc_... -
mysql odbc
2017-01-09 14:17:30window下配置mysql odbc下载安装...选择相应的版本,32位 or 64位配置odbc开始--->运行 输入以下命令中的一个打开odb配置窗口。下载安装的驱动是32位的:c:\Windows\SysWoW64\Odbcad32.exe 下载安装的驱动是64位的 -
MySQL ODBC Connector/ODBC 5.1.8
2011-02-26 16:53:00MySQL ODBC Connector/ODBC 5.1.8 -
DB2数据库odbc驱动
2012-02-25 18:22:10DB2数据库的odbc驱动,安装后即可通过odbc配置连接db2数据库 -
MYSQL5.1 ODBC驱动程序64位
2013-04-10 16:53:28MYSQL5.1 ODBC驱动程序64位 -
php odbc exec,php常用ODBC函数集(详细)
2021-04-08 10:29:20ODBC连接类函数odbc_connect函数:打开一个ODBC连接odbc_close函数:关闭一个已经打开的ODBC连接odbc_close_all函数:关闭所有已经打开的ODBC连接odbc_pconnect函数:打开一个持续有效的ODBC连接ODBC操作类函数odbc_... -
php odbc驱动,php常用ODBC函数集(详细)
2021-03-24 01:45:26ODBC连接类函数odbc_connect函数:打开一个ODBC连接odbc_close函数:关闭一个已经打开的ODBC连接odbc_close_all函数:关闭所有已经打开的ODBC连接odbc_pconnect函数:打开一个持续有效的ODBC连接ODBC操作类函数odbc_...