C# 访问sqlserver Sqlparameter传参时程序里的执行结果和数据库直接结果不一致 记录
产生背景
某天用户反馈.我们系统有个数据查不出来. 我检查了代码 其中有一个判断. 如果 需要查询 才去查询 . 不需要查询就忽略了. 用户遇到的情况就是这个条件值查出来是 不需要查询(这个是后来才发现的) , 于是我就找到这个条件值产生的地方.它是一个存储过程 output回来的值 . 于是我就拿 这个存储过程去sql里执行 如 :
通过查询发现.有值哦. 按代码来看这里返回如果有值 就有去查询呀. 于是各种调试检查.... 最后发现 把@a的默认值去掉.查询出的结果就变成 null了和程序执行的结果一
样
于是我就想会不会是在程序里执行的时候传的 "" 到了数据库变成了null呢 于是有了以下测试
最后发现果然如此 ! 还是传参的问题.诶.
综上所述 : 这种情况如果不给值 在程序写的时候第二个参数可以给成SqlDbType 没必要一定要给个值的. 给了值如果别人维护时不知道这种情况的存在,拿着参数去数据库执行 就会遇到和我一样的问题.两个结果不一致 !
(以上的存储过程 pptest里只是测试用没写逻辑 .直接输出了参数 @a 即select @a )
不知道这算不算坑. 也许是经验不足吧..诶.