在表适配器查询 c# 中无法识别 OFFSET 命令
Posted
技术标签:
【中文标题】在表适配器查询 c# 中无法识别 OFFSET 命令【英文标题】:OFFSET command not recognized in Table Adapter Query c# 【发布时间】:2021-11-05 13:55:58 【问题描述】:我正在尝试在 Visual Studio 2019 中构建以下 tableadapter 查询
SELECT * FROM Vendors
ORDER BY VendorID
OFFSET 5 ROWS
FETCH NEXT 5 ROWS ONLY
它在偏移命令处给出错误“无法解析查询文本” 我知道这个查询适用于数据库本身,因为我可以在 sql server (2019 Express) 上成功运行它。
Visual Studio tableadapter 查询是否无法识别偏移命令?还是语法在某些方面有所不同?
【问题讨论】:
表适配器是上个世纪的。您是否考虑过不使用它们? :P 或者,只需将一些查询放在那里,设计人员可以轻松地使用具有相同元数据的查询(请不要在生产代码中使用SELECT *
,它太容易中断),然后在后面的代码中更改查询或只是你自己在运行时。您似乎不太可能希望以 OFFSET
的静态值开头。
【参考方案1】:
TableAdapter 现在已经很老了,但它们仍然是一种有用的数据访问策略。设计器尝试解析您输入的查询,但不太喜欢带有额外偏移部分的查询。
我建议你试试:
右键单击您的数据集表面 添加>>表格适配器 “选择下载行” 将查询输入为SELECT * FROM Vendors
完成向导
单击适配器的fill,getdata()
行
在属性网格中,将额外的子句粘贴到查询文本的末尾
对“是否要更新其他查询?”说“不”
您应该留下一个可用的适配器。请参阅脚注
如果你想使用很多设计师不喜欢的语法,你还有其他选择;最值得注意的是,您可以在通过向导时说“创建新的存储过程”,输入SELECT * FROM Vendors
的基本查询,VS 将生成存储过程,然后您可以在 SSMS 中将 OFFSET 等编辑到存储过程命令中
脚注:我个人仍然经常使用 TA,并且从来不需要这样的语法,但通常我会在 SELECT * FROM x WHERE ID = @y
形式的 TA 中进行第一个查询,因此无论如何它只会拉一行并且非常“简单” SQL” - 数据表模式是由它驱动的,它“正常工作”:
然后其他查询已定义用途,例如SELECT * FROM x WHERE Name LIKE ...
- 如果您采用这种方法将第一个查询设为它可以处理的“正常”查询,那么您当然可以添加另一个语法不受支持的查询 - 您得到错误“无法解析查询文本”:
但你可以忽略它并完成向导,它会正常工作
【讨论】:
这成功了!谢谢!在它完成之后,出于好奇,我回到原来的 tableadapter 并创建了查询,只是忽略了警告,发现查询确实有效,尽管它说无法解析查询。我只是从来没有尝试过。 VS的误导!哈哈。 (如果您从一开始就尝试使用新的 TA,您可能会发现它不会生成所有查询/无法正确生成数据表,因此我建议在一种第一次工作的方式..另外,如果您更改数据库中的表,查询损坏会使更改更难导入)以上是关于在表适配器查询 c# 中无法识别 OFFSET 命令的主要内容,如果未能解决你的问题,请参考以下文章