gpt4 book ai didi

SQLDataReader 排序顺序与存储过程顺序

转载 作者:行者123 更新时间:2023-12-02 04:40:15 28 4
gpt4 key购买 nike

我有一个存储过程,其中包含用于返回记录的 ORDER BY 子句。当我在 SQL 中执行时,我看到适当的顺序。

但是,当我从客户端执行并加载到 SqlDataReader 时,顺序发生了变化。这不是预期的结果。我得到相同的记录,但顺序(或者可能是其排序的列)已更改。

什么可能会操纵这个?或者,我该怎么做才能在客户端的 Reader 上应用 ORDER BY

SP 的最终选择是:

SELECT DISTINCT
TotalMatchCount
,ExampleDescription as Description
,ExampleMatchCount
,ExampleLevenshtein
,Code6 as Code
,Tier1Code
,Tier1Description
,Tier1MatchCount
,Tier1Levenshtein
,Tier2Code
,Tier2Description
,Tier2MatchCount
,Tier2Levenshtein
,Tier3Code
,Tier3Description
,Tier3MatchCount
,Tier3Levenshtein
FROM
@SearchResults
Order by
ExampleMatchCount Desc
,ExampleLevenshtein ASC
,Tier3MatchCount DESC
,Tier3Levenshtein ASC
,Tier2MatchCount DESC
,Tier2Levenshtein ASC
,Tier1MatchCount DESC
,Tier1Levenshtein ASC

结果可能在哪里(仅给出主要描述字段):

让 hh child 准备上学
帮助 hh child 完成学校项目
和 hh child 一起等校车
等等

在客户端调用 SP:

Private SearchRDR As System.Data.SqlClient.SqlDataReader

Dim db As DBAccess = New DBAccess
Dim rdr As System.Data.SqlClient.SqlDataReader

Try
db.AddParameter("@pSearchText", _SearchText)
rdr = db.ExecuteReader("sprc_SEL_Search")

If rdr.HasRows Then
'Get the data into the reader object
SearchRDR = rdr

此时我已经检查了 rdr 中的值,它们已经乱序了。但在我的代码中,当我去加载数据 gridview 时,我从其类中提取 rdr 并加载值:

Dim rdr As System.Data.SqlClient.SqlDataReader
rdr = cSearch.SearchRDR

Try
If rdr.HasRows Then

While rdr.Read()
dgvSearch.Rows.Add(rdr("mycolumn").ToString()
. . . . . . . .

但如前所述,它在到达这里之前就已经出问题了。我看到的结果类似于:

与非 hh child 一起等待校车
把非…… child 送到 friend 家
和…… child 一起等校车

这不是上面显示的顺序。事实上,SQL 中的第一项出现在阅读器中的大约位置 4(第 4 行)处。然后第二个 SQL 项出现在第 6 行。

最终客户的订单没有任何改变。它只是没有使用服务器上指定的顺序。

最佳答案

ADO DB 对象具有内置的 RowFilter 和 Sort 属性,可以在将对象分配给数组之前直接应用于 SQLDataReader 对象。因此,即使 SQL 存储过程没有按预期顺序返回行,您也可以在获取从 ADO DB 对象返回的记录集后获得正确的顺序。

rdr.Sort = "ExampleMatchCount Desc"

关于SQLDataReader 排序顺序与存储过程顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32256478/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com