首页 > 解决方案 > SQL Server 在结果中返回无效(unicode/hexidecimal)字符

问题描述

在查询大型NTEXTSQL 列的列表时,我开始更频繁地在查询结果中返回垃圾。我不确定 CISCO VPN 是导致问题还是其他类型的“驱动程序”(网络驱动程序、wifi 驱动程序、笔记本电脑上的语言设置?)。我完全不知所措。但是您可以在下面的屏幕截图中看到失败。请注意,一条“成功”行被丢弃了,这意味着它工作了一次,但第二次失败了。我得到随机数的成功,然后它失败了。

我让其他人在连接到同一个 VPN 时尝试了相同的脚本(但是他们在不同的位置,显然是不同的计算机)并且他们可以毫无错误地运行它。一个人运行了 5 次(所以 50 个成功查询)。

失败

我使用 LINQPad(显然是 LINQ to SQL)作为测试工具,这是我的脚本。它只是一个循环FolderItem.fiItem列 ( NTEXT) 并将它们解析为 XML 并将其添加到根元素的简单脚本。您可以看到我尝试了直接 L2S 查询以及使用该ExecuteCommand方法查看它是否对结果有任何影响,但没有任何改变。

更新- 我刚刚连接到我的手机热点而不是我的常规 WIFI(放大器路由器),它通过脚本没有错误。我真的不知道该看什么来尝试解决,但是当我用 VPN 连接到我的 WIFI 时,我的下载速度大约是 80MB。有什么想法/建议吗?

脚本

void Main()
{
    var query = @"SELECT [t0].[fiEntryType], [t0].[fiItem]
    FROM[dbo].[FolderItems] AS[t0]
    LEFT OUTER JOIN[dbo].[Groups] AS[t1] ON[t1].[gKey] = [t0].[figKey]
    WHERE[t1].[gName] = 'Tables';";

    var tables = new XElement("Tables" );

    for (int i = 0; i < 10; i++)
    {
        // var folderItems = FolderItems.Where(f => f.Group.gName == "Tables").Select(f => new { f.fiEntryType, f.fiItem });
        var folderItems = ExecuteQuery<TableResult>(query, new object[] { });

        foreach (var fi in folderItems)
        {
            try
            {
                tables.Add(XElement.Parse($"<Table>{fi.fiItem}</Table>"));
            }
            catch (Exception ex)
            {
                fi.Dump();
                throw;
            }
        }

        // tables.Dump();
        "Success".Dump();

        Thread.Sleep( 1000 );
    }
}

// Define other methods and classes here
public class TableResult
{
    public string fiEntryType {get;set;}
    public string fiItem {get;set;}
}

标签: c#sqlunicodelinq-to-sqllinqpad

解决方案


无法真正解释所有行为,但将我的 VPN 软件从 Cisco 更改为 Shrewsoft 解决了这个问题。Shrewsoft 自安装以来一直非常稳定。


推荐阅读