在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文件的内存版本?
命令行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;
}