⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dblibrary.h

📁 VC下通过DB-LIBRARYDE的API函数操作SQLSERVER数据库.
💻 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 + -