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

问题描述 投票:2回答:2

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

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

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

    insert.ExecuteNonQueryAsync();
}

我运行这个,当我做跟踪时,DB会回吐这个。

exec SP_Insert @id = 1, @type = 'test',@id = 2, @type = 'test',@id = 3, @type = 'test'

然后,由于SP认为我将它赋予许多参数,因此无法插入。

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

c# sql sql-server
2个回答
4
投票

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

重新使用如下参数时,必须为参数设置正确的Size

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();
}

0
投票

如果可以直接将数据插入表中,或者如果可以更快地创建临时表,则可以使用DataTable和bulkCopy。

这样,您将首先在客户端内存中加载数据,然后将一个批量操作中的所有行发送到SQL Server。

很好的教程如何做到这一点:

https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/single-bulk-copy-operations

使用方法:WriteToServer(DataTable)

https://docs.microsoft.com/en-us/dotnet/api/system.data.sqlclient.sqlbulkcopy.writetoserver

© www.soinside.com 2019 - 2024. All rights reserved.