gpt4 book ai didi

c# - 在 UPDATE 查询中使用 DateTime 或字符串参数时,Informix 11.7 返回 -1 作为受影响的行数

转载 作者:太空宇宙 更新时间:2023-11-03 12:55:02 25 4
gpt4 key购买 nike

为什么 Informix 11.7 会返回 -1 作为受影响的行数,而 Informix 11.5 会返回 0?它不会导致错误或异常,它只会返回 -1。

我们使用 IBM Data Server Client 10.5。跟踪驱动程序时,我看到 11.5 返回 DB2Command.ExecuteNonQuery api exit1, rc = 0 - 0 11.7 返回 DB2Command.ExecuteNonQuery api exit1, rc = 0 - -1

可使用此代码重现:

DbProviderFactory factory = DbProviderFactories.GetFactory("IBM.Data.DB2");
IDbConnection connection = factory.CreateConnection();
connection.ConnectionString = "Database=xxx;Server=xx.xx.xx.net:9099;UserID=xxx;Password=xxx";
connection.Open();

using (var command = connection.CreateCommand())
{
command.CommandText = "UPDATE demotable SET value = 1 WHERE dateutc = ?";
var dateTimeParameter = command.CreateParameter();
dateTimeParameter.Value = DateTime.UtcNow;
command.Parameters.Add(dateTimeParameter);

var affectedRows = command.ExecuteNonQuery(); // Returns -1, but expected 0
}

更新:

  • 使用命令 select dbinfo('sqlca.sqlerrd2') from systables where tabid = 1 运行 ExecuteScalar 返回预期的行数。
  • 它发生在所有表上,没有触发器到位。
  • 当使用 INT 作为参数时它工作正常,使用字符串也失败。
  • 当更新影响一行时,按预期返回 1。
  • 不同数据库 (Informix 11.5) 上的相同表返回预期的行数。
  • 有问题的数据库被复制到其他服务器(RW 实例)。

最佳答案

我不确定为什么返回值不同,我从未使用过 .NET 的 Informix,但是,Informix 中获取受影响行数的“正确”方法是选择 DBINFO( 'sqlca.sqlerrd2') 紧跟在更新语句之后,不检查返回值。

查一下in the documentation

关于c# - 在 UPDATE 查询中使用 DateTime 或字符串参数时,Informix 11.7 返回 -1 作为受影响的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34204652/

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