需要从csv文件更新表中的某些列

时间:2016-06-22 18:22:45

标签: c# sql-server csv

我有一个csv文件,我需要在我的sql数据库表中的几列中更新数据。做这个的最好方式是什么?我在考虑批量导入,但是如果不使用所有列,它将不允许我这样做。我在考虑使用格式文件,但我想知道这是否是最有效的方法。

以下是我在C#课中尝试的方法:

/// <summary>
        /// Update all of the PropertyDefinitions
        /// </summary>
        internal static void InsertPropertyDefinitions()
        {

            //
            //  Define the connection
            //
            SqlConnection insertConnection = null;

            try
            {
                RetryStrategy retryStrategy = new Incremental(5, TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(3000));
                RetryPolicy retryPolicy = new RetryPolicy<SqlDatabaseTransientErrorDetectionStrategy>(retryStrategy);

                retryPolicy.ExecuteAction(() =>
                {
                    //
                    //  Try to connect to the database
                    //
                    using (insertConnection = new SqlConnection(m_ConnectionString))
                    {
                        //
                        //  Open the connection
                        //
                        insertConnection.Open();

                        //
                        //  Get the insert command ready
                        //
                        using (SqlCommand insertRecordCmd = insertConnection.CreateCommand())
                        {
                            //
                            // Define the Insert command
                            //
                            insertRecordCmd.CommandText = @"
                            BULK INSERT dbo.[PropertyDefinition] 
                            FROM '//my file path'
                            WITH(
                                    FIRSTROW = 2,
                                    FIELDTERMINATOR = ',',
                                    ROWTERMINATOR = '\n'        
                                )
                            ";

                            // Execute the INSERT command
                            insertRecordCmd.ExecuteNonQuery();
                        }

                        insertConnection.Close();
                    }
                });
            }
            catch (Exception ex)
            {
                //
                //  This is unexpected so display full exception information
                //
                m_Log.WriteLine("Exception while creating table");
                m_Log.WriteLine(ex.Message.ToString());
                throw;
            }
        }

1 个答案:

答案 0 :(得分:1)

建议将csv数据放入内存并过滤掉你不想要的列。

以下SO文章提供了一个示例,说明如何从CSV填充DataTable并使用SqlBulkCopy批量插入SQL Server。您可以修改代码以过滤掉您不想要的列。

Upload CSV file to SQL server