2016-01-24 55 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

這不是一個功能。這是一個錯誤:-) –