在表适配器查询 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 命令的主要内容,如果未能解决你的问题,请参考以下文章

在C#中使用SQL语句查询数据在表中是不是存在输出是或否

BigQuery 无法识别联接中子选择的字段

为啥我不能在我的 SQL Server 上查询 OFFSET/FETCH 查询?

C# 离线人脸识别 ArcSoft V2.0 Demo

如果 Razor 视图中的 foreach 无法识别条件

无法在表空间 PSTEMP 中将临时段扩展 16