C# 从文本文件读取将创建三个点
我正在使用StreamReader读取一个包含sql查询的长文本文件,然后使用StringBuilder创建一个针对数据库运行的字符串。创建字符串后,我检查了值和三个点。。。出现在字符串中,导致在对数据库运行查询时失败。为什么会这样?我能做些什么来阻止它发生C# 从文本文件读取将创建三个点,c#,.net,string,C#,.net,String,我正在使用StreamReader读取一个包含sql查询的长文本文件,然后使用StringBuilder创建一个针对数据库运行的字符串。创建字符串后,我检查了值和三个点。。。出现在字符串中,导致在对数据库运行查询时失败。为什么会这样?我能做些什么来阻止它发生 string script; if (File.Exists(path)) { using(StreamReader sr = File.OpenText(path)) { StringBuilder sb
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处都会出现三个点。不知道这有什么意义
更新:字符串似乎在运行时被截断。该文件共有48080个字符,但在中间位置截断,使得字符串变量32768为16384。这是字符串的最大字符数吗?我感觉您正在检查调试器中的值,其中长查询文本部分显示,并以省略号(…)结束 在这里再次猜测,但似乎您将SQL行连接到一行中,如果文件中的行没有以空格字符结尾,那么查询将变得混乱。这可能就是SQL查询无法工作的原因 顺便说一句,您可以更简洁地编写代码,如下所示
if (File.Exists(path))
script = string.Join(" ", File.ReadLines(path));
在调试很长的查询字符串时,我遇到了同样的问题 事实证明,VisualStudio(我的是2015)调试器将在一定数量的字符后截断长字符串,以便于阅读。所以,即使您在文本可视化工具中看到三个点(…),实际值也没有这三个点 据我所知,VisualStudio2012调试器没有添加三个点。我还没有找到在VS2015中关闭该功能的方法,但您可以使用html可视化工具或json可视化工具作为替代解决方案
我有一个明确的答案给你:微软说你正在经历的是Visual Studio 2015中的一个bug。他们发布了VisualStudio2015的“更新2”,据报道该更新旨在纠正该问题 我试图让我的管理员安装这个更新,但与此同时,一个可行的解决办法是将文本加载到JSON可视化工具中。它将显示一个错误,即它当然不是有效的JSON,因为它是SQL,但它将显示字符串的整个文本 从此处下载更新2: 请参见此处的错误报告:
您调试了吗?其他所有的文本都读得很好,没有任何问题吗?如果是,你确定你的文章没有这些点吗?为什么不用从文本文件中读取数据来传递sql中的查询,而只创建一个存储过程呢?不幸的是,在我的情况下,我没有创建sp的权限(我不高兴,因为这样会使我的生活简单得多)。我检查了我的文件,三个点没有出现在任何地方。还有,更奇怪的是,当我将字符串写入文本时,三个点不会出现。它们只存在于字符串变量中。关于第二个问题,是的,其余的文本(之前和之后)看起来是正确的。我想知道是否有一个隐藏的角色在做这件事。。。我已经在notepad++中进行了检查,但找不到任何您知道可以执行的操作
string script=File.ReadAllText(path)代码>?我认为这个问题被否决是不公平的。OP清楚地说明了问题的症结所在,这个问题有一个明确的答案,我在下面贴了出来。:-)是的,我认为这和省略号一样好,但是当我在VS中使用文本可视化工具时,我可以看到。。。被追加的,每次都不在同一个地方。我按照你的建议重写了代码,但没有修改success@brdahlgren我建议你用一个简单的SQL查询试试,我试过了,但用一个简单的查询,它没有添加三个点。我应该纠正我之前的评论,我试着读取不同长度的文件,三个点确实每次都显示为字符位置16384,这不是一个功能。这是一个错误:-)