1

我想更新由 ID 列表给出的行列表。通常,查询的参数可以通过参数属性传递。但如果我传递一个 ID 列表,Firebird 将不接受该查询。我正在使用 NuGet 的 FirebirdSql.Data.FirebirdClient。

代码(简化):

List<string> ids = someList.Select(_ => _.Id).ToList();
using (var fbCommand = new FbCommand("UPDATE someTable SET NAME='foo' WHERE ID IN (@ids)", fbConnection))
{
    fbCommand.Parameters.Add("ids", ids);
    fbCommand.ExecuteNonQuery();
}

表“someTable”的定义如下:

CREATE TABLE someTable (
    ID CHAR(36),
    NAME CHAR(20)
);

这是一个例外:

引发的异常:FirebirdSql.Data.FirebirdClient.dll 中的“FirebirdSql.Data.FirebirdClient.FbException”在 >FirebirdSql.Data.FirebirdClient.dll 中发生“FirebirdSql.Data.FirebirdClient.FbException”类型的异常,但未在用户代码中处理算术异常、数值溢出或字符串截断 字符串右截断

4

1 回答 1

0

通过简单地使用 foreach 循环来更新所有行,我解决了这个问题:

List<string> ids = someList.Select(_ => _.Id).ToList();
foreach (string id in ids) {
    using (var fbCommand = new FbCommand("UPDATE someTable SET NAME='foo' WHERE ID = @id", fbConnection))
    {
        fbCommand.Parameters.Add("id", id);
        fbCommand.ExecuteNonQuery();
    }
}
于 2020-11-13T17:27:13.617 回答