c# - ORDER BY 给出错误的命令

标签 c# sql-server sql-order-by

我的 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/

相关文章:

mysql - 创建与 SQL 中的条目排名位置相对应的列

c# - 路径 '/' 的 Controller 未找到或未实现 IController。在 nopCommerce 中

c# - 如何防止类在工厂外被实例化

c# - 选择子句问题中的动态列

sql-server - SQL Server 中的动态枢轴

sql-server - T-SQL 分配产品发布之间的运行天数,在产品发布时重置为零

mongodb - 按搜索词相似度对结果排序

c# - 为什么有些对象不能从不同的线程访问?

c# - 如何使用 SQL Server 数据库部署 C#/WPF 应用程序

mysql - 复杂的多列mysql order by