gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:44:35 29 4
gpt4 key购买 nike

假设我有以下功能。如果出现无效参数或异常,该函数必须以空 rowset 退出。

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;
}

我上面写的解决方案有效,但我的问题是:是否有更好的方法来使用 SOCI 返回空行集?

最佳答案

由于文档对此提供的内容不多,因此我查看了行集 header :它没有默认构造函数,也没有设置迭代器的公共(public)方法,因此您无法自己获得空行集。

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

  • 调用者会知道表中是真的没有数据还是没有表
  • 调用者可以知道为什么他不能使用该表(拼写错误或安全原因)
  • 调用者可以知道是否还有其他问题并采取行动,如果没有,则重新抛出它,这样他的调用者就可以了。

关于c++ - 如何使用 SOCI 正确声明空行集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29740911/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com