📄 dblibrary.h
字号:
// DBLibraty.h: interface for the DBLibraty class.
//
//////////////////////////////////////////////////////////////////////
/***************************DBLibrary************************/
/* Version 1.0(测试版) */
/* 作者:张尧伟 */
/* 编写日期:2003-10-20 */
/* 第一个测试版完成日期:2003-12-01 */
/************************************************************/
/*
功能简介:
1.支持SQL语言的查询、删除及更新操作
2.支持大容量数据的批量拷贝
3.支持MS DTC分布式事务处理
4.支持错误处理
****************************************
优点:
1.比其他任何一种访问方式要快(如ODBC、OLE DB、ADO)
2.提供方便、简单、灵活的接口函数
3.使用更方便,可以提高软件的开发效率
缺点:
1.提供的方法尚不完善
2.对于存储过程的支持尚不完善
3.其它的未知错误可能存在
*/
//Include DBLibrary specific header files.
/*
#include "dberr.h"
#define DBNTWIN32
#include "sqlfront.h"
#include "sqldb.h"
*/
//Include MS DTC specific header files.
#define DBLIBRARYMSG_H
#ifndef DBSESSION_H
#define DBSESSION_H
#include "DBSession.h"
#endif
#define INITGUID
#include "txdtc.h"
#include "xolehlp.h"
#include "transact.h"
#ifndef CONSOLE32
#include "windows.h"
#endif
#define SHOW_ERR_MSG //显示错误消息
#define THROW_ERR_MSG //抛出异常说明,(#ifndef则返回错误代码)
#if !defined(AFX_DBLIBRATY_H__F639915E_F304_4D63_9F93_CF4E7589FC1B__INCLUDED_)
#define AFX_DBLIBRATY_H__F639915E_F304_4D63_9F93_CF4E7589FC1B__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
/*
#define DBOUT DB_OUT //批拷贝出
#define DBIN DB_IN //批拷贝入
*/
//Include MS DTC specific header files.
//#define INITGUID
//#include "txdtc.h"
//#include "xolehlp.h"
#define STRSQLMAX 5000 //SQL max len
#define TABLECOLS 50 //max table columns
#define COLEN 50 //最大列长度
class DBLibrary :public CDBSession
{
public:
DBLibrary();
DBLibrary(CDBSession &pDBSession);
virtual ~DBLibrary();
void ErrCheck(int code,char *str);
unsigned short COMPUTE_COLS;
void ClearDB();
private:
DBPROCESS *dbproc;
LOGINREC *login;
int proc_id;
/*
char *app_name;
LPCSTR DBLVer;
char *LogFileName,*ErrLogFile;
bool _output_to_console;
*/
bool EOFTAG;
bool INIT_TAG;
bool ISTRANS;//是否处于事务状态
ITransactionDispenser *pTransactionDispenser;
ITransaction *pTransaction;
HRESULT hr;
void init();
int GetColID(char *colName);//取列序号
int InitBCP(char *SourceTableName,//源表名
char *OutFileName,//输出文件名
char *LogFileName,//日志文件名,可以为NULL
const int BCPT//批拷贝类型,为DBOUT时,输出到文件,DBIN时输入到表
);
char *ColumnName[TABLECOLS];//table columns
int ColumnType[TABLECOLS];//column type
typedef struct colinfo{
char name[COLEN];
unsigned int index;
unsigned int type;
long len;
struct colinfo *next;
} COLINFO;
COLINFO *COLUMN;
COLINFO *COL;
int COLInit();
public:
//
// DBPROCESS* Connect(char *UserName,char *Password,char *SrvName);//创建连接
int SetDataBase(char *DBName);//打开指定数据库
int BeginTrans();
int CommitTrans();
int RollbackTrans();
int InitTrans();
int WriteLog(bool ErrLog,const char *format,...);//写日志文件,errlog=true时写入错误日志
/*
void SetAppName(char *AppName="sqlapp");//指定程序名
void SetLogFileName(char *FileName="dblog.log");//设置日志文件
void SetErrLogFile(char *FileName="errlog.log");//设置错误日志文件
void SetOutConsole(bool b=false);//是否输出到控制台
*/
void WriteSQLLog();//写入日志
int Open(const char *format,...);//执行查询,返结果集
int ExecSQL(const char *format,...);
//执行缓冲区的SQL(可返回结果集)
// int pGetValue(char *colName,long *lpresult);//int ,short,long
long GetValue(char *colName);//int ,short,long
int GetValue(char *colName,double *pdresult);//float,double,real,money,smallmoney
int GetValue(char *colName,char *cpresult); //char,text,varchar
int GetDate(char *colName,char *strdate);//datetime
int GetComputeValue(int computeID,int columnID,long *pcValue);
int GetComputeValue(int computeID,int columnID,double *pcValue);
long BatchCopyToFile(char *TableName, //表名
char *FileName, //文件名
int col[], //表列号集,首列为1
int cols, //表列号数
char *term, //分隔符
int termlen, //分隔符长度
int StartRow //开始行号,首行为1
//int BatchNum //每次拷贝数量
);
/* BatchCopyToFile
成功retrun 拷贝行数;
失败:1.如果已拷贝数大于0 return 已拷贝数
2.如果已拷贝数=0 return 错误代码
*/
int BCPInitTable(char *tableName);//取得基表字段信息
int BCPInteger(char *colName,long *lpvalue);//向数据库基表字段传送整型值(int--long)
int BCPDouble(char *colName,double *dpvalue);//向数据库基表字段传送浮点型值(float,real,double)
/* int BCPString(char *colName,
char *cpvalue,
char *term,//分隔符
int termlen //分隔符长度
);//向数据库基表字段传送字符型值(char,varchar,datetime,text)
*/
int BCPString(char *colName, char *cpvalue);//向数据库基表字段传送字符型值(char,varchar,datetime,text)
int BCPBinary(char *colName, char *buf);
int BCPSaveDone();//保存结束批拷贝
int BCPSaveBatch();//保存不结束批拷贝
//存储过程enum CI_TYPES { CI_REGULAR=1, CI_ALTERNATE=2, CI_CURSOR=3 };
struct ProcParamType{
int SQL_tinyint ; // SQLINT1;
int SQL_smallint; // SQLINT2;
int SQL_int ; //SQLINT4;
int SQL_real ; //SQLFLT4;
int SQL_float ; //SQLFLT8;
int SQL_decimal ; ///SQLDECIMAL;
int SQL_numeric ; //SQLNUMERIC;
int SQL_smallmoney; //SQLMONEY4;
int SQL_money ; //SQLMONEY;
int SQL_char ; //SQLCHAR;
int SQL_varchar ; //SQLVARCHAR;
int SQL_smalldatetime; //SQLDATETIM4;
int SQL_datetime; //SQLDATETIME;
};
struct ProcParamType ParamType;
int ProcInit(char *procName);
int ProcParam(char *param,
bool isReturn,
int paramType,
long maxlen,
long datalen,
LPCBYTE paramValue);
int ProcExec();
bool isEof()
{
return EOFTAG;
}
int InitRead();
int Next() ;
int First()
{
EOFTAG=false;
INIT_TAG=FALSE;
return dbgetrow(dbproc,1);
}
void test();
};
#endif // !defined(AFX_DBLIBRATY_H__F639915E_F304_4D63_9F93_CF4E7589FC1B__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -