Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中获取所有SQL Server VARCHAR类型_C#_.net_Sql Server_Ascii - Fatal编程技术网

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;
}