一般正常情况下是传入的参数转换int失败时会报这个错误
今天,发现一个特别奇葩的原因,特殊环境查询语句中varchar类型字段作为查询条件时如果不用单引号会触发此异常,正常环境不加单引号直接就挂了,但是特殊环境并不会直接挂,直到有一天触发异常(System.Data.SqlClient.SqlException 在将 varchar 值 ‘xxx’ 转换成数据类型 int 时失败),才会发现没有加单引号
多么痛的领悟,特此记录,警醒后来人
下面说说这个特殊环境
大家都知道,SQL中 varchar类型的字段作为查询条件时一定要用单引号括起来,否则会直接报异常。
但是当查询条件中有OR,并且varchar类型的字段存储的全部都为空或是能转换int类型数据,此时这个字段作为查询条件时不加单引号,数据库将忽略你这个粗心的写法,例如 where a.id=12 or a.code=12(id为int code为varchar 并且code里面的数据全部都为空或是能转换int类型数据)
直到有一天(code里面有不是空且不能转换为int数据的值,注意:本条数据可以正常查询,查询其他数据将报异常),程序莫名其妙的挂了,查不出数据,一直报异常。
System.Data.SqlClient.SqlException 在将 varchar 值 ‘xxx’ 转换成数据类型 int 时失败。
从此开始了数据库的坑爹之旅,一直在数据传参那过滤数据,但是并没有卵用,直到发现在查询条件varchar类型字段上加个单引号就OK了,中间排除此错误的过程,只有遇见的才能体会,希望对大家有所帮助