在c# EF迁移或种子中导入bcp生成的.dat文件

本文关键字:bcp 文件 dat 导入 EF 迁移 种子 | 更新日期: 2023-09-27 18:17:23

我有两个通过bcp(两个表)生成的.dat文件。我已经被分配(在EF种子或迁移中)获取这些数据并适当地填充数据库。

我已经搜索了SO和其他几个关于这项任务的网站,我似乎没有任何清晰的图片,如何从。dat文件中获取数据(尽管我已经看到了一些关于旧ADO的比特)。. NET DataTable()正在被使用

从本质上讲,我的问题是:我怎样才能

a)在c#中执行BCP,给定一个包含一些表数据的。dat文件,或者

b)用我可以"手动"处理的数据抓取该.dat文件的内存版本?

在c# EF迁移或种子中导入bcp生成的.dat文件

命令行BCP实用程序可以生成不同格式的文件。在字符模式的情况下,您可以在c#代码中解析文件,就像解析任何其他文本文件一样。但是,该文件不包含任何元数据,因此您需要知道字段和格式,以便解析和处理。

BCP也可以生成原生格式的文件。本机格式是一种未记录的二进制格式,仅供BCP使用。如果.dat文件是本机文件,最好的选择是创建一个具有与源表相同列的staging表,并使用BCP本机模式导入。如果需要直接从c#应用程序中执行,可以向BCP支付费用。下面是该技术的一个例子:

executeBcp(@"C:'temp'data.dat in /n /S ServerName /T");
private static int executeBcp(string commandArguments)
{
    var bcpProcess = new System.Diagnostics.Process();
    bcpProcess.StartInfo = new System.Diagnostics.ProcessStartInfo("BCP.EXE", commandArguments);
    bcpProcess.StartInfo.CreateNoWindow = true;
    bcpProcess.StartInfo.UseShellExecute = false;
    bcpProcess.StartInfo.RedirectStandardOutput = true;
    bcpProcess.Start();
    var result = bcpProcess.StandardOutput.ReadToEnd();
    bcpProcess.WaitForExit();
    return bcpProcess.ExitCode;
}