ExecuteNonQueryAsync sql 命令为 SP 提供 DB 中的多个参数集

mob*_*war 2 c# sql sql-server

我正在读取 Json 并将其插入表中。我想通过不等待来加速程序,因为每个插入都是唯一的。

所以出于测试原因我创建了一个循环

for (int i = 0; i < 10; i++)
{
    insert.Parameters.AddWithValue("@id", i);
    insert.Parameters.AddWithValue("@type", "test");

    insert.ExecuteNonQueryAsync();
}
Run Code Online (Sandbox Code Playgroud)

我运行这个,当我进行跟踪时,数据库会返回这个。

exec SP_Insert @id = 1, @type = 'test',@id = 2, @type = 'test',@id = 3, @type = 'test'
Run Code Online (Sandbox Code Playgroud)

然后它无法插入,因为 SP 认为我给了它很多参数。

有没有什么办法解决这一问题?

Ris*_*o M 5

添加await并确保不要向每个循环添加新参数。

当重复使用如下参数时,您必须为参数设置正确的大小。

insert.Parameters.Add("@id", SqlDbType.Int);
// Note: Set length of the target column. NVarChar -1 maps to nVarchar(max) 
insert.Parameters.Add("@type", SqlDbType.NVarChar, -1);

for (int i = 0; i < 10; i++)
{
    insert.Parameters["@id"].Value = i;
    insert.Parameters["@type"].Value = "test";

    await insert.ExecuteNonQueryAsync();
}
Run Code Online (Sandbox Code Playgroud)

  • 无需清除参数。它们可以重复使用。将它们添加到循环之前,并在循环内设置“Value”属性。 (2认同)