考虑这段代码:
DataRow[] stuff = dt.Select("stuffFiler = " + stuff);
对
DataRow[] stuff = dt.Select("stuffFiler = '" + stuff + "'");
作为填充DataRow数组的源的数据表会为所讨论的列的过滤器返回一个varchar。变量stuff设置为字符串,但是在某些情况下,编译器会引发有关int32的错误。
第二个版本现在在所有情况下都可以使用,并且是更干净的方法,但是我很好奇为什么第一个版本完全可以使用?
使用4.5.2版本的.NetFramework以防万一。
示例数据: stuff =“ 123456677”或stuff =“ 552336677”-合法的varchar /字符串数据
此示例的stuffFilter是varchar列名。
答案 0 :(得分:4)
请参阅Microsoft网站上的DataColumn.Expression属性:
https://docs.microsoft.com/de-de/dotnet/api/system.data.datacolumn.expression?view=netframework-4.8
尤其是这部分:
用户定义的值
可以在表达式中使用用户定义的值与列值进行比较。字符串值应该用单引号引起来(并且字符串值中的每个单引号字符都必须通过在其前面加上另一个单引号字符进行转义)。根据数据提供者,日期值应括在井号(#)或单引号(')中。数值允许使用小数和科学计数法。例如:
“名字='约翰'”
“价格<= 50.00”
“生日<#1/31/82#”
对于包含枚举值的列,请将其值转换为整数数据类型。例如:
“ EnumColumn = 5”
基本上,撇号会强制select将变量作为字符串处理,而没有它们,数字值将被视为整数或十进制值,从而导致varchar列出现异常。