C++ 如何使用SOCI正确声明空行集?

C++ 如何使用SOCI正确声明空行集?,c++,soci,C++,Soci,假设我有以下函数。如果参数无效或出现异常,函数必须以空的行集退出 rowset<row> SelectAllFromTable(string tableName) { session sql(odbc, "..."); // if parameters are not valid -> return empty rowset<row> if (tableName == "") { // query that retu

假设我有以下函数。如果参数无效或出现异常,函数必须以空的
行集退出

rowset<row> SelectAllFromTable(string tableName)
{
    session sql(odbc, "...");

    // if parameters are not valid -> return empty rowset<row>
    if (tableName == "")
    {
        // query that returns 0 result
        rowset<row> res = (sql.prepare << "SELECT ID FROM T1 WHERE ID = -9999");
        return res;
    }

    string query = "SELECT * FROM " + tableName;

    try
    {
        rowset<row> rs = sql.prepare << query;
        return rs;
    }
    catch (exception const &e)
    {
        cerr << "Error: " << e.what() << endl;
        // query that returns 0 result
        rowset<row> res = (sql.prepare << "SELECT ID FROM T1 WHERE ID = -9999");
        return res;
    }

    // query that returns 0 result
    rowset<row> res = (sql.prepare << "SELECT ID FROM T1 WHERE ID = -9999");
    return res;
}
行集SelectAllFromTable(字符串表名)
{
会话sql(odbc,“…”);
//如果参数无效->返回空行集
如果(tableName==“”)
{
//返回0结果的查询

rowsetres=(sql.prepare由于文档对此没有太多内容,我查看了rowsetheader:它没有默认的构造函数,也没有设置迭代器的公共方法,因此您自己无法获得空的行集

尽管您为什么不使用非常适合这种情况的异常。只要不捕获soci_错误异常,调用方
SelectAllFromTable
就可以捕获它。这将有很多好处:

  • 调用者将知道表中是否真的没有数据或没有表
  • 来电者可能知道他为什么不能使用该表(拼写错误或出于安全原因)
  • 打电话的人可以知道是否还有其他问题,并采取行动,如果没有,则重新呼叫,以便打电话的人可以

很抱歉验证太晚,在这种情况下,它看起来是最好的解决方案,我几分钟前就实现了。谢谢:)