錯誤信息以下:sql
「System.Data.SqlClient.SqlException」類型的未經處理的異常在 System.Data.dll 中發生框架
其餘信息: 「」附近有語法錯誤。編碼
文字版代碼以下:spa
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裏去調試一番呢?code
因而和我便從從程序出錯時提取出出錯的那句SQL語句。orm
Ctrl+c、Ctrl+V,我將它原本來本的複製到了SQL Server Management Studio裏。blog
F5運行。字符串
通過一番修改,確認是括號問題,從新輸入一遍括號後,數據成功入庫。get
看起來如今只是括號的半角和全角問題,惋惜我錯了。
Ctrl+c、Ctrl+V,我將修改後的符號原本來本的複製到了Microsoft Visual Studio裏。
繼續報錯。
隨後我又經行了以下嘗試,均無果。
一、將String.Format()方法更換成String的加號運算符重載。
二、將從Visual Studio 2012更換成2015。
三、將.Net 框架從4.6.1更換爲4.5。
四、重啓SQL Server 實例。
五、重啓計算機。
六、把NAME字段的類型設置爲nvarchar 。(感謝劉宏璽的建議)
七、在SQL語句下添加;(感謝貧民窟大俠的建議)
八、使用String.Trim()方法。
九、使用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文件當中,用十六進制查看器對其與ANCI和UTF8無ROM編碼進行對比。
(UTF8編碼格式)
(UTF8無ROM編碼、ACNI編碼)
解決方法:
用Notepad++軟件將數據源的UTF8編碼格式轉化爲UTF8無ROM。
感謝runliuv
(他所提供的方法是正確的,打開顯示全部字符是最有效的方法,可是我在執行上出了問題。)
總結:
「人們老是看到本身所願意看到的東西」
在遇到解決不了BUG的時候,不妨從頭想一想,看看本身所忽略掉的細節。由於人們經常會忽略掉一些顯而易見的細節,不斷自我欺騙,讓事情的走向看似向着咱們所篤行的方向前進。
修補漏洞如此,爲人處事亦是如此。