C# 访问sqlserver Sqlparameter传参时程序里的执行结果和数据库直接结果不一致 记录

产生背景

    某天用户反馈.我们系统有个数据查不出来. 我检查了代码 其中有一个判断. 如果 需要查询 才去查询 . 不需要查询就忽略了. 用户遇到的情况就是这个条件值查出来是 不需要查询(这个是后来才发现的) ,   于是我就找到这个条件值产生的地方.它是一个存储过程 output回来的值 . 于是我就拿 这个存储过程去sql里执行 如 :

 

  通过查询发现.有值哦. 按代码来看这里返回如果有值 就有去查询呀. 于是各种调试检查....  最后发现 把@a的默认值去掉.查询出的结果就变成 null了和程序执行的结果一

 

于是我就想会不会是在程序里执行的时候传的 "" 到了数据库变成了null呢 于是有了以下测试

 

 最后发现果然如此 ! 还是传参的问题.诶.

综上所述  :  这种情况如果不给值 在程序写的时候第二个参数可以给成SqlDbType 没必要一定要给个值的.  给了值如果别人维护时不知道这种情况的存在,拿着参数去数据库执行 就会遇到和我一样的问题.两个结果不一致 !

 (以上的存储过程 pptest里只是测试用没写逻辑 .直接输出了参数 @a  即select @a )

不知道这算不算坑. 也许是经验不足吧..诶.

posted @ 2022-04-15 14:45  望着天的蜗牛  阅读(313)  评论(0编辑  收藏  举报