ODBC连接数据库的方法及实践操作 (odbc提交数据库)

在计算机领域,数据库是一个非常重要的概念,它是基于电脑设备的数据统一存储的一种体系结构,能够方便地对数据进行管理、维护和查询。而在实际开发应用程序时,我们经常需要从程序中读取或存储数据到数据库中。为了实现这一目的,就需要使用到ODBC连接数据库,本文将就进行详细解析。

一、ODBC是什么?

ODBC(Open Database Connectivity)即开放数据库互连性,是一种开放式的数据库连接接口,用于连接和操作数据库。它是由Microsoft公司开发,用于在Windows平台上操作数据库的标准。ODBC接口可以允许程序员在API级别问数据库,而不必关心底层数据库管理系统的特点和差异。ODBC是跨平台的,使得程序员可以以一种平台无关的方式访问不同类型的数据库,例如SQL Server、Oracle、MySQL等数据库管理系统。

二、ODBC的特点

ODBC有以下几个主要特点:

1.可移植性

ODBC是跨平台标准,允许程序代码无需修改就可以连接不同类型的数据库。

2.高性能

ODBC连接数据库时,可以通过数据缓存等技术提高数据访问的效率和性能。

3.易用性

ODBC提供了易用的API接口,使得程序员可以通过简单的几行代码就可以连接和操作数据库。

4.灵活性

ODBC提供了一些配置项和接口,可以允许程序员定制和扩展ODBC连接数据库的行为和特性。

三、ODBC连接数据库的步骤

下面介绍一下通过ODBC连接数据库的具体操作步骤:

1.配置ODBC数据源

需要在计算机上配置ODBC数据源,以允许程序连接到数据库。可以通过“控制面板”->“管理工具”->“ODBC数据源”来打开ODBC数据源配置对话框,添加一个新的数据源。ODBC数据源配置对话框会显示所有已安装的ODBC驱动程序,程序员可以选择符合当前需要的驱动程序,并按照对话框的指导填写相应的字段,例如源名称、驱动程序、服务器名称、端口、用户名、密码、默认数据库等等。配置完成后,可以通过ODBC管理工具进行验证和测试,确认是否能够和数据库成功建立连接。

2.编写程序代码

程序员可以使用C/C++、Java、PHP等编程语言编写与ODBC连接数据库的代码。需要使用ODBC的头文件和库文件,建立ODBC连接数据库的环境。之后,程序员需要调用ODBC的API接口,例如SQLConnect()或SQLDriverConnect()函数等,传递连接字符串等必要参数来建立到数据库的连接。连接成功后,就可以对数据库做一些操作,例如查询数据、插入数据、更新数据等。

3.释放资源

在程序完成数据库操作后,必须手动释放所有ODBC连接数据库的资源。可以通过调用ODBC提供的API接口,例如SQLDisconnect()、SQLFreeHandle()等函数来释放连接资源和句柄。

四、ODBC连接数据库的实例

下面给出一个ODBC连接数据库的C++实现的简单示例:

// ODBCExample.cpp : Defines the entry point for the console application.

//

#include “stdafx.h”

#include

#include

#include

// The maximum length of the SQL error message

#define SQL_MAX_MESSAGE_LENGTH 1024

// Print the SQL error message

void PrintSQLError(TCHAR *szFunction, SQLHANDLE handle, SQLALLINT type)

{

if (type == SQL_HANDLE_DBC)

{

SQLWCHAR sqlState[6], errorMessage[SQL_MAX_MESSAGE_LENGTH+1];

SQLINTEGER nativeError;

SQLALLINT messageLength;

SQLGetDiagRec(type, handle, 1, sqlState, &nativeError, errorMessage, SQL_MAX_MESSAGE_LENGTH+1, &messageLength);

_tprintf(_T(“%s fled. SQLSTATE=%s, native error=%ld, message=%s\n”), szFunction, sqlState, nativeError, errorMessage);

}

}

int _tmn(int argc, _TCHAR *argv[])

{

SQLRETURN retCode;

SQLHANDLE hEnv = SQL_NULL_HENV;

SQLHANDLE hConn = SQL_NULL_HDBC;

SQLHANDLE hStmt = SQL_NULL_HSTMT;

// Allocate an environment handle

retCode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv);

if (retCode != SQL_SUCCESS && retCode != SQL_SUCCESS_WITH_INFO)

{

_tprintf(_T(“SQLAllocHandle(SQL_HANDLE_ENV) fled.\n”));

return 1;

}

// Set the ODBC version to 3.0

retCode = SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);

if (retCode != SQL_SUCCESS && retCode != SQL_SUCCESS_WITH_INFO)

{

_tprintf(_T(“SQLSetEnvAttr(SQL_ATTR_ODBC_VERSION) fled.\n”));

PrintSQLError(_T(“SQLSetEnvAttr”), hEnv, SQL_HANDLE_ENV);

SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

return 1;

}

// Allocate a connection handle

retCode = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hConn);

if (retCode != SQL_SUCCESS && retCode != SQL_SUCCESS_WITH_INFO)

