使用dapper遇到的问题及解决方法
在使用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[] { , , };
- 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[] { , , };
- 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
使用dapper遇到的问题及解决方法的更多相关文章
- IE6、7下html标签间存在空白符,导致渲染后占用多余空白位置的原因及解决方法
直接上图:原因:该div包含的内容是靠后台进行print操作,输出的.如果没有输出任何内容,浏览器会默认给该空白区域添加空白符.在IE6.7下,浏览器解析渲染时,会认为空白符也是占位置的,默认其具有字 ...
- MVVM框架从WPF移植到UWP遇到的问题和解决方法
MVVM框架从WPF移植到UWP遇到的问题和解决方法 0x00 起因 这几天开始学习UWP了,之前有WPF经验,所以总体感觉还可以,看了一些基础概念和主题,写了几个测试程序,突然想起来了前一段时间在W ...
- iPhone Anywehre虚拟定位提示“后台服务未启动,请重新安装应用后使用”的解决方法
问题描述: iPhone越狱了,之后在Cydia中安装Anywhere虚拟定位,但是打开app提示:后台服务未启动,请重新安装应用后使用. 程序无法正常使用... 解决方法: 打开Cydia-已安装, ...
- python中IndentationError: expected an indented block错误的解决方法
IndentationError: expected an indented block 翻译为IndentationError:预期的缩进块 解决方法:有冒号的下一行要缩进,该缩进就缩进
- js闭包for循环总是只执行最后一个值得解决方法
<style> li{ list-style: none;width:40px;height: 40px;text-align:center;line-height: 40px;curso ...
- mysql5.x升级至mysql5.7后导入之前数据库date出错的解决方法!
mysql5.x升级至mysql5.7后导入之前数据库date出错的解决方法! 修改mysql5.7的配置文件即可解决,方法如下: linux版:找到mysql的安装路径进入默认的为/usr/shar ...
- maven常见异常以及解决方法
本文写的是我在整合ssm框架时遇到的一些问题,我估计很多人也会遇到,所以,这里作为一个总结,希望能够帮助大家解决问题 一,加入shiro组件时抛出的异常 加入步骤(略) 问题 1,保存后,无法导入sh ...
- WebEssentials 在vs2013 update5安装报错的解决方法.
WebEssentials 最高支持到update4 如果更新到了update5 RC, 则无法直接安装. 解决方法是 1,下载WebEssentials2013.vsix 文件. 2, 安装7zip ...
- [异常解决] windows用SSH和linux同步文件&linux开启SSH&ssh client 报 algorithm negotiation failed的解决方法之一
1.安装.配置与启动 SSH分客户端openssh-client和openssh-server 如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果没有 ...
随机推荐
- Gerrit常见命令及最佳实践
概述 本文记录了笔者在使用Gerrit(一种免费.开放源代码的代码审查软件)过程中的一些微小的经验,在这里做个简单的分享. 克隆工程 git clone ssh://tusi@xx.xx.cn:294 ...
- 一起学SpringMVC之Json
本文主要以一个简单的小例子,简述SpringMVC开发中,Json的相关应用,仅供学习分享使用,如有不足之处,还请指正. 什么是Json ? JSON 指的是 JavaScript 对象表示法(Jav ...
- SSM框架之Spring(4)AOP
Spring(4)AOP 1.AOP概述 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种 ...
- Python:多态、协议和鸭子类型
多态 问起面向对象的三大特性,几乎每个人都能对答如流:封装.继承.多态.今天我们就要来说一说 Python 中的多态. 所谓多态:就是指一个类实例的相同方法在不同情形有不同表现形式.多态机制使具有不同 ...
- windows 应急流程及实战演练
前言 本文摘自信安之路公众号的文章. 当企业发生黑客入侵.系统崩溃或其它影响业务正常运行的安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,进一步查找入侵来源,还原入侵事 ...
- iOS中点击按钮复制指定内容
话不多说,直接上图和代码:
- 查找 oracle 数据库中包含某一字段的所有表的表名
select table_name from DBA_TAB_COLUMNS where COLUMN_NAME='字段名'; 字段名需要大写
- 一个版本烧录过程中记录:fdisk、mkfs.ext4、make_ext4fs、img2simg、simg2img
关键词:dd.fdisk.mkfs.ext4.make_ext4fs.img2simg.simg2img等等. 一个典型的嵌入式系统是由uboot+kernel+rootfs组成的,其中uboot和k ...
- itest(爱测试) 4.2.1 发布,开源BUG 跟踪管理 & 敏捷测试管理软件
itest 入选 2019 年度最受欢迎开源中国软件 开源工具的发展,离不开你我的支持,需要您投上宝贵的一票 去投票 itest 简介:查看简介 itest 开源敏捷测试管理,testOps 践行者 ...
- Codeforces Round #583 (Div. 1 + Div. 2, based on Olympiad of Metropolises)
传送门 A. Optimal Currency Exchange 枚举一下就行了. Code #include <bits/stdc++.h> using namespace std; t ...