C# 在C中获取所有SQL Server VARCHAR类型
有人能帮我弄清楚为什么我会 致命错误:超出内存使用限制 有以下几点C# 在C中获取所有SQL Server VARCHAR类型,c#,.net,sql-server,ascii,C#,.net,Sql Server,Ascii,有人能帮我弄清楚为什么我会 致命错误:超出内存使用限制 有以下几点 private static IEnumerable<char> AllSqlVarChars () { List<char> chars = new List<char>(256); for(byte b = 0; b <= 255; ++b) chars.Add((char)b); return chars; } 或者帮助我找到
private static IEnumerable<char> AllSqlVarChars ()
{
List<char> chars = new List<char>(256);
for(byte b = 0; b <= 255; ++b)
chars.Add((char)b);
return chars;
}
或者帮助我找到一种更好的方法来获取与SQL Server varchar相对应的所有C字符的集合。这是因为在+++255处,字节数据类型从0开始悄悄溢出。
一个字节永远不能代表一个值,而这不是您想要做的。您是否正在寻找数据库默认排序规则支持的所有字符的列表?恐怕没有简单的方法可以做到这一点。特别是,简单地从0到255枚举是不行的,因为排序规则可以是多字节的:这种简单的方法对于日语、汉语、泰语等都会失败。您真正的问题是什么?如果要确保排序规则支持要存储的所有字符,可以对照排序规则检查它们是否都表示已记录的某些编码。更好的是,如果有任何疑问,请使用NVARCHAR。实际上,您将从前256个C字符的代码点U+0000到U+00FF,然后可能会查找这些字符是否适合VARCHAR。这实际上在总体上没有什么帮助,只是让我更想知道你真正的潜在问题是什么。是的,代码修复很简单,但结果如何?如果且仅当排序规则为单字节,则可以使用master.dbo.spt_值中的SELECT TOP256 CONVERTCHAR1、CONVERTBINARY1、ROW_NUMBER OVER ORDER BY name-1查询其中的所有字符。请注意,这些值不会与C字符的值一一对应。例如,U+0080是一个控制代码,但Latin1_常规排序规则中的0x80是欧元符号。欧元符号是U+20AC,因此不在前256个C字符中,但排序规则支持它。
private static IEnumerable<char> AllSqlVarChars()
{
List<char> chars = new List<char>(256);
for (byte b = 0; b < 255; b++)
{
chars.Add((char)b);
}
return chars;
}