C# 将数组中的大量数据插入数据库
我想在数据库中创建900.000新行,在每一行中,数组中的条目都应该写入C# 将数组中的大量数据插入数据库,c#,sql,sql-server,C#,Sql,Sql Server,我想在数据库中创建900.000新行,在每一行中,数组中的条目都应该写入Products列 我下面提到的解决方案有效,但需要一个多小时。如何才能更快地做到这一点 我的缓慢解决方案: for (int i = 1; i <= 900000; i++) { string SQL_command = "INSERT INTO Database(Produkte) VALUES(" + ProductArray[i] + ")"; Sql
Products
列
我下面提到的解决方案有效,但需要一个多小时。如何才能更快地做到这一点
我的缓慢解决方案:
for (int i = 1; i <= 900000; i++)
{
string SQL_command = "INSERT INTO Database(Produkte) VALUES(" + ProductArray[i] + ")";
SqlConnection con = new SqlConnection(connString);
con.Open();
SqlCommand cmd = new SqlCommand(SQL_command , con);
cmd.ExecuteNonQuery();
con.Close();
}
for(int i=1;i与每次调用打开和关闭连接不同,打开连接一次,然后运行所有INSERT语句,然后关闭连接:
using (SqlConnection con = new SqlConnection(connString))
{
con.Open();
for (i = 1; i <= 900000; i++) {
string SQL_command = "INSERT INTO Database(Produkte) VALUES(" + ProductArray[i] + ")";
using (SqlCommand cmd = new SqlCommand(SQL_command , con))
{
cmd.ExecuteNonQuery();
}
}
}
使用(SqlConnection con=newsqlconnection(connString))
{
con.Open();
对于(i=1;我研究…。它讨论存储过程,但您也可以使用CommandType.Text
。除了TVPs之外,另一种方法是。如果您必须执行单例插入,请使用参数化语句并在单个事务中批处理所有事务。-您不应该将SQL语句串联在一起-使用参数化查询来避免id SQL injection-签出您可以使用循环在、插入x值(@p0)、(@p1)、…(@p999)中构建包含1000个参数占位符的SQL字符串
,然后在命令中输入1000个参数,然后运行一个循环,每次设置1000个参数值,并调用execute 900次,而不是900000次和次。完成代码后,看看每次执行5000次、10000次是否有帮助。我不确定我会选择Dan的“一次性完成所有900000次”但是他是一个非常聪明的人,所以它可以很好地工作!但是使用连接池,连接不会关闭(虽然它会被重置)。也许会有一些轻微的好处,但这里的痛苦是一次插入一行。