{

_tprintf(_T(“SQLAllocHandle(SQL_HANDLE_DBC) fled.\n”));

PrintSQLError(_T(“SQLAllocHandle”), hEnv, SQL_HANDLE_ENV);

SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

return 1;

}

// Connect to the database

SQLWCHAR *dsnName = L”ODBCExampleDSN”; // Data source name

SQLWCHAR *userName = L”odbcexampleuser”; // User name

SQLWCHAR *password = L”odbcexamplepassword”; // Password

retCode = SQLConnect(hConn, dsnName, SQL_NTS, userName, SQL_NTS, password, SQL_NTS);

if (retCode != SQL_SUCCESS && retCode != SQL_SUCCESS_WITH_INFO)

{

_tprintf(_T(“SQLConnect() fled.\n”));

PrintSQLError(_T(“SQLConnect”), hConn, SQL_HANDLE_DBC);

SQLFreeHandle(SQL_HANDLE_DBC, hConn);

SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

return 1;

}

// Allocate a statement handle

retCode = SQLAllocHandle(SQL_HANDLE_STMT, hConn, &hStmt);

if (retCode != SQL_SUCCESS && retCode != SQL_SUCCESS_WITH_INFO)

{

_tprintf(_T(“SQLAllocHandle(SQL_HANDLE_STMT) fled.\n”));

PrintSQLError(_T(“SQLAllocHandle”), hConn, SQL_HANDLE_DBC);

SQLDisconnect(hConn);

SQLFreeHandle(SQL_HANDLE_DBC, hConn);

SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

return 1;

}

// Execute a SQL statement

SQLWCHAR *sqlStatement = L”SELECT * FROM Customers”;

retCode = SQLExecDirect(hStmt, sqlStatement, SQL_NTS);

if (retCode != SQL_SUCCESS && retCode != SQL_SUCCESS_WITH_INFO)

{

_tprintf(_T(“SQLExecDirect(%s) fled.\n”), sqlStatement);

PrintSQLError(_T(“SQLExecDirect”), hStmt, SQL_HANDLE_STMT);

SQLFreeHandle(SQL_HANDLE_STMT, hStmt);

SQLDisconnect(hConn);

SQLFreeHandle(SQL_HANDLE_DBC, hConn);

SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

return 1;

}

// Fetch the result set data

SQLALLINT columnCount;

retCode = SQLNumResultCols(hStmt, &columnCount);

if (retCode != SQL_SUCCESS && retCode != SQL_SUCCESS_WITH_INFO)

{

_tprintf(_T(“SQLNumResultCols() fled.\n”));

PrintSQLError(_T(“SQLNumResultCols”), hStmt, SQL_HANDLE_STMT);

SQLFreeHandle(SQL_HANDLE_STMT, hStmt);

SQLDisconnect(hConn);

SQLFreeHandle(SQL_HANDLE_DBC, hConn);

SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

return 1;

}

_tprintf(_T(“The query result set has %d columns:\n”), columnCount);

while (SQLFetch(hStmt) == SQL_SUCCESS)

