如何使Dapper忽略无效数据?

时间:2019-07-10 14:03:31

标签: sql-server dapper

我正在使用Dapper加载int?值。 int?的值存储在SQL Server数据库的VARCHAR列中(我无法更改)。有时,该列包含包含字母字符的无效数据。

发生这种情况时,我会看到此错误:

Error parsing column 5 (Foo=ABC123 - String) ---> System.FormatException: Input string was not in a correct format.

如何让Dapper忽略无效值并改用null?

3 个答案:

答案 0 :(得分:4)

您可以修改SQL以解析并在SQL Server本身上相应地返回值。这样,您的调用代码将不会发生任何变化。

我会做类似的事情:

select case when isnumeric(foo) = 1 then foo else null end foo from table;

答案 1 :(得分:2)

Dapper是简单的映射器;它不会为您执行这种数据类型转换。你必须要把戏。

我看到的唯一(坏)选项是在您的类中包含 1 1 2 2 3 属性,并将dapper映射到该属性,而不是您的string属性。然后将int?属性映射到int?属性,并在两者之间添加一些 handling 代码。

string

答案 2 :(得分:2)

已接受answer(来自@DanB)很好,但可以改进。

如果您正在使用现代版本的SQL Server(2012或更高版本),请考虑使用TRY_CAST而不是ISNUMERICISNUMERIC的行为方式可能出乎您的意料。请参考this问题。