C# TableAdapter查询中OFFSET命令不被识别问题咨询
问题原因
这个报错是Visual Studio 2019的TableAdapter设计器内置的SQL语法解析器版本老旧导致的,并非你的SQL语法有误:
OFFSET/FETCH分页语法是SQL Server 2012版本才新增的特性- VS2019的TableAdapter设计器默认仅兼容SQL Server 2008及更早版本的语法,设计时校验阶段无法识别这个新语法,所以会抛出「无法解析查询文本」的错误,只要你的目标数据库支持该语法,运行时直接执行是没有问题的。
可用解决方案
方案1:跳过设计器校验直接配置查询
你可以选择两种方式绕过设计器的语法校验:
- 直接打开数据集对应的
.xsd配置文件,找到对应TableAdapter的SelectCommand节点,手动把CommandText属性的值修改为你的OFFSET分页语句,保存后忽略设计器弹出的警告即可 - 在代码中运行时动态给TableAdapter的SelectCommand赋值,示例如下:
var adapter = new YourTableAdapter(); adapter.Adapter.SelectCommand.CommandText = @" SELECT * FROM Vendors ORDER BY VendorID OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY";
方案2:兼容旧版解析器的分页写法
如果你需要设计器正常识别语句,可以换用SQL Server 2008支持的ROW_NUMBER分页写法,执行效果和OFFSET分页完全一致:
SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY VendorID) AS RowNum FROM Vendors ) AS TempTable WHERE RowNum BETWEEN 6 AND 10
内容的提问来源于stack exchange,提问作者Aaron Hurst
相关产品推荐
相关产品推荐

