首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ExecuteNonQueryAsync sql命令在数据库中为SP提供多个参数集

ExecuteNonQueryAsync sql命令在数据库中为SP提供多个参数集
EN

Stack Overflow用户
提问于 2019-04-17 01:26:16
回答 2查看 327关注 0票数 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认为我将其提供给了许多参数。

有没有办法解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-17 01:28:30

添加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();
}
票数 4
EN

Stack Overflow用户

发布于 2019-04-17 01:43:47

如果您可以直接将数据插入到表中,或者可以创建一个临时表,那么使用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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55713602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档