【已解決】C#中往SQLServer插入數據時遇到BUG


錯誤信息如下:

“System.Data.SqlClient.SqlException”類型的未經處理的異常在 System.Data.dll 中發生

其他信息: “”附近有語法錯誤。

文字版代碼如下:

1 sqlCmd.CommandText =string.Format( "insert into [dbo].[Table4Test]([ID],[Name],[Password])values({0},'{1}','{2}')", dataOfItem[0],dataOfItem[1],dataOfItem[2]); 2 
3  sqlCmd.ExecuteNonQuery();

可以看出,出錯的地方就是那一句SQL語句。

 

既然是SQL語句的問題為何不貼進SQL里去調試一番呢?

於是和我便從從程序出錯時提取出出錯的那句SQL語句。

Ctrl+c、Ctrl+V,我將它原原本本的復制到了SQL Server Management Studio里。

 

F5運行。

 

 

經過一番修改,確認是括號問題,重新輸入一遍括號后,數據成功入庫。

 

 

看起來現在只是括號的半角和全角問題,可惜我錯了。

Ctrl+c、Ctrl+V,我將修改后的符號原原本本的復制到了Microsoft Visual Studio里。

 

繼續報錯。

 

隨后我又經行了如下嘗試,均無果。

1、將String.Format()方法更換成String的加號運算符重載。

2、將從Visual Studio 2012更換成2015。

3、將.Net 框架從4.6.1更換為4.5。

4、重啟SQL Server 實例。

5、重啟計算機。

6、把NAME字段的類型設置為nvarchar 。(感謝劉宏璽的建議)

7、在SQL語句下添加;(感謝貧民窟大俠的建議)

8、使用String.Trim()方法。

9、使用Object.Replace()替換括號。

 

 

唯一成功過的一次是我把SQL語句手動打一遍,像這樣:

1 sqlCmd.CommandText ="insert into [dbo].[Table4Test]([ID],[Name],[Password])values(0,'吳靜鈺','1')";
2 
3 sqlCmd.ExecuteNonQuery();

問題看似出在了字符串合並上。

 

 

 

根據runliuv的建議,我用File.AppendAllText()方法導出了SQL 語句的文本,並將notepad++軟件設為顯示所有符號。

 

把NotePad++用ANCI編碼將文件重新打開,看到了異常。

對比前面的那張圖看到,第一個values后面的字符“1”亂碼了。

 

於是,我把該字符在UTF8編碼格式重新打開並復制到了一個新的TXT文件當中,用十六進制查看器對其與ANCIUTF8無ROM編碼進行對比。

(UTF8編碼格式)

 

UTF8無ROM編碼、ACNI編碼)

 

解決方法

用Notepad++軟件將數據源的UTF8編碼格式轉化為UTF8無ROM

 

感謝runliuv

(他所提供的方法是正確的,打開顯示所有字符是最有效的方法,但是我在執行上出了問題。)

 

 總結:

“人們總是看到自己所願意看到的東西”

在遇到解決不了BUG的時候,不妨從頭想想,看看自己所忽略掉的細節。因為人們常常會忽略掉一些顯而易見的細節,不斷自我欺騙,讓事情的走向看似向着我們所篤行的方向前進。

修補漏洞如此,為人處事亦是如此。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM