我正试图使用OTL对sql server数据库进行基本插入。对于这个插入,我不需要绑定任何参数。
otl_stream o_stream;
std::string query = "INSERT INTO common VALUES (1,2,3);";
o_stream.open(1, query.c_str(), db_);
o_stream.flush();
o_stream.close();
然而,即使在刷新并关闭otl_stream之后,数据库也被锁定在该表上(不能通过单独的应用程序读取(。我必须关闭我的otl应用程序才能解锁桌子。
如果我将insert语句参数化,那么一切都会正常工作(插入成功,没有表锁(。
otl_stream o_stream;
std::string query = "INSERT INTO common VALUES (1,2,a:<int>);";
o_stream.open(1, query.c_str(), db_);
o_stream << 3;
这并不理想,因为理想情况下,如果没有必要,我希望避免参数化/绑定。有什么建议吗?
编辑:
下方的答案
来自OTL库的作者:
otl_streams是指可重用的,即INSERT语句流需要具有至少一个绑定变量;可冲洗";。对于案例当绑定变量为0时,会出现以下情况:http://otl.sourceforge.net/otl3_constrongql.htm.
该链接缺少所需的db.commit((调用。如果没有提交调用,表将被锁定。
问题中给出的示例的解决方案:
std::string query = "INSERT INTO common VALUES (1,2,3);";
db_.direct_exec(query.c_str());
db_.commit();