使用dapper遇到的问题及解决方法
程序员文章站
2022-04-19 22:23:42
在使用dapper进行数据查询时遇到的一个问题,今天进行问题重现做一个记录,免得忘记以后又犯同样的错误。 自己要实现的是:select * from tablename where id in(1,2)这样的一个查询语句。自己以为的写法应该是这样的,代码如下: 运行之后报错,如下: 找问题原因是就是 ......
在使用dapper进行数据查询时遇到的一个问题,今天进行问题重现做一个记录,免得忘记以后又犯同样的错误。
自己要实现的是:select * from tablename where id in(1,2)这样的一个查询语句。自己以为的写法应该是这样的,代码如下:
list<cicuser> userlist = new list<cicuser>(); using (idbconnection conn = new sqlconnection(sqlconnectionstring)) { int[] idarr = new int[] { 1, 2, 3 }; string sqlcommandtext = @"select * from cicuser s where s.userid in (@userid) "; userlist = conn.query<cicuser>(sqlcommandtext, new { userid = idarr },null,true,null, commandtype.text).tolist(); }
运行之后报错,如下:
找问题原因是就是觉得自己写的没有错,那到底是哪里出了问题呐,又不想去研究源码,那就找看咋个拿到生成的sql语句,比对下sql语句,看哪里有问题。
接下来就根据数据库的工具,进行跟踪得到sql语句,如下:
exec sp_executesql n'select * from cicuser s where s.userid in ((@userid1,@userid2,@userid3)) ',n'@userid1 int,@userid2 int,@userid3 int',@userid1=1,@userid2=2,@userid3=3
执行该sql语句后报““,”附近有语法错误。”,看来就是生成的sql语句出了问题,去研究生成的sql语句就容易多了。
原来生成的sql语句这里多了一对括号,引起了这个错误。
去代码里面找这个括号是哪里来的,根据括号的位置尝试将自己代码中的括号去掉,修改自己的代码为:
list<cicuser> userlist = new list<cicuser>(); using (idbconnection conn = new sqlconnection(sqlconnectionstring)) { int[] idarr = new int[] { 1, 2, 3 }; string sqlcommandtext = @"select * from cicuser s where s.userid in @userid "; userlist = conn.query<cicuser>(sqlcommandtext, new { userid = idarr },null,true,null, commandtype.text).tolist(); }
再去运行,成功了,跟踪得到sql语句:
exec sp_executesql n'select * from cicuser s where s.userid in (@userid1,@userid2,@userid3) ',n'@userid1 int,@userid2 int,@userid3 int',@userid1=1,@userid2=2,@userid3=3
这下正常了,多的括号没有了。
原来在做这样的查询时,参数不需要用括号括起来,dapper会给我们自动加上括号。
@userid
下一篇: 看见一个女的哭着要跳河
推荐阅读
-
Mybatis传单个参数和
标签同时使用的问题及解决方法 -
详解腾讯云CentOS7.0使用yum安装mysql及使用遇到的问题
-
从零到一详聊创建Vue工程及遇到的常见问题
-
python中使用ctypes调用so传参设置遇到的问题及解决方法
-
基于java时区转换夏令时的问题及解决方法
-
详解eclipse将项目打包成jar文件的两种方法及问题解决方法
-
Python使用urllib模块的urlopen超时问题解决方法
-
spring boot使用i18n时properties文件中文乱码问题的解决方法
-
360浏览器使用中常见10大问题的解决方法
-
android开发环境遇到adt无法启动的问题分析及解决方法