我可以 return 来自函数的 CRecordset 对象吗?
Can I return a CRecordset object from a function?
我在 MFC vc++ 中有我的项目。我的 UI 和业务逻辑层与数据访问层分开。
我有一个函数 selects 一些数据从数据库到 CRecordset 对象。此 select 查询在数据访问层处理。当我尝试 return 记录集(使用数据在 UI 中构造 table)时出现错误。
我试过这个:
CRecordset COrderSearch::ExecuteSqlQuery(CString query)
{
CString sqlQuery;
CRecordset records;
CDatabase database;
sqlQuery = L"SELECT * FROM USers";
SetConnectionStr(connectionString); //set the connection string
ConnectToDatabase(); //database.open()
records.m_pDatabase = &database;
records.Open(CRecordset::dynaset, sqlQuery, CRecordset::readOnly);
return records;
}
我得到的错误:
error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject'
CObject
是不可复制的 class。复制c'tor 是私有的以防止复制。
因为 CRecordset
继承自 CObject
并且不提供自己的复制构造函数。也不可复制。按值返回需要存在复制(或移动)构造函数。
所以你唯一的办法就是使用 "output parameter";让调用者传递 ExecuteSqlQuery
应该填充的 CRecordset
:
void COrderSearch::ExecuteSqlQuery(CString query, CRecordset& outRecords) {
// populate outRecords
}
或return指向CRecordset
的智能指针。
我在 MFC vc++ 中有我的项目。我的 UI 和业务逻辑层与数据访问层分开。 我有一个函数 selects 一些数据从数据库到 CRecordset 对象。此 select 查询在数据访问层处理。当我尝试 return 记录集(使用数据在 UI 中构造 table)时出现错误。
我试过这个:
CRecordset COrderSearch::ExecuteSqlQuery(CString query)
{
CString sqlQuery;
CRecordset records;
CDatabase database;
sqlQuery = L"SELECT * FROM USers";
SetConnectionStr(connectionString); //set the connection string
ConnectToDatabase(); //database.open()
records.m_pDatabase = &database;
records.Open(CRecordset::dynaset, sqlQuery, CRecordset::readOnly);
return records;
}
我得到的错误:
error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject'
CObject
是不可复制的 class。复制c'tor 是私有的以防止复制。
因为 CRecordset
继承自 CObject
并且不提供自己的复制构造函数。也不可复制。按值返回需要存在复制(或移动)构造函数。
所以你唯一的办法就是使用 "output parameter";让调用者传递 ExecuteSqlQuery
应该填充的 CRecordset
:
void COrderSearch::ExecuteSqlQuery(CString query, CRecordset& outRecords) {
// populate outRecords
}
或return指向CRecordset
的智能指针。