我试图在C#中设置一个同步例程,以便将数据从ms访问数据库发送到sql server.MS Access不是我的选择它只是它的方式.
我能够查询MS Access数据库并获取OleDbDataReader记录集.我可能会读取每个单独的记录并将其插入到SQL Server中,但它似乎非常浪费.
有一个更好的方法吗.我知道我可以在MS Access链接到sql server并轻松执行更新,但这适用于最终用户,我不希望他们搞乱访问.
编辑: 只是看看SqlBulkCopy我认为如果我将我的结果导入DataRow []可能是答案
我在.NET中找到了一个我很满意的解决方案.它允许我向程序中的任何用户授予对同步例程的访问权限.它涉及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.它可能不是最好的代码,但应该让任何读这个想法的人.