今天使用Dapper进行查询时,需要查询前n条数数据,其中n是变量,刚开始写法如下:
students = dbConnection.Query<Student>(string.Format("select top @top * from Student"),new { top=10}).ToList();
但是会提示这个异常
纳尼...这乍一看没啥问题,于是考虑了一会儿,突然想起来,SqlServer在查询前n条数据,如果n是变量,一定要用()括起来,即:
students = dbConnection.Query<Student>(string.Format("select top (@top) * from Student"),new { top=10}).ToList();
然后,就顺利查出了数据(数据库一共不到10条数据):
其实想想这个错误的原因就是平时使用SqlServer写存储过程的时候没注意这个问题:如果直接编写SQL语句执行的话,想要指定top为可变参数,也需要用()括起来
虽然问题不大,但还是记录一下吧,总觉得以后还会用到,也给遇到这个问题的人提个醒,别在坑里越陷越深(PS:刚开始我还以为是Dapper的问题,哈哈,还好思路转过来了)