LinqToDb查询Sql返回DataTable及OracleBulkCopy写入数据库
·
前言
需求是将一个数据库的部分基础表数据迁移到一个新库,因此,我想遍历一个表名数组,获取每个表的所有数据写入到新库数据表。LinqToBb好像没有类似db.Query(sql)直接返回DataTable的写法。查询相关资料后做了一些整理。
方法
internal class DbClient : DataConnection
{
public DbClient(string connectionString) : base(LinqToDB.ProviderName.Oracle, connectionString)
{
}
}
foreach (var item in listBox2.Items)//遍历表名
{
using (var db = new DbClient(textBox1.Text))//textBox1.text是原数据连接字符串
{
string sql = $"select * from {item}";
var table = db.ExecuteReader(sql);
DataTable dt = new DataTable();
dt.Load(table.Reader);//先读DataReader,再附加DataTable
//textBox2是目标库连接字符串
Oracle.ManagedDataAccess.Client.OracleBulkCopy bulkCopy = new OracleBulkCopy(textBox2.Text, OracleBulkCopyOptions.UseInternalTransaction);
bulkCopy.DestinationTableName = item.ToString();
foreach (DataColumn col in dt.Columns)
{
bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
}
bulkCopy.WriteToServer(dt);
bulkCopy.Dispose();
}
counter++;
OnNotice?.Invoke(this, $"{item}已完入({counter / listBox2.Items.Count})");
}
注意DestinationTableName 一定要设置。
更多推荐



所有评论(0)