我的 C# 程序中有一个 SQL 语句,如下所示:
SELECT * FROM XXX.dbo.XXX
WHERE Source = 'OH'
AND partnum = '1231202085'
ORDER BY partnum, Packaging, Quantity
在 SQL Server 管理中运行此查询时,结果按预期排序。 我的前 3 个结果具有相同的零件编号和包装,数量分别为 32.0、50.8 和 51.0。
但是,当我从我的程序运行查询时,第一个返回数量为 50.8 的结果集。 Quantity 的数据类型是 decimal(18,9)。我已经尝试过转换,它似乎不是数据类型问题。
我不明白为什么它得到中间数量。
感谢你们的快速回复,但经过更多测试后,我发现我的问题出在我的 C# 代码中,而不是 sql。
得到查询结果后我有:
if (PurchOrder.Read())
while (PurchOrder.Read())
忽略了这样一个事实,即第一次读取实际上会读取我的第一个结果,然后会得到我的第二个结果。
我将 if 语句替换为:
if (PurchOrder.HasRows == true)
一切看起来都很好。
再次感谢您的回复。对于误导性的问题,我们深表歉意。
-科迪
最佳答案
如果 partnum 是字母数字,它不会按数字顺序排序,除非你要么
左填充 partnum 到完全相同的字符数
使用一些专门的字母数字排序进行排序。我通常使用:
order by RIGHT(REPLICATE('0', 1000) + LTRIM(RTRIM(CAST([field_name] AS VARCHAR(8000)))), 1000)
当然,如果您的字段较小,您可以使用更低的填充数。
关于c# - ORDER BY 给出错误的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10128441/