我正在使用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出现三个点。不确定这个
的重要性UPDATE :似乎字符串在运行时被截断。该文件包含48080个字符,但在位置16384处被截断,使字符串变量32768。这是字符串的最大字符数吗?
答案 0 :(得分:2)
我在调试很长的查询字符串时遇到了同样的问题。
事实证明,Visual Studio(我的是2015年)调试器将在一定数量的字符后截断长字符串以便于阅读。因此,即使您在Text Visualizer中看到三个点(...),实际值也不会有三个点。
据我所知,visual studio 2012调试器不会添加三个点。我还没有找到如何在VS2015中关闭该功能的方法,但你可以使用html visualizer或json visualizer作为替代解决方案。
答案 1 :(得分:2)
我有一个明确的答案:微软表示你所遇到的是Visual Studio 2015中的一个错误。他们已经发布了Visual Studio 2015的“更新2”,据报道它可以纠正这个问题。
我正在尝试通过我的管理员安装此更新,但与此同时,一个可行的解决方法是在JSON Visualizer中加载文本。它会显示一个错误,当然,它不是有效的JSON,因为它是SQL,但它会显示字符串的整个文本。
从这里下载更新2:
https://www.visualstudio.com/en-us/news/vs2015-update2-vs.aspx
请在此处查看错误报告:
答案 2 :(得分:0)
我感觉您正在检查调试器中的值,其中长查询文本被部分显示,并以省略号结束(...)
再次在这里猜测,但似乎你将SQL行连接成一行,如果文件中的行不以空白字符结尾,那么查询就会搞砸了。可能这就是你的SQL查询不起作用的原因。
顺便说一句,您可以更简洁地编写代码,如下所示
if (File.Exists(path))
script = string.Join(" ", File.ReadLines(path));