gpt4 book ai didi

c++ - 插入sql数据库后无法检索身份字段

转载 作者:行者123 更新时间:2023-11-28 06:06:11 24 4
gpt4 key购买 nike

使用 C++ Qt 框架和 sql server 2008 我一直在尝试将记录插入到具有标识字段的表中并检索标识值。下面是一个简化的代码示例,它实际上执行了插入操作,但只是不检索标识。从 query.value(0) 返回的标识是无效的 QVariant。

QSqlQuery query(*pConn);
query.prepare("insert into [VH_MANUFACTURER] values ('sRRS test man code','RRS type','RRS logo file',1,'RRS SEO para','RRS description','RS');"
"select SCOPE_IDENTITY();");
if(query.exec())
{
if(query.next())
{
QVariant identity = query.value(0);
int id=identity.toInt();
}
}

我已经尝试使用 select @@identity 而不是 scope_identity,但没有任何改进,而且 QSqlQuery .lastInsertId() 也返回了一个无效的 QVariant,见下文。

  bool bFeature = pConn->driver()->hasFeature(QSqlDriver::LastInsertId);

QSqlQuery query(*pConn);
query.prepare("insert into [VH_MANUFACTURER] ([MFG_NAME],[MFG_TYPE],[MFG_LOGO],[MFG_ACTIVE],[MFG_SEO_CONTENT],[MFG_DESCRI],[MFG_CAPMANCODE]) values ('sRRS test man code','RRS type','RRS logo file',1,'RRS SEO para','RRS description','RS')");
if(query.exec())
{
QVariant id=query.lastInsertId();
}

hasFeature 返回 true,因此驱动程序应该支持我正在尝试做的事情。只是为了测试 sql,我直接通过 Sql Server Management Studio 运行 sql,它按预期插入并正确返回标识值。

最佳答案

终于找到了解决在 sql 中使用 OUTPUT 子句的方法。我不完全知道为什么我尝试过的其他方法不起作用。有一个sql server bug与此功能相关联,但这并不能解释为什么它在 ssms 中有效,但在 c++ Qt 代码中无效。下面的示例显示了解决方法。 Here's我用来解决这个问题的引用。

bool bFeature = pConn->driver()->hasFeature(QSqlDriver::LastInsertId);

QSqlQuery query(*pConn);
query.prepare("insert into [VH_MANUFACTURER] ([MFG_NAME],[MFG_TYPE],[MFG_LOGO],[MFG_ACTIVE],[MFG_SEO_CONTENT],[MFG_DESCRI],[MFG_CAPMANCODE]) OUTPUT INSERTED.MFG_ID values ('sRRS test man code','RRS type','RRS logo file',1,'RRS SEO para','RRS description','RS')");
if(query.exec())
{
if(query.next())
{
QVariant id=query.value("MFG_ID");
}

}

关于c++ - 插入sql数据库后无法检索身份字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32381543/

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