这是向SQL Server表添加多行的最快方法

问题描述

我有一个一般性问题,但尚未找到任何答案。我认为提出这个问题很重要,这样我就知道如何构造整个应用程序,因此我从一开始就处在正确的轨道上。

我认为在一个查询命令中添加多行是实用/高效的。下面的代码一次在5列中添加3行和5个值。

另请参阅表格中的此图像:

Image of DataTable

我的问题是。该表稍后将具有100,000列,我正在考虑例如一次添加10行。现在想象一下,这个cmdstring将非常长。

我的问题就是。当我在一个查询添加大量信息时,这样做还行吗? (这是最快的方法还是应该以其他方式执行以下代码?)

谢谢!

void addMultipleRowWithValuessql()
{
    String cmdstring = "INSERT INTO DateTimes(DateTime,F1,F2,G1,G2) " + 
                       "VALUES" +
                           "('201005011715','1',2,'3','4')," +
                           "('201005011730','5',6,'7','8')," +
                           "('201005011745','9',10,'11','12');";
 
    using (sqlConnection conn = new sqlConnection(GetConnectionString()))
    {
        using (sqlCommand comm = new sqlCommand(cmdstring))
        {
            try
            {
                comm.Connection = conn;

                conn.open();
                int i = comm.ExecuteNonQuery();

                if (i != 0) 
                {
                    MessageBox.Show(i + "Rows Added"); 
                }
            }
            catch (sqlException ex) 
            {
                 MessageBox.Show(ex.ToString()); 
            }
        }
    }
}

static private string GetConnectionString()
{
    return "Data Source=(LocalDB)\\MSsqlLocalDB;AttachDbFilename=C:\\Users\\andre\\source\\repos\\TestDatabaseCreation\\DatabaseTest.mdf;Integrated Security=True;Connect Timeout=30";
}

解决方法

他们称其为批量插入,此处的链接将带您进入一个可以解释的漂亮示例。 Bulk Insert In SQL Server From C#

,

我正在查看此链接,该链接还显示了如何在一个事务中添加多行。 https://docs.microsoft.com/en-us/azure/azure-sql/performance-improve-use-batching

我的问题是,这是否是batch insert的有效且好的方法?
还是如果我在一个事务中添加10,000行和VALUES例如200列,那么此代码是否还会像我的原始文章一样涉及大量的解析?

只需确认一下即可。该代码确实值得一提。

    void addMultipleRowWithValuesSQL()
    {
        List<string> dbOperations = new List<string>();
        dbOperations.Add("INSERT INTO DateTimes(DateTime,F1,F2,G1,G2) VALUES('201005011800','11','22','33','44');");
        dbOperations.Add("INSERT INTO DateTimes(DateTime,G2) VALUES('201005011815','55','66','77','88');");
        dbOperations.Add("INSERT INTO DateTimes(DateTime,G2) VALUES('201005011830','99','100','101','102');");

        using (SqlConnection conn = new SqlConnection(GetConnectionString()))
        {
            conn.Open();
            SqlTransaction transaction = conn.BeginTransaction();

            foreach (string commandString in dbOperations)
            {
                SqlCommand cmd = new SqlCommand(commandString,conn,transaction);
                cmd.ExecuteNonQuery();
            }
            transaction.Commit();
        }
    }