{

for (int i = 1; i

{

SQLWCHAR columnName[256];

SQLLEN columnNameLength, dataType, columnSize, decimalDigits, nullable;

SQLDescribeCol(hStmt, i, columnName, 256, &columnNameLength, &dataType, &columnSize, &decimalDigits, &nullable);

SQLWCHAR columnValue[256];

SQLLEN columnValueLength;

SQLGetData(hStmt, i, SQL_C_WCHAR, columnValue, 256, &columnValueLength);

_tprintf(_T(“%s=%s”), columnName, columnValue);

if (i

_tprintf(_T(“, “));

else

_tprintf(_T(“\n”));

}

}

// Free up allocated resources

SQLFreeHandle(SQL_HANDLE_STMT, hStmt);

SQLDisconnect(hConn);

SQLFreeHandle(SQL_HANDLE_DBC, hConn);

SQLFreeHandle(SQL_HANDLE_ENV, hEnv);

return 0;

}

上述示例程序演示了如何使用ODBC接口连接到一个数据库,并执行SQL查询语句。在实际应用程序中,应该根据实际情况进行适当的修改和扩展,以满足具体业务需求。

五、

相关问题拓展阅读:

什么是ODBC ?

1、ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分。

2、ODBC技术。ODBC的基本思想是为用户提供简单、标准、透明的数据库连接的公共编程接口,开发厂商根据ODBC的标准去实现底层的驱动程序,这个驱动对用户是透明的,并允许根据不同的DBMS采用不同的技术加以优化实现,这就利于不断吸收新的技术而趋完善。

3、一种动态链接库 (DLL),支持 ODBC 的应用程序(如 Excel)可以用它来访问 ODBC 数据源。每个 ODBC 驱动程序针对一个数据库管理系统 (DBMS),如 SQL Server、Access 等等。

4、MyODBC是提供标准ODBC界面存取的程序,用VB、VC、BCB、Access等等透过ODBC直接存取数据库,减少Web Server更新MySQL数据库。

5、unixodbc是一个来连接数据库的组件。该版本主要是支持 64 位的 SQLLEN,修复了一些bug;另外驱动部分和图形化设置工具分开为两个独立的项目。它能让你在Unix/Linux系统下使用ODBC。

参考资料来源:

百度百科—unixodbc

百度百科—myodbc

百度百科—ODBC驱动程序

百度百科—ODBC技术

百度百科—ODBC数据源

ODBC是一种连接数据库的开放标准。

ODBC(Open

DataBase

Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows

Open

Services

Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。

它本身就是为了是数据库的使用者不必考虑使用的是何种数据库而只需要相同的操作而设计的。

ODBC是Open

Database

Connect即开放数据库互连的简称,它是由Microsoft

公司于1991

年提出的一个用于访问数据库的统一界面标准,是应用程序和数据库系统之间的中间件。它通过使用相应应用平台上和所需数据库对应的驱动程序与应用程序的交互来实现对数据库的操作,避免了在应用程序中直接调用与数据库相关的操作,从而提供了数据库的独立性。

ODBC

主要由驱动程序和驱动程序管理器组成。驱动程序是一个用以支持ODBC

函数调用的模块,每个驱动程序对应于相应的数据库,当应用程序从基于一个数据库系统移植到另一个时,只需更改应用程序中由ODBC

管理程序设定的与相应数据库系统对应的别名即可。驱动程序管理器可链接到所有ODBC

应用程序中,它负责管理应用程序中ODBC

函数与DLL

中函数的绑定。

ODBC

使用层次的方法来管理数据库,在数据库通信结构的每一层,对可能出现依赖数据库产品自身特性的地方,ODBC

都引入一个公共接口以解决潜在的不一致性,从而很好地解决了基于数据库系统应用程序的相对独立性,这也是ODBC

一经推出就获得巨大成功的重要原因之一。

从结构上分,ODBC

分为单束式和多束式两类。

1.单束式驱动程序

单束式驱动程序介于应用程序和数据库之间,像中介驱动程序一样数据提供一个统一的数据访问方式。当用户进行数据库操作时,应用程序传递一个ODBC

函数调用给ODBC

驱动程序管理器,由ODBC

API

判断该调用是由它直接处理并将结果返回还是送交驱动程序执行并将结果返回。由上可见,单束式驱动程序本身是一个数据库引擎,由它直接可完成对数据库的操作,尽管该数据库可能位于网络的任何地方。

2.多束式驱动程序

多束式驱动程序负责在数据库引擎和客户应用程序之间传送命令和数据,它本身并不执行数据处理操作而用于远程操作的网络通信协议的一个界面。前端应用程序提出对数据库处理的请求,该请求转给ODBC

驱动程序管理器,驱动程序管理器依据请求的情况,就地完成或传给多束驱动程序,多束式驱动程序将请求翻译为特定厂家的数据库通信接口(如Oracle

的SQLNet)所能理解的形式并交于接口去处理,接口把请求经网络传送给服务器上的数据引擎,服务器处理完后把结果发回给数据库通信接口,数据库接口将结果传给多束式ODBC

驱动程序,再由驱动程序将结果传给应用程序。

ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。

一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是FoxPro、Access还是Oracle数据库,均可用ODBC API进行访问。由此可见,ODBC的更大优点是能以统一的方式处理所有的数据库。

一个完整的ODBC由下列几个部件组成:

应用程序(Application)。

ODBC管理器(Administrator)。该程序位于Windows 95控制面板(Control Panel)的32位ODBC内,其主要任务是管理安装的ODBC驱动程序和管理数据源。

驱动程序管理器(Driver Manager)。驱动程序管理器包含在ODBC32.DLL中,对用户是透明的。其任务是管理ODBC驱动程序,是ODBC中最重要的部件。

ODBC API。

ODBC 驱动程序。是一些DLL,提供了ODBC和数据库之间的接口。

数据源。数据源包含了数据库位置和数据库类型等信息,实际上是一种数据连接的抽象。

各部件之间的关系如图下图所示:

应用程序要访问一个数据库,首先必须用ODBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。这样,只要应用程序将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连接。

在ODBC中,ODBC API不能直接访问数据库,必须通过驱动程序管理器与数据库交换信息。驱动程序管理器负责将应用程序对ODBC API的调用传递给正确的驱动程序,而驱动程序在执行完相应的操作后,将结果通过驱动程序管理器返回给应用程序。

在访问ODBC数据源时需要ODBC驱动程序的支持。用Visual C++ 5.0安装程序可以安装SQL Server、 Access、 Paradox、 dBase、 FoxPro、 Excel、 Oracle 和Microsoft Text等驱动程序.在缺省情况下,VC5.0只会安装SQL Server、 Access、 FoxPro和dBase的驱动程序.如果用户需要安装别的驱动程序,则需要重新运行VC 5.0的安装程序并选择所需的驱动程序。

关于odbc提交数据库的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » ODBC连接数据库的方法及实践操作 (odbc提交数据库)