ADO数据库操作的C++封装
2007-01-25 19:28
471 查看
工程下载:http://www.cppblog.com/Files/dyj057/AdoDbv1.0-2007-1-25.rar
前几日看到有位大哥发布的ADO数据库的封装,到处是模板,不免有些头晕,想起自己写的ADO数据库封装了,首先声明没有模板。但根据我3年使用的经验,确实很实用,
特点:
l 多线程安全的。
l 使用标准C++数据类型,屏蔽了com数据类型和异常。
l 操作简单,直观
1.下面是使用它进行存储过程的例子代码:
异常的处理请参看:http://www.cppblog.com/dyj057/archive/2007/01/24/17944.html
#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(¶);
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));
前几日看到有位大哥发布的ADO数据库的封装,到处是模板,不免有些头晕,想起自己写的ADO数据库封装了,首先声明没有模板。但根据我3年使用的经验,确实很实用,
特点:
l 多线程安全的。
l 使用标准C++数据类型,屏蔽了com数据类型和异常。
l 操作简单,直观
1.下面是使用它进行存储过程的例子代码:
异常的处理请参看:http://www.cppblog.com/dyj057/archive/2007/01/24/17944.html
#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(¶);
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));
相关文章推荐
- C++通过ADO操作数据库
- 封装的ADO.NET对数据库操作经典类
- Asp.Net Core 2.0 项目实战(4)ADO.NET操作数据库封装、 EF Core操作及实例
- 自己动手写ORM框架(二):AdoHelper支持多数据库操作的封装(2)
- 我封装的ADO.NET对数据库操作经典类
- 封装的ADO.NET对数据库操作经典类
- 自己动手写ORM框架(二)-AdoHelper支持多数据库操作的封装(1)
- C++中利用ADO方式进行数据库操作的类,主要用来执行存储过程
- C++封装ADO数据库连接,并附上DLL源码和测试程序
- 封装的ADO.NET对数据库操作经典类 [更新]
- 封装的ADO.NET对数据库操作经典类
- 封装的ADO.NET对数据库操作经典类
- c++通过ADO对数据库操作
- C++数据库操作学习笔记:ADO基础知识
- 封装的ADO.NET对数据库操作经典类
- 封装的ADO.NET对数据库操作经典类 代码
- 自己动手写ORM框架(二):AdoHelper支持多数据库操作的封装(2)
- vc++学生选课系统开发 sql操作数据库 ado封装
- VC下ADO数据库操作的封装类
- 封装的ADO.NET对数据库操作经典类