应用程序对字符串的排序与数据库不同

时间:2008-11-10 16:58:49

标签: sql-server sorting sql-order-by collation

我试图在用C#编写的.Net应用程序中按名称对产品列表进行排序,以获得通过以下命令从SQL Server数据库获得的相同列表: 从ProductName按产品订单中选择*

不幸的是,应用程序排序的行为与数据库排序不同。它可能与排序规则有关:数据库具有SQL_Latin1_General_CP1_CI_AS排序规则。

如何使应用程序对这些字符串进行排序,就像数据库一样?

感谢。


更新:通过使用下面评论中的代码,并将比较选项更改为Ordinal,我终于获得了良好的结果:

私有CompareOptions myOptions = CompareOptions.Ordinal;

此外,此链接包含一些与SQL排序规则相关的非常有用的信息:http://www.siao2.com/2005/11/08/490305.aspx


感谢。它还没有用,但这可能是正确的方向。 这是我现在正在尝试的代码:

((List)orderDetails).Sort(new OrderDetailComparer());

其中OrderDetailComparer是:

public class OrderDetailComparer : IComparer<OrderDetail>
{
  private CompareInfo myComp = CompareInfo.GetCompareInfo("en-US");
  private CompareOptions myOptions = CompareOptions.StringSort;

  public int Compare(OrderDetail a, OrderDetail b)
  {
    if (a == b) return 0;
    if (a == null) return -1;
    if (b == null) return 1;

    return myComp.Compare ( a.Product.ProductNameForSorting, b.Product.ProductNameForSorting, myOptions );
  }
}

仍然没有结果。

你怎么看?如何从数据库中获取信息,了解我应该使用哪种文化?

感谢。

1 个答案:

答案 0 :(得分:4)

您可能需要使用您希望排序的文化。查看StringComparer的示例: http://msdn.microsoft.com/en-us/library/system.stringcomparer.currentculture.aspx