首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sql数据库中插入后无法检索标识字段

问在sql数据库中插入后无法检索标识字段
EN

Stack Overflow用户
提问于 2015-09-03 17:00:53
回答 1查看 961关注 0票数 0

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

代码语言:javascript
复制
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,请参见下面的内容。

代码语言:javascript
复制
  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,它按预期插入并正确返回标识值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-04 13:04:02

最后,在sql中找到了使用OUTPUT子句的工作。我不知道为什么我尝试过的其他方法不起作用。有一个与此特性相关的sql服务器错误,但这并不能解释为什么它在ssms中工作,而在c++ Qt代码中却不起作用。下面的例子显示了这方面的工作。下面是,我用来解决这个问题的参考。

代码语言:javascript
复制
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");
    }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32381543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档