ODBC-C语言连接数据库(SQL Server 2000)(上)

时间:2021-12-04 19:51:42

1.ODBC定义

ODBC(Open Database Connectivity)开放式数据库互连是Microsoft提出的数据库访问接口标准,提供了一组对数据库访问的标准API。

Application<-->ODBC manager<-->ODBC Drivers<-->Data Sources

2.ODBC所需头文件

#include<windows.h>//否则sqltypes.h(137) : error C2146: syntax error : missing ';' before identifier 'SQLHWND'

#include<sql.h>

#include<sqlext.h>

#include<sqltypes.h>

#include<sqlucode.h>

#include<odbcss.h>

3.数据类型定义

C语言数据类型<——>ODBC数据类型<——>数据库SQL语言数据类型

由于ODBC的驱动程序调用自己的DBMS数据库访问接口时就会将ODBC数据类型转化为数据库SQL语言数据类型,所以我们只需了解C语言数据类型和ODBC数据类型的转换关系。在进行ODBC开发过程中不要使用C语言实际类型而应该使用ODBC数据类型。

表一

ODBC数据类型名称

SQL语言数据类型名称

SQL_CHAR

CHAR(n)

SQL_VARCHAR

VARCHAR(n)

SQL_LONGVARCHAR

LONG VARCHAR

SQL_WCHAR

WCHAR(n)

SQL_WVARCHAR

VARWCHAR(n)

SQL_WLONGVARCHAR

LONGWVARCHAR

SQL_DECIMAL

DECIMAL(p,s)

SQL_NUMERIC

NUMERIC(p,s)

SQL_SMALLINT

SMALLINT

SQL_INTEGER

INTEGER

SQL_REAL

REAL

SQL_FLOAT

FLOAT(p)

SQL_DOUBLE

DOUBLE PRECISION

SQL_BIT

BIT

SQL_TINYINT

TINYINT

SQL_BIGINT

BIGINT

SQL_BINARY

BINARY(n)

SQL_VARBINARY

VARBINARY(n)

SQL_LONGVARBINARY

LONG VARBINARY

SQL_TYPE_DATE

DATE

SQL_TYPE_TIME

TIME(p)

SQL_TYPE_TIMESTAMP

TIMESTAMP(p)

SQL_GUID

GUID

表二

C语言数据类型名称

ODBC 数据类型定义

C语言实际类型

SQL_C_CHAR

SQLCHAR *

unsigned char *

SQL_C_SSHORT

SQLSMALLINT

short int

SQL_C_USHORT

SQLUSMALLINT

unsigned short int

SQL_C_SLONG

SQLINTEGER

long int

SQL_C_ULONG

SQLUINTEGER

unsigned long int

SQL_C_FLOAT

SQLREAL

float

SQL_C_DOUBLE

SQLDOUBLE, SQLFLOAT

double

SQL_C_BIT

SQLCHAR

unsigned char

SQL_C_STINYINT

SQLSCHAR

signed char

SQL_C_UTINYINT

SQLCHAR

unsigned char

SQL_C_SBIGINT

SQLBIGINT

_int64

SQL_C_UBIGINT

SQLUBIGINT

unsigned _int64

SQL_C_BINARY

SQLCHAR *

unsigned char *

SQL_C_BOOKMARK

BOOKMARK

unsigned long int

SQL_C_VARBOOKMARK

SQLCHAR *

unsigned char *

SQL_C_TYPE_DATE

SQL_DATE_STRUCT

struct tagDATE_STRUCT {
     SQLSMALLINT year; 
     SQLUSMALLINT month; 
     SQLUSMALLINT day; 
} DATE_STRUCT;

SQL_C_TYPE_TIME

SQL_TIME_STRUCT

struct tagTIME_STRUCT {
     SQLUSMALLINT hour; 
     SQLUSMALLINT minute; 
     SQLUSMALLINT second; 
} TIME_STRUCT;

SQL_C_TYPE_TIMESTAMP

SQL_TIMESTAMP_STRUCT

struct tagTIMESTAMP_STRUCT {
     SQLSMALLINT year; 
     SQLUSMALLINT month; 
     SQLUSMALLINT day; 
     SQLUSMALLINT hour; 
     SQLUSMALLINT minute; 
     SQLUSMALLINT second; 
     SQLUINTEGER fraction;
} TIMESTAMP_STRUCT;

SQL_C_NUMERIC

SQL_NUMERIC_STRUCT

struct tagSQL_NUMERIC_STRUCT {
     SQLCHAR precision;
     SQLSCHAR scale; 
     SQLCHAR sign; 
     SQLCHAR val[SQL_MAX_NUMERIC_LEN];
} SQL_NUMERIC_STRUCT;

SQL_C_GUID

SQLGUID

struct tagSQLGUID {
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[8];
} SQLGUID;

4.ODBC句柄

环境句柄

数据库连接句柄

SQL语句句柄

在使用ODBC时必须先申请环境句柄,然后在环境句柄的基础上创建数据库连接句柄,最后在数据连接的基础上创建SQL语句句柄,执行SQL语句。

5.建立ODBC DSN

DSN(Data Source Name)数据源名是用于指定ODBC与相关的驱动程序相对应的一个入口,所有的DSN信息由系统管理。

控制面板-->管理工具-->数据源(ODBC):

ODBC-C语言连接数据库(SQL Server 2000)(上)

DSN分三类:

用户DSN:对当前用户可见,只能够用于当前计算机 

系统DSN:对当前系统上所有用户可见,包括NT中的服务器。系统DSN告诉应用程序如何与数据库相连和交互,但它不包含数据库所需的任何数据

 文件DSN:DSN信息存放在文件中,对能够访问到该文件的用户可见

用户DSN-->添加-->创建新数据源-->选择SQL Server驱动程序:

ODBC-C语言连接数据库(SQL Server 2000)(上)ODBC-C语言连接数据库(SQL Server 2000)(上)

下一步-->登录方式:

ODBC-C语言连接数据库(SQL Server 2000)(上)

默认数据库master:

ODBC-C语言连接数据库(SQL Server 2000)(上)

设置语言、数字、时间、日志等:

ODBC-C语言连接数据库(SQL Server 2000)(上)

测试数据源:

ODBC-C语言连接数据库(SQL Server 2000)(上)

测试结果:

ODBC-C语言连接数据库(SQL Server 2000)(上)

测试成功后:

ODBC-C语言连接数据库(SQL Server 2000)(上)