我正在读取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认为我将其提供给了许多参数。
有没有办法解决这个问题?
发布于 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();
}
发布于 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
https://stackoverflow.com/questions/55713602
复制相似问题