SOCI связывается с указателем набора строк при использовании Core Interface
У меня есть следующий код, который я пытаюсь использовать основной интерфейс SOCI и получить результат для объекта набора строк. Этот код отлично работает, но я все равно не могу получить результат набора непосредственно к указателю набора строк.
int main(int argc, char* argv[])
{
std::string user = "dbuser1";
std::string password= "dbuser1";
std::string alias= "localhost:1521/ora12c";
std::string connection = "service=" + alias + " user=" + user + " password=" + password;
soci::rowset<soci::row>* rowSet = NULL;
try
{
soci::session sociSession(soci::oracle, connection);
soci::row row;
std::vector<std::string> values;
std::string m_sql = "SELECT * FROM TEST_TABLE WHERE RECORD_STATUS =:1 AND LOGIN_STATUS=:2";
values.push_back("0");
values.push_back("1");
soci::statement st(sociSession);
st.exchange(soci::into(row));
for(std::size_t i=0; i<values.size(); ++i)
{
st.exchange(soci::use(values[i]));
}
st.alloc();
st.prepare(m_sql);
st.define_and_bind();
st.execute(true);
//TODO get the result set to to rowSet
}
catch (soci::oracle_soci_error const &e)
{
cout << "Oracle error: " << e.err_num_
<< " " << e.what() << endl;
}
catch (exception const &e)
{
cout << "Some other error: " << e.what() << endl;
}
return 0;
}
В документации есть раздел для получения итератора, как показано ниже soci::rowset_iterator<soci::row> it(st, row)
и самая близкая вещь, которую я мог найти, была exchange_for_rowset
в классе заявления. Но в этом тоже не было удачи. Есть ли возможность назначить результирующий набор непосредственно soci::rowset<soci::row>*
в соц или мне надо итерировать по нему и присваивать им. Я новичок в Core Interface в соци и не нашел много примеров. Высоко ценю помощь.