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

錯誤信息以下: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文件當中,用十六進制查看器對其與ANCIUTF8無ROM編碼進行對比。

(UTF8編碼格式)

 

UTF8無ROM編碼、ACNI編碼)

 

解決方法

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

 

感謝runliuv

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

 

 總結:

「人們老是看到本身所願意看到的東西」

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

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

相關文章
相關標籤/搜索