工程下載:
http://www.shnenglu.com/Files/dyj057/AdoDbv1.0-2007-1-25.rar
前幾日看到有位大哥發布的
ADO
數據庫的封裝,到處是模板,不免有些頭暈,想起自己寫的
ADO
數據庫封裝了,首先聲明沒有模板。但根據我
3
年使用的經驗,確實很實用,
特點:
l????????
多線程安全的。
l????????
使用標準
C++
數據類型,屏蔽了
com
數據類型和異常,減少了復雜性。
l????????
操作簡單,直觀
1
.下面是使用它進行存儲過程的例子代碼:
異常的處理請參看:
http://www.shnenglu.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));
posted on 2007-01-26 09:53
天下無雙 閱讀(2019)
評論(2) 編輯 收藏 引用 所屬分類:
C/C++