我在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();
}
}
}
}
答案 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();