Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将数组中的大量数据插入数据库_C#_Sql_Sql Server - Fatal编程技术网

C# 将数组中的大量数据插入数据库

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

我想在数据库中创建900.000新行,在每一行中,数组中的条目都应该写入
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次”但是他是一个非常聪明的人,所以它可以很好地工作!但是使用连接池,连接不会关闭(虽然它会被重置)。也许会有一些轻微的好处,但这里的痛苦是一次插入一行。