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
就可以捕获它。这将有很多好处:
- 调用者将知道表中是否真的没有数据或没有表
- 来电者可能知道他为什么不能使用该表(拼写错误或出于安全原因)
- 打电话的人可以知道是否还有其他问题,并采取行动,如果没有,则重新呼叫,以便打电话的人可以
很抱歉验证太晚,在这种情况下,它看起来是最好的解决方案,我几分钟前就实现了。谢谢:)