C++程序读ORACLE表里的字符串怎么读?
我的C++程序需要读数据库表里的数据,用来计算.写了点程序,读整型(getInt)和复点型(getFloat)都好用,但是读字符串编译能通过,运行就出错.
string cno;
int aa;
float bb;
cno = rset->getString(2);//正常应该读出来HAHA123456
bb =rset->getFloat(3); //正常情况下bb=3.2
aa =rset->getInt(4);
//aa=2;
只要把cno=rset->getString(2);拿掉程序就能正常运行,读出来的数也对,我怀疑是我工程建的有问题,但也不知道差在哪,希望有高手指点,谢谢.
答案:以前自己写的:
/* exam01.pc 开发Oracle接口程序举例 */
/* 说明:本程序介绍用PROC开发Oracle库接口的编程特点。通过向AUTHS
* 表输入作家代码,查询作家姓名及工资。运行前应建表、插入数据并提交。*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/* 包含SQL通讯区,它用于处理错误。*/
#include <sqlca.h>
void connect(); /* 连接到Oracle Server */
void disconnect(); /* 断开到Oracle Server的连接 */
void sql_error(char *); /* 处理错误句柄 */
void select(); /* 查询子程序 */
extern sqlglm(char *,int *,int *);
/* 主程序 */
void main()
{
/* 安装错误处理句柄 */
EXEC SQL WHENEVER SQLERROR DO sql_error("Oracle错误--\
");
/* 连接到数据库 */
connect();
/* 执行查询 */
select();
/* 断开数据库连接 */
disconnect();
}
/* 子程序 */
/* 连接子程序 connect() */
void connect()
{
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR username[10], password[10], server[10];
EXEC SQL END DECLARE SECTION;
/* 输入用户名、口令以及服务器名 */
printf("\
输入用户名:");
gets(username.arr);
username.len=(unsigned short)strlen((char *)username.arr);
printf("\
输入口令:");
gets(password.arr);
password.len=(unsigned short)strlen((char *)password.arr);
printf("\
输入服务器名:");
gets(server.arr);
server.len=(unsigned short)strlen((char *)server.arr);
/* 连接到Oracle服务器上 */
EXEC SQL CONNECT :username IDENTIFIED BY :password USING :server;
printf("\
以用户%s成功地连接到了服务器%s上!\
", username.arr, server.arr);
}
/* 断开连接子程序 disconnect() */
void disconnect()
{
char temp;
printf("\
是否在断开连接前提交所有事务? (Y/N)");
scanf("%c", &temp);
fflush(stdin);
if(temp !='Y' && temp != 'y')
{
/* 回退事务,断开连接。 */
EXEC SQL ROLLBACK WORK RELEASE;
printf("\
回退事务,断开连接,退出程序!\
\
");
}
else
{
/* 提交事务,断开连接。 */
EXEC SQL COMMIT WORK RELEASE;
printf("\
提交事务,断开连接,退出程序!\
\
");
exit(1);
}
}
/* 查询子程序 select()
* 首先输入作家代码,然后查询作家姓名和工资。*/
void select()
{
EXEC SQL BEGIN DECLARE SECTION;
char author_code[8], name[10];
float salary;
short salary_ind;
EXEC SQL END DECLARE SECTION;
printf("\
输入作家代码: ");
gets(author_code);
/* 查询作家姓名和工资 */
EXEC SQL SELECT name, salary INTO :name, :salary:salary_ind
FROM auths
WHERE author_code = :author_code;
/* 根据指示变量的值来确定该作家的工资是否为空。*/
if (salary_ind ==0)
{
printf("\
作家代码\\t作家姓名\\t作家工资\
");
printf("--------\\t--------\\t--------\
");
printf("%8s\\t%8s\\t%8.2f\
", author_code, name, salary);
}
else
{
printf("作家%s的工资未录入,为空值!\
", name);
}
}
/* 错误处理子程序 sql_error() */
void sql_error(char *msg)
{
char err_msg[128];
size_t buf_len, msg_len;
/* 出现SQL错误,继续往下执行。 */
EXEC SQL WHENEVER SQLERROR CONTINUE;
printf("\
%s\
", msg);
buf_len=sizeof(err_msg);
/* 调用函数sqlglm()获得错误消息。 */
sqlglm(err_msg, &buf_len, &msg_len);
printf("%.*s\
", msg_len, err_msg);
/* 回退事务,断开连接,退出程序。 */
EXEC SQL ROLLBACK RELEASE;
exit(EXIT_FAILURE);
}
上一个:C++直接插入排序的思想及步骤
下一个:c++中异常的处理机制是什么