qq_41945416 2024-09-24 22:50 采纳率: 55.3%
浏览 1

数据库自增虚列读取问题

img

img


如图所示,序号一列为自增型的整数数据类型当光标放到第一行的订单号时,此时第一行数据未提交,第一行序号的值为NULL。当光标焦点移动到第二行订单号是可看到第一行数据已提交更新,且第一行序号的值为2,我是通过ADO的方法写入数据到数据库中的,通过AddNew();增加一行新纪录,通过PutCollect();写入数据记录,通过Update();更新之前通过PutCollect();写入的数据记录。最后通过GetCollect();读取数据库中之前被写入的数据。
我的问题是如果我要使用ADO方法开始增加第二行数据,在还没有执行Update();之前,我就提前执行GetCollect(_T("序号"));,这个时候执行GetCollect(_T("序号"));的结果得到的是空字符串呢?,还是会得到字符串“3”呢?.
如果我希望在还没有执行Update();之前,我提前执行GetCollect(_T("序号"));就想要得到字符串“3”,应该怎么做呢?

  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-24 22:51
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    根据您提供的情况描述和图示,我理解您正在使用ADO(ActiveX Data Objects)在Microsoft SQL Server数据库中操作数据。关于您的问题,即在还没有执行Update()之前,就提前执行GetCollect(_T("序号")),此时的结果取决于数据库的“序号”字段的具体设置和事务的隔离级别。

    在数据库操作中,如果“序号”是一个自增字段(通常是一个Identity Column),那么在插入新记录但还未执行Update()时,新的“序号”值通常已经被数据库分配了,即使这个值在事务中还未被提交。因此,如果您在这个时候执行GetCollect(_T("序号")),应该能够得到已经被分配的序号值,而不是空字符串或者“3”。

    但是,请注意以下几点:

    1. 数据库的隔离级别可能会影响您看到的数据。在高隔离级别下,您可能看到的是事务开始时的数据快照,即使其他事务已经更新了数据。这取决于您的SQL Server设置和事务的隔离级别。
    2. 如果在插入数据后立刻读取(即在AddNew()后紧接着GetCollect(_T("序号"))),并且没有其他事务修改该数据,那么读取到的应该是下一个自增值。
    3. 如果在执行GetCollect(_T("序号"))之前有其他事务已经插入了数据并提交了事务,那么您可能会看到这些已提交事务的序号,而不是您当前未提交事务的序号。

    总的来说,如果您希望在插入数据后立即读取自增的序号值,并且确信没有其他事务正在修改该数据,那么应该能够成功读取到正确的自增值。但是,为了确保数据的准确性和一致性,最好在提交事务后再进行读取操作。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月24日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?