使用C#SqlConnection将Access记录写入SQL表

时间:2012-05-10 12:19:49

标签: c# sql ms-access

我在Access中有一个表,包括A,B和C列。我想将此表中的记录写入包含A,B,C和D列的SQL表中。实现它的最佳方法是什么? / p>

我尝试使用OleDbDataReader和bulkCopy,但架构差异使其变得困难:

OleDbDataReader reader;// = new OleDbDataReader();

using (OleDbConnection sourceConnection = new OleDbConnection(sourceConnectionString))
        {
            //Get data from Access
            OleDbCommand commandSourceData = new OleDbCommand("SELECT * FROM AddressLoCo;", sourceConnection);
            commandSourceData.Connection = sourceConnection;
            sourceConnection.Open();

            reader = commandSourceData.ExecuteReader();

            using (SqlConnection destinationConection = new SqlConnection(destinationConnectionString))
            {
                destinationConection.Open();
                // Set up the bulk copy object
                using (SqlBulkCopy bulkCopy = new SqlBulkCopy(destinationConection))
                {
                    bulkCopy.DestinationTableName = "dbo.AddressMaster";

                    try
                    {
                        bulkCopy.WriteToServer(reader);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                    finally
                    {
                        reader.Close();
                    }
                }
             }
          }

3 个答案:

答案 0 :(得分:0)

您正在使用批量复制,它希望源表和目标表的架构相同。

您需要一次处理每条记录,或者更好地创建SSIS包。

答案 1 :(得分:0)

您应该对数据源中现有的所有列使用SqlBulkCopy.ColumnMappings

bulkCopy.ColumnMappings.Add("A", "A");
bulkCopy.ColumnMappings.Add("B", "B");
bulkCopy.ColumnMappings.Add("C", "C");

答案 2 :(得分:0)

使用Access连接,您可以在这些行上拥有一些内容。

//The square brackets contain a valid connection to SQL Server, this is most 
//easily obtained by linking a table and checking the Connect property

string ssql = @"INSERT INTO [ODBC;Description=Test;DRIVER=SQL Server;
   SERVER=servername;Trusted_Connection=Yes;
   DATABASE=Test].table_1 (Atext)
   SELECT AText FROM Table1";
string sourceConnectionString = 
   @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=z:\docs\test.accdb;";
using (OleDbConnection sourceConnection = new OleDbConnection(sourceConnectionString))
{
    OleDbCommand commandSourceData = new OleDbCommand(ssql, sourceConnection);
    commandSourceData.Connection = sourceConnection;
    sourceConnection.Open();

    commandSourceData.ExecuteNonQuery();