ADO数据库操作的C++封装

 
前几日看到有位大哥发布的ADO数据库的封装,到处是模板,不免有些头晕,想起自己写的ADO数据库封装了,首先声明没有模板。但根据我3年使用的经验,确实很实用,
特点:
l         多线程安全的。
l         使用标准C++数据类型,屏蔽了com数据类型和异常。
l         操作简单,直观
1.下面是使用它进行存储过程的例子代码:
#include "AdoConn.h"
#include "AdoStoredProc.h"
#include "comm_exception.h"
using namespace C2217::StdLib;
using namespace C2217::Data;
void main()
{
       try
       {
              CAdoConn _conn("Provider=SQLOLEDB;Data Source=192.9.207.214;Initial Catalog=ibmsweb;User ID=sa; Password=sa;");
              _conn.Open();
              CAdoStoredProc sp(_conn,"Accounts_Roles_Create");
 
              CAdoStringPara para("Description", "Para9", 50);
              sp.AddPara(&para);
 
              int count =0 ;//sp.ExecuteNonQuery();
              cout << " affected cout " << count <<endl;
      
              CAdoStringPara *pStringPara = dynamic_cast<CAdoStringPara *>(sp["Description"]);
              if(pStringPara)
              {
                     cout << pStringPara->getValue() <<endl;
              }
 
              sp.ClearParameters();
 
              //Read to dataset
              CAdoRecordSet readResult;
              sp.setSpName("Accounts_Users_Select_All");
              cout << "Read affected item cout : " << sp.Execute(readResult);
 
              //cout << "Read Count :" << readResult.getRecordCount() <<endl;
       }
       catch(comm_exception &e)
       {
              SET_CATCH_POS(e);
              std::cout << e;
       }
       catch(const exception &e)
       {
              cout << e.what();
       }
}
2.读取数据的例子:
const CAdoConn & _conn =S_DeviceDb::instance()->GetAdoConn();
       CString sql;
       sql.Format("select * from %s where tag_name = '%s' ",
              m_tableName, GetName() );
       CAdoRecordSet result;
       int count = _conn.Execute(sql, result);
       if(count ==1)
       {
              result.MoveFirst();
              SetDescription( result.readStr("description").c_str());
              SetUnits( result.readStr("uints").c_str());
              SetType( result.readStr("data_type").c_str());
              SetWritebale( result.readInt("writeable"));
              SetExpress( result.readStr("cacu_express").c_str() );
              SetDeviceAddress( result.readInt("device_address"));
              SetRegisterAddress( result.readInt("register_address"));
              SetDataLen( result.readInt("data_length"));
              SetBitsStartIndex( result.readInt("start_bit_index"));
              SetBitsCount( result.readInt("bit_count"));
       }
3.输出数据的例子:
const CAdoConn & _conn =S_DeviceDb::instance()->GetAdoConn();
       CString sql;
       sql.Format("delete from %s where tag_name = '%s'", m_tableName, GetName() );
       _conn.ExecuteNonQuery( sql);
4.更新数据的例子:
const CAdoConn &  _conn =S_DeviceDb::instance()->GetAdoConn();
       CString sql;
       sql.Format("update %s set description='%s', uints='%s', data_type='%s',/
                        writeable=%d, cacu_express='%s', device_address=%d, register_address=%d, data_length =%d,/
                        start_bit_index = %d, bit_count = %d where tag_name = '%s' ", m_tableName, GetDescription(), GetUnits(), GetType(),
                        IsWriteable(), GetExpress(), GetDeviceAddress(), GetRegisterAddress(), GetDataLen(), GetBitsStartIndex(), GetBitsCount(), GetName() );
      
       VERIFY(_conn.ExecuteNonQuery(sql));
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值