0

Accessに列A、B、およびCのテーブルがあります。このテーブルのレコードを列A、B、C、およびDのSQLテーブルに書き込みたいのですが、これを実現するための最良の方法は何ですか。

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();
                    }
                }
             }
          }
4

3 に答える 3

0

一括コピーを使用しています。これは、ソーステーブルと宛先テーブルのスキーマが同じであることを前提としています。

各レコードを一度に処理するか、SSISパッケージを作成する必要があります。

于 2012-05-10T12:23:16.067 に答える
0

データソースに存在するすべての列にSqlBulkCopy.ColumnMappingsを使用する必要があります。

bulkCopy.ColumnMappings.Add("A", "A");
bulkCopy.ColumnMappings.Add("B", "B");
bulkCopy.ColumnMappings.Add("C", "C");
于 2012-05-10T12:31:58.870 に答える
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();
于 2012-05-10T13:52:45.603 に答える