我正在尝试在 C# 中设置一个同步例程,以将数据从 ms access 数据库发送到 sql server。 MS Access 不是我的选择,它就是这样。
我能够查询 MS Access 数据库并获取 OleDbDataReader 记录集。我可能会读取每个单独的记录并将其插入到 SQL Server 中,但这看起来太浪费了。
有没有更好的方法来做到这一点。我知道我可以在链接到 sql server 的 MS Access 中完成此操作并轻松执行更新,但这是针对最终用户的,我不希望他们弄乱 Access 。
编辑: 只要看看 SqlBulkCopy,我认为如果我将结果放入 DataRow[] 中,这可能就是答案
最佳答案
我在 .NET 中找到了一个我非常满意的解决方案。它允许我将对同步例程的 Access 权限授予我程序中的任何用户。它涉及SQLBulkCopy类。
private static void BulkCopyAccessToSQLServer
(CommandType commandType, string sql, string destinationTable)
{
using (DataTable dt = new DataTable())
{
using (OleDbConnection conn = new OleDbConnection(Settings.Default.CurriculumConnectionString))
using (OleDbCommand cmd = new OleDbCommand(sql, conn))
using (OleDbDataAdapter adapter = new OleDbDataAdapter(cmd))
{
cmd.CommandType = commandType;
cmd.Connection.Open();
adapter.SelectCommand.CommandTimeout = 240;
adapter.Fill(dt);
adapter.Dispose();
}
using (SqlConnection conn2 = new SqlConnection(Settings.Default.qlsdat_extensionsConnectionString))
{
conn2.Open();
using (SqlBulkCopy copy = new SqlBulkCopy(conn2))
{
copy.DestinationTableName = destinationTable;
copy.BatchSize = 1000;
copy.BulkCopyTimeout = 240;
copy.WriteToServer(dt);
copy.NotifyAfter = 1000;
}
}
}
}
基本上,这会将数据从 MS Access 放入 DataTable,然后使用第二个连接 conn2 和 SqlBulkCopy 类将数据从该 DataTable 发送到 SQL Server。它可能不是最好的代码,但应该能让任何阅读此代码的人了解它。
关于C# 将 MS Access 数据库同步到 sql server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1770684/