2016-01-24 56 views
1

我正在使用StreamReader读取包含sql查询的长文本文件,然后使用StringBuilder创建一个字符串,该字符串可以针对数据库运行。一旦创建字符串,我检查了值和三个点......出现在字符串中导致查询失败,当我对数据库运行它。这是为什么发生?我能做些什么来阻止它发生?从文本文件读取创建三个点

string script; 
if (File.Exists(path)) 
{ 

    using(StreamReader sr = File.OpenText(path)) 
    { 
     StringBuilder sb = new StringBuilder(); 
     while(!sr.EndOfStream) 
     { 
      sb.Append(sr.ReadLine()); 

     } 
     script = sb.ToString(); 
    } 
} 

更新:我想补充一点的三个点出现在每次字符位置16384。不知道这个意义

更新:它看起来字符串在运行时被截断。该文件contiain 48080个字符,但被截断在中间位置16384使字符串变量32768 ..这是一个字符串的最大字符数?

+1

你调试?是否所有其他文本完美无缺地读取?如果是这样,你确定你的文本没有这些点?为什么不从一个文本文件中读取以在sql中传递查询,而只是创建一个存储过程? –

+0

不幸的是,在我的情况下,我没有权利做一个sp(我不开心,因为它会让我的生活变得更简单)。我检查了我的文件,并且三个点不出现在任何地方。此外,甚至更奇怪的是,当我将字符串写入文本时,三个点不出现。他们只存在于字符串变量 – brdahlgren

+0

关于你的第二个问题,是的,其余的文本(之前和之后)似乎被正确读取。我想知道是否有隐藏的角色可能会这样做...我已经在记事本++中进行了检查,但无法找到任何东西 – brdahlgren

回答

1

我要给你一个明确的答案:微软说,你遇到的是他们已经发布在Visual Studio 2015中的错误“更新2”为Visual Studio 2015年报告更正问题。

我试图让我的管理员安装此更新,但在此期间,可行的解决方法是加载JSON Visualizer中的文本。它会显示一个错误,它当然不是有效的JSON,因为它是SQL,但它会显示整个字符串的文本。

下载更新2从这里开始:

https://www.visualstudio.com/en-us/news/vs2015-update2-vs.aspx

见bug报告在这里:

https://connect.microsoft.com/VisualStudio/feedback/details/2016177/text-visualizer-misses-corrupts-text-in-long-strings

0

我正在检查在调试器,其中长查询文本被部分地显示并以省略号(...)

再次猜测这里结束值的感觉,但好像你加入你的SQL行成一行,如果文件中的行不以空格字符结束,那么查询就会变得混乱。可能这就是你的SQL查询不起作用的原因。

顺便说一句,你可以写代码,你有更多的简洁如下

if (File.Exists(path)) 
    script = string.Join(" ", File.ReadLines(path)); 
+0

是的,我认为,就像省略号一样,但是当我在VS中使用文本可视化器时,我可以看到......被附加,并且不是每次都在同一个地方。我重写了代码,因为你建议没有成功 – brdahlgren

+0

@brdahlgren我建议你尝试一个简单的SQL查询 – Vikhram

+0

我试过了,并用一个简单的查询它不添加三个点。我应该纠正我以前的评论,我试着阅读各种长度的文件,并且每次都出现16384个字符的位置 – brdahlgren

1

我有同样的问题,而我是调试很长的查询字符串。

事实证明,Visual Studio(我的是2015)调试器将在一定数量的字符之后截断长字符串以便于阅读。所以,即使您在Text Visualizer中看到三个点(...),实际值也没有这三个点。

据我所知,Visual Studio 2012调试器不添加三个点。我还没有找到如何在VS2015中关闭该功能的方法,但是您可以使用html visualizer或json visualizer作为替代解决方案。

Use html visualizer or json visualizer like this

+0

这不是一个功能。这是一个错误:-) –