【已解决】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的时候,不妨从头想一想,看看本身所忽略掉的细节。由于人们经常会忽略掉一些显而易见的细节,不断自我欺骗,让事情的走向看似向着咱们所笃行的方向前进。

修补漏洞如此,为人处事亦是如此。

相关文章
相关标签/搜索