首页/技术开发/内容

一个用技巧强大的ODBC API 函数访问数据库类

技术开发2022-07-19 阅读()
/*-- 专项技术学习 -数据库访问技术之ODBC API                 
     这个类 通过ODBC API 函数访问ODBC 数据源的数据表            
     功能简介:能够帮定一个临时指定表,调用类的函数即可对该表    
     插入、增加、修改、简单统计等等操作(注:通过动态改变表的信息:表名字、
  表字段总数、字段名字、字段类型、字段是否为数值、字段是否为主键。这样
  就可以访问ODBC 数据源的所有表了)                          
     另外提供一个函数 可以对该数据源的其他表(包括帮定的表)进行 
     删除、修改功能                                               
     LSZ 2001.08.25                                                  */

/*头文件*/

#ifndef _WDC_DATABASE_H
#define _WDC_DATABASE_H

#include <sql.h>
#include <sqlext.h>

#define  MAX_FIELDS     500
#define  MAX_ERROR_MSG  1024
#define  MAX_DATA     500

class CWdcDatabase  
{
public:
CWdcDatabase();
virtual ~CWdcDatabase();
    BOOL Open(const CString& sDSN,
     const CString& sTable,
     const CString& sUserId,
     const CString& sPassword)  ; /*打开一个ODBC数据源数据库*/

public:
BOOL m_bOpen;  /*标志数据库是否打开*/
BOOL m_bBrackets; /*标识表名、字段名是否用方扩号扩起来*/
int m_nError;  /*ODBC错误返回代码*/
CString m_sQuery; /*操作ODBC 数据源公用的语句,用于方便构造*/
CString m_sErrMsg; /*ODBC错误返回信息*/
CString m_sDSN;  /*ODBC 数据源的 DSN*/
CString m_sTable;   /*临时绑定的表名*/

public:
void DropHstmtSelect(); /*确保公共查询的语句句柄释放*/
long GetRecordCount(CString &sSel); /*取得符合条件的记录数*/
BOOL NextMatchingRecord(); /*查询符合条件的下一条记录*/
int SelectMatchingRecords(CString& sWhereContext); /*查询符合条件的记录*/
BOOL UpdateRecord(); /*更新临时绑定的表的一条记录*/
BOOL AddRecord();    /*增加临时绑定表一条新记录*/
BOOL DeleteRecord(CString &sWhereDelete); /*删除临时绑定表符合条件记录*/
BOOL Execute(const CString  &sText); /*执行一个SQL语句,注:可以执行存储过程*/
void Close();        /*关闭数据库*/
public:
int m_nFields;       /*临时绑定表字段的总数*/
CString m_sFieldName[MAX_FIELDS]; /*临时绑定表字段名字*/
CString m_sFieldValue[MAX_FIELDS];/*临时绑定表字段值*/
BOOL m_bKeyField[MAX_FIELDS];/*临时绑定表字段是否为主键*/
BOOL m_bNumeric[MAX_FIELDS];/*临时绑定表字段是否为数值类型*/

private:
CString Quote(CString &sQuote); /*字符串替换*/
RETCODE rc;                     /*ODBC API 涵数执行返回码*/
HSTMT hstmt, hstmt_select; /*公共语句句柄*/
unsigned char szDSN[200]; /*连接数据源的 DSN */
unsigned char szID[200]; /*连接数据源的 UID */
unsigned char szPassword[200]; /*连接数据源的 PWD*/
unsigned char szQuery[3000]; /*公共执行的语句句柄*/
unsigned char szTemp[1000]; /*公共使用的字符串*/
CString sTemp ; /*公共使用的字符串*/
HENV henv;      /*环境句柄*/
HDBC hdbc;      /*ODBC 连接句柄*/
};

#endif


/*实现文件*/

#include "stdafx.h"
#include "WdcDatabase.h"
#include <sql.h>
#include <sqlext.h>

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

CWdcDatabase::CWdcDatabase()
{
  m_nError = 0;
m_bOpen = false;
m_nFields = 0;
m_bBrackets = false;
}

CWdcDatabase::~CWdcDatabase()
{
    if(m_bOpen)
{
  Close() ;
}
}

BOOL CWdcDatabase::Open(const CString& sDSN,
      const CString& sTable,
      const CString& sUserId,
      const CString& sPassword)
{
    if(m_bOpen)
{
  Close() ;
}

hstmt_select = NULL ;
RETCODE rc ;
CString stemp ;

memset(szDSN,0x00,200) ;
    memset(szID,0x00,200) ;
memset(szPassword,0x00,200) ;
/*Open Database */
SQLAllocEnv(&henv) ;
SQLAllocConnect(henv,&hdbc) ;

strcpy((char*)szDSN,sDSN) ;

stemp = sUserId ;
strcpy((char*)szID,stemp) ;

    stemp = sPassword ;
strcpy((char*)szPassword,stemp) ;

m_sDSN   = sDSN ;
m_sTable = sTable ;

rc = SQLConnect(hdbc,
     szDSN,
     SQL_NTS,
     szID,
     SQL_NTS,
     szPassword,
     SQL_NTS);

m_nError = (int) rc ;

if((rc == SQL_SUCCESS ) (北联网教程,专业提供视频软件下载)

第1页  第2页  第3页  第4页  第5页  第6页  第7页  第8页  第9页  第10页  第11页  第12页  第13页  第14页  第15页  第16页  第17页  第18页  第19页  第20页  第21页  第22页  第23页  第24页  第25页 

……

相关阅读