SqlBulkCopy Not Working

前端 未结 7 2079
予麋鹿
予麋鹿 2021-02-18 17:54

I have a DataSet populated from Excel Sheet. I wanted to use SQLBulk Copy to Insert Records in Lead_Hdr table where LeadId is PK.

7条回答
  •  忘掉有多难
    2021-02-18 18:38

    I would go with the staging idea, however here is my approach to handling the case sensitive nature. Happy to be critiqued on my linq

    using (SqlConnection connection = new SqlConnection(conn_str))
    {
            connection.Open();
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
            {
                bulkCopy.DestinationTableName = string.Format("[{0}].[{1}].[{2}]", targetDatabase, targetSchema, targetTable);
                var targetColumsAvailable = GetSchema(conn_str, targetTable).ToArray();
                foreach (var column in dt.Columns)
                {
                    if (targetColumsAvailable.Select(x => x.ToUpper()).Contains(column.ToString().ToUpper()))
                    {
                        var tc = targetColumsAvailable.Single(x => String.Equals(x, column.ToString(), StringComparison.CurrentCultureIgnoreCase));
                        bulkCopy.ColumnMappings.Add(column.ToString(), tc);
                    }
                }
    
                // Write from the source to the destination.
                bulkCopy.WriteToServer(dt);
                bulkCopy.Close();
            }
    }
    

    and the helper method

    private static IEnumerable GetSchema(string connectionString, string tableName)
            {
    
    
    
       using (SqlConnection connection = new SqlConnection(connectionString))
            using (SqlCommand command = connection.CreateCommand())
            {
                command.CommandText = "sp_Columns";
                command.CommandType = CommandType.StoredProcedure;
    
                command.Parameters.Add("@table_name", SqlDbType.NVarChar, 384).Value = tableName;
    
                connection.Open();
                using (var reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        yield return (string)reader["column_name"];
                    }
                }
            }
        }
    

提交回复
热议问题