System.Data.SqlClient.SqlException 在将 varchar 值 'xxx' 转换成数据类型 int 时失败。

一般正常情况下是传入的参数转换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了,中间排除此错误的过程,只有遇见的才能体会,希望对大家有所帮助

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值