C# 使用SqlBulkCopy的空字符串、空值和货币类型

C# 使用SqlBulkCopy的空字符串、空值和货币类型,c#,null,sqlbulkcopy,string,tab-delimited,C#,Null,Sqlbulkcopy,String,Tab Delimited,我有一些制表符分隔的文本文件,每个月都必须使用ASP.NET intranet页面导入到SQL Server。我一直在使用将文件导入DataTables,然后使用SqlBulkCopy和列映射将它们复制到SQL Server表。一切都很顺利,直到我找到了一个破坏它的文件 该文件中有几行在特定位置具有no值。它们映射到的列在SQL Server中是money类型,但设置为允许NULL。每次尝试加载该文件时,它都会返回一个错误,即无法运行SqlBulkCopy,因为从字符串到货币的转换失败。我已经验

我有一些制表符分隔的文本文件,每个月都必须使用ASP.NET intranet页面导入到SQL Server。我一直在使用将文件导入DataTables,然后使用SqlBulkCopy和列映射将它们复制到SQL Server表。一切都很顺利,直到我找到了一个破坏它的文件

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

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


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

您不能只运行
sed
或类似程序以将所有出现的替换为NULL吗?@PieterGeerkens不熟悉
sed
。这是所有Windows、IIS和ASP.NET,看起来是UNIX。我必须在应用程序中完成这一切,因为这些文件实际上是以ZIP文件的形式上传的,其中包含一堆文本文件,这些文件被解压缩并批量加载。另外,终端用户不会非常精通计算机,因此必须尽可能实现自动化。我没有使用
sed
,但我添加了一个函数,在导入之前将文本文件更改为读取
NULL
,但不幸的是
SqlBulkCopy.WriteToServer()
方法仍然将NULL视为文本。还有其他想法吗?