ODBC API 懂的高手进。。
bool IsInTable(INT16U tableNum,INT16U mno,char *inputOrder)//,char *inputOrder)//判断纪录是否存在
{//不在表中返回false,在表中则print出满足条件的其它列值。
SQLHENV serverhenv; //环境句柄
SQLHDBC serverhdbc; //连接句柄
SQLHSTMT serverhstmt; //语句句柄
SQLRETURN ret; //返回集 //short 类型
bool retn = false;
SQLINTEGER cb1 = strlen(inputOrder);
char stmt[100];//语句
sprintf(stmt,"select * from RGDB.dbo.input%d where Mno = ? and InputOrder like ?",tableNum);
SQLINTEGER cbn = 0,cbs = SQL_NTS;
//初始化环境
ret = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&serverhenv);//初始化环境句柄
ret = SQLSetEnvAttr(serverhenv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);//设置环境句柄版本
//建立连接
ret = SQLAllocHandle(SQL_HANDLE_DBC,serverhenv,&serverhdbc);//初始化连接句柄
ret = SQLConnect(serverhdbc,(SQLCHAR*)"SQL Server",SQL_NTS,(SQLCHAR*)"Lucifer-PC",SQL_NTS,(SQLCHAR*)"",SQL_NTS);
//连接句柄,数据源,用户名,密码。
if(!SQL_SUCCEEDED(ret))
{
printf("数据库连接失败!");
return false;
}
else
{
printf("数据库连接成功!");
}
//初始化语句句柄
ret = SQLAllocHandle(SQL_HANDLE_STMT,serverhdbc,&serverhstmt);// statement handle
ret = SQLPrepare(serverhstmt,(SQLCHAR*)stmt,SQL_NTS);
//SQL_NTS is SQL null-terminated string
if(ret == SQL_SUCCESS||ret == SQL_SUCCESS_WITH_INFO)
{
ret = SQLBindParameter(serverhstmt,1,SQL_PARAM_INPUT,SQL_C_SHORT,SQL_SMALLINT,0 ,0,&mno, 0,&cbn);
ret = SQLBindParameter(serverhstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR, SQL_CHAR, cb1 ,0,inputOrder, cb1,&cbs);
}
ret = SQLExecute(serverhstmt);//执行程序
while(1)
{
ret = SQLFetch(serverhstmt);
if(ret == SQL_ERROR || ret == SQL_SUCCESS_WITH_INFO)
{
printf("error SQLFetch\n");
}
if(ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
{
retn = true;
SQLGetData(serverhstmt,3,SQL_C_LONG,&gateNum, 0,&cbn);
SQLGetData(serverhstmt,4,SQL_C_DOUBLE,&calcTime, 0,&cbn);//精度为6
SQLGetData(serverhstmt,5,SQL_C_CHAR,gate, 100,&cbs);
printf("%d,%f,%s\n",gateNum,calcTime,gate);
}
else{
break;
}
}
return retn;
SQLFreeHandle(SQL_HANDLE_STMT,serverhstmt);//正确的释放 四个步骤
SQLDisconnect(serverhdbc);
SQLFreeHandle(SQL_HANDLE_DBC,serverhdbc);
SQLFreeHandle(SQL_HANDLE_ENV,serverhenv);
}
//该函数的功能是 在表
USE [RGDB]
GO
/****** 对象: Table [dbo].[input4] 脚本日期: 09/26/2010 21:29:55 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[input4](
[Mno] [smallint] NOT NULL,
[InputOrder] [nchar](15) NOT NULL,
[GateNum] [int] NOT NULL,
[CalcTime] [float] NOT NULL,
[Gate] [varchar](max) NOT NULL,
CONSTRAINT [PK_input4] PRIMARY KEY CLUSTERED
(
[Mno] ASC,
[InputOrder] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
查找 与Mno相同且 InputOrder相同 的行,若不存在则返回false,若存在则打印出符合条件行的另外3列的值。
但是问题出在 InputOrder like ? 上 两个字符串无法进行正确的比较。请高手指教。 并且满足函数功能时用的分支结构好像不太好,因为不太清楚用哪个函数直接判断返回集是否为空,且不用移动游标。 谢谢!
{//不在表中返回false,在表中则print出满足条件的其它列值。
SQLHENV serverhenv; //环境句柄
SQLHDBC serverhdbc; //连接句柄
SQLHSTMT serverhstmt; //语句句柄
SQLRETURN ret; //返回集 //short 类型
bool retn = false;
SQLINTEGER cb1 = strlen(inputOrder);
char stmt[100];//语句
sprintf(stmt,"select * from RGDB.dbo.input%d where Mno = ? and InputOrder like ?",tableNum);
SQLINTEGER cbn = 0,cbs = SQL_NTS;
//初始化环境
ret = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&serverhenv);//初始化环境句柄
ret = SQLSetEnvAttr(serverhenv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);//设置环境句柄版本
//建立连接
ret = SQLAllocHandle(SQL_HANDLE_DBC,serverhenv,&serverhdbc);//初始化连接句柄
ret = SQLConnect(serverhdbc,(SQLCHAR*)"SQL Server",SQL_NTS,(SQLCHAR*)"Lucifer-PC",SQL_NTS,(SQLCHAR*)"",SQL_NTS);
//连接句柄,数据源,用户名,密码。
if(!SQL_SUCCEEDED(ret))
{
printf("数据库连接失败!");
return false;
}
else
{
printf("数据库连接成功!");
}
//初始化语句句柄
ret = SQLAllocHandle(SQL_HANDLE_STMT,serverhdbc,&serverhstmt);// statement handle
ret = SQLPrepare(serverhstmt,(SQLCHAR*)stmt,SQL_NTS);
//SQL_NTS is SQL null-terminated string
if(ret == SQL_SUCCESS||ret == SQL_SUCCESS_WITH_INFO)
{
ret = SQLBindParameter(serverhstmt,1,SQL_PARAM_INPUT,SQL_C_SHORT,SQL_SMALLINT,0 ,0,&mno, 0,&cbn);
ret = SQLBindParameter(serverhstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR, SQL_CHAR, cb1 ,0,inputOrder, cb1,&cbs);
}
ret = SQLExecute(serverhstmt);//执行程序
while(1)
{
ret = SQLFetch(serverhstmt);
if(ret == SQL_ERROR || ret == SQL_SUCCESS_WITH_INFO)
{
printf("error SQLFetch\n");
}
if(ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
{
retn = true;
SQLGetData(serverhstmt,3,SQL_C_LONG,&gateNum, 0,&cbn);
SQLGetData(serverhstmt,4,SQL_C_DOUBLE,&calcTime, 0,&cbn);//精度为6
SQLGetData(serverhstmt,5,SQL_C_CHAR,gate, 100,&cbs);
printf("%d,%f,%s\n",gateNum,calcTime,gate);
}
else{
break;
}
}
return retn;
SQLFreeHandle(SQL_HANDLE_STMT,serverhstmt);//正确的释放 四个步骤
SQLDisconnect(serverhdbc);
SQLFreeHandle(SQL_HANDLE_DBC,serverhdbc);
SQLFreeHandle(SQL_HANDLE_ENV,serverhenv);
}
//该函数的功能是 在表
USE [RGDB]
GO
/****** 对象: Table [dbo].[input4] 脚本日期: 09/26/2010 21:29:55 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[input4](
[Mno] [smallint] NOT NULL,
[InputOrder] [nchar](15) NOT NULL,
[GateNum] [int] NOT NULL,
[CalcTime] [float] NOT NULL,
[Gate] [varchar](max) NOT NULL,
CONSTRAINT [PK_input4] PRIMARY KEY CLUSTERED
(
[Mno] ASC,
[InputOrder] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
查找 与Mno相同且 InputOrder相同 的行,若不存在则返回false,若存在则打印出符合条件行的另外3列的值。
但是问题出在 InputOrder like ? 上 两个字符串无法进行正确的比较。请高手指教。 并且满足函数功能时用的分支结构好像不太好,因为不太清楚用哪个函数直接判断返回集是否为空,且不用移动游标。 谢谢!
...全文
相关推荐
ODBC API编程
使用ODBC API编程需要程序开发者熟悉SQL语句,并且了解如何使用ODBC API提供的函数来实现数据库操作。ODBC API的使用是通过包含和链接相应的ODBC库和头文件来实现的。
ODBC-API.rar_C ODBC API_ODBC API_odbc _odbc api_odbc api book
标签中的"c_odbc_api"、"odbc__api"、"odbc_" 和 "odbc_api_book"进一步强化了ODBC API是基于C语言的,并且可能包含有关如何使用ODBC API的详细教程或者参考书籍
ODBC API编程详解,及其API函数使用详解
ODBC API是ODBC标准的核心组件,提供了访问数据库的标准接口,允许开发人员使用统一的API访问不同的数据库管理系统(DBMS)。
odbc api教程
### ODBC API 教程知识点总结#### 一、ODBC简介及发展历程- **ODBC**(Open Database Connectivity)是一种由微软公司在1992年提出的开放标准,旨在为不同数据库之间提供统一的访问接口
ODBC API Example ODBC 范例程序
本示例程序主要展示了如何利用ODBC API在C语言环境中进行数据库操作。1. ODBC API基础: ODBC API是一系列函数,用于在应用程序和数据库之间建立桥梁。


疑难问题
