ORACLE数据导出C程序
来源:互联网 发布:创业软件几时复牌 编辑:程序博客网 时间:2024/05/16 17:07
#include <stdio.h>
#include <dbsql.h>
#include <libgen.h>
/*去掉传入的str右边的空格' '*/
char *ltrim( char *str )
{
int len ;
len = strlen (str);
while ( len > 0 && str[len -1 ] == ' ' )
{
len --;
}
str[len] = '/0';
return str;
}
int main(int argc, char *argv[])
{
HSTMT hstmt; /*#define HSTMT int*/
RETCODE rc; /*#define RETCODE int*/
char tmp[3],tmpstr[1024];
char tmpsql[1024],passwd[64],user[64],tablename[64],tablefile[128];
short int counts;
int pcrow,i;
int num,len;
double tm1,tm2;
FILE *fptr;
int is_sql = 0 ;
if ( argc != 5 && argc != 6)
{
printf("Usage : %s user passwd tablename tablefile /n",basename(argv[0]));
printf("Or Usage : %s -sql user passwd tablefile sqlstmt/n",basename(argv[0]));
exit (-1);
}
if ( argc == 5 ) /*如果是5个参数,则是到处整个tablename表数据*/
{
len = strlen ( argv[1]);
len = len >= 63 ? 63 : len;
sprintf(user,"%*.*s",len,len,argv[1]);
len = strlen ( argv[2]);
len = len >= 63 ? 63 : len;
sprintf(passwd,"%*.*s",len,len,argv[2]);
len = strlen ( argv[3]);
len = len >= 63 ? 63 : len;
sprintf(tablename,"%*.*s",len,len,argv[3]);
len = strlen ( argv[4]);
len = len >= 127 ? 127 : len;
sprintf(tablefile,"%*.*s",len,len,argv[4]);
}
else if ( argc == 6 && memcmp(argv[1],"-sql",4) == 0) /*如果是6位参数,并且第2个是"-sql"*/
{
is_sql = 1;
len = strlen ( argv[2]);
len = len >= 63 ? 63 : len;
sprintf(user,"%*.*s",len,len,argv[2]);
len = strlen ( argv[3]);
len = len >= 63 ? 63 : len;
sprintf(passwd,"%*.*s",len,len,argv[3]);
len = strlen ( argv[4]);
len = len >= 127 ? 127 : len;
sprintf(tablefile,"%*.*s",len,len,argv[4]);
memset(tablename,'/0',sizeof(tablename));
}
else
{
printf("Usage : %s -sql user passwd tablefile sqlstmt/n",basename(argv[0]));
exit (-1);
}
tm1= get_milli_time();
printf(" /n/t正在倒表 %s ,请稍后... ... /n",tablename);
fptr = fopen(argv[4],"w+t"); /*打开第5个文件参数文件*/
if (fptr == NULL)
{
printf("open output file %s error/n",tablefile);
fflush(stdout);
printf("/t倒出表 %s 失败./n",tablename);
return -1;
}
SQLAllocEnv(0); /*初始化数据库环境*/
/*连接数据库*/
rc = SQLConnect( 0,(UCHAR *)"",0,(UCHAR *)user,0,(UCHAR *)passwd,0);
if (rc != SQL_SUCCESS)
{
printf(" /t倒出表 %s 失败./n",tablename);
return -1;
}
SQLAllocStmt(0,&hstmt); /*初始化数据库句柄*/
if (rc != SQL_SUCCESS)
{
printf("Alloc stmt is failed./n");
printf(" /t倒出表 %s 失败./n",tablename);
fflush(stdout);
return -1;
}
if ( 1 == is_sql )
{
sprintf(tmpsql,"%s",argv[5]);
}
else
{
sprintf(tmpsql,"select * from %s",tablename );
}
rc = SQLPrepare(hstmt,(UCHAR *)tmpsql,0);
if (rc != SQL_SUCCESS)
{
printf("sql is %s/n",tmpsql);
printf(" /t倒出表 %s 失败./n",tablename );
fflush(stdout);
return -1;
}
rc = SQLExecute(hstmt); /*执行句柄*/
if (rc != SQL_SUCCESS)
{
printf("file is %s line is %d/n",__FILE__,__LINE__);
printf(" /t倒出表 %s 失败./n",tablename );
fflush(stdout);
return -1;
}
SQLNumResultCols( hstmt,( SWORD FAR *)&counts);
num = 0;
while (1)
{
rc = SQLFetch(hstmt); /*读取下一条记录*/
if (rc == SQL_SUCCESS )
{
num ++;
for ( i=0; i<counts; i++ )
{
SQLGetData(hstmt,i+1,SQL_C_CHAR,tmpstr,1023,&pcrow); /*读取数据*/
fprintf(fptr,"%.*s|",pcrow,ltrim(tmpstr)); /*每个字段以"|"分隔*/
}
fprintf(fptr,"/n");
}
else
{
break; /*如果没有数据了就break,退出循环*/
}
}
fclose(fptr); /*关闭文件*/
tm2= get_milli_time();
printf("/t共有 %d 行被倒出,耗时: %12.4lf 秒/n/n" , num , tm2 - tm1);
SQLFreeStmt( hstmt, SQL_DROP); /*释放句柄*/
SQLFreeEnv(0); /*释放数据库环境*/
return 0;
}
- ORACLE数据导出C程序
- ORACLE数据导出Shell程序
- ORACLE数据导入C程序
- oracle数据库导出程序
- 【C#】WindowsForm程序-导出DataGridView数据到Excel表
- oracle 导出数据再压缩
- Oracle数据导入导出
- 命令行导出Oracle数据
- oracle数据导出语句
- Oracle数据导入导出
- Oracle数据导入导出
- oracle导出数据字典
- oracle数据导入导出
- oracle导入导出数据
- oracle中导出数据
- Oracle数据导入导出
- oracle 数据导出导入
- Oracle数据导入导出
- ASP.NET Web 服务、企业服务和 .NET Remoting 的性能比较(有一些指标)
- 如何把SATA/RAID驱动集成到win xp 安装盘里?
- 制作基于WIM的安装盘
- 简明批处理
- [恭贺新禧]祝大家新年快乐
- ORACLE数据导出C程序
- EJB3,我们究竟得到了什么 (1)
- 明年见...
- PHP开发框架总结
- 又过去一年
- 2005 上半年 读书总览
- [原]暂时没有标题
- 网络开始困难起来
- 网页制作教程网站