0

我有一些 TAB 分隔的文本文件,我每个月都必须使用 ASP.NET 内部网页面将它们导入 SQL Server。我一直在使用此处找到的通用解析器将文件导入 DataTables,然后使用列映射的 SqlBulkCopy 将它们复制到 SQL Server 表中。一切都很好,直到我找到一个破坏它的特定文件。

该文件中有几行在特定位置没有价值。它们映射到的列是moneySQL Server 中的一种类型,但它设置为允许 NULL。每次我尝试加载该文件时,它都会返回一个错误,它无法运行 SqlBulkCopy,因为从字符串到货币的转换失败。我已经证实,正是这个缺失值破坏了它。显然,解析器将该列保留为空字符串,并且 SqlBulkCopy 不假设empty = null(大多数情况不这样做),因此它无法将“nothing”放入货币字段。

引入文本文件时,我在解析器中找不到任何将空替换为 NULL 的设置。 SqlBulkCopy.WriteToServer()似乎几乎没有任何属性,所以我在那里找不到修复它。有谁知道是否可以调整其中任何一个?我想在导入之前尝试更好地定义 DataTable,但是这个过程处理了很多不同的文件规范,所以我认为这是不可行的。

有没有办法通过 DataTable 并将所有空字符串更新为 NULL?我现在能想到的唯一方法基本上是循环遍历这些 RBAR,这将不起作用,因为其中许多文件有数万行。也许在导入之前可以用正确的数据类型替换整个列?我真的对任何事情都持开放态度,只要它不会花费很长时间来执行或让我重写整个过程。

4

0 回答 0