【发布时间】:2014-05-10 17:45:12
【问题描述】:
我需要确定 SQL 2012 中数据库的排序规则,并从中提取区分大小写。我该怎么做? 在我知道拼写区分大小写后,我需要在 C# 中使用它。 SQL Server 排序规则区分大小写和 C# 之间是否存在映射关系?
【问题讨论】:
-
@MikkaRin - 不是。他们解释了如何获取排序规则。我问如何将它映射到 C#
标签: c# sql sql-server
我需要确定 SQL 2012 中数据库的排序规则,并从中提取区分大小写。我该怎么做? 在我知道拼写区分大小写后,我需要在 C# 中使用它。 SQL Server 排序规则区分大小写和 C# 之间是否存在映射关系?
【问题讨论】:
标签: c# sql sql-server
您的问题存在根本缺陷,因为它将排序规则的所有特征都降低为仅区分大小写。在这个假设上写代码会导致代码不正确,我只有两个字加两个:Turkish I。为了正确起见,您必须在 C# 代码中使用与数据库中的排序规则相同的排序规则,而不是简单地使用 ToLowerCase() 或 ToUpperCase()。
请问如何映射到C#
鉴于 SQL Server 支持的排序规则列表是已知且固定的(对于每个版本),我建议将 SQL 返回的collation name 映射硬编码为C# culture name。您只需构建一次列表,构建起来相当容易。您需要以某种方式处理可能附带新排序规则的 SQL Server 未来版本。
请注意(再次...)您要解决的问题绝非微不足道。 SQL Server persists 使用给定排序规则的数据,这使得无法更改排序规则(如果排序规则说 A 在 B 之后排序并且数据被保存,那么将排序规则更改为 A 在 B 之前排序将导致数据读取持久数据时损坏,相等比较,考虑外键,唯一和检查约束等)。但是,平台 (Windows)确实不时地更改排序规则设置,通常是为了修复现有排序规则中的错误。您的 C# 文化将使用 当前 平台排序规则,这可能与 SQL 在 2008 年为相同排序规则捕获的内容不同。那座桥下有许多龙...
【讨论】:
SQL Server 排序规则区分大小写和 C# 之间是否存在映射关系?
是的,鉴于:
http://technet.microsoft.com/en-us/library/ms174396.aspx
用于具有默认排序规则的属性。
所以,有一个映射。只是没有您可能想要的简单属性。
虽然没有相关性 - SQL Server 映射非常复杂。名字比较是最好的选择。
【讨论】: