【已解决】C#中往SQLServer插入数据时遇到BUG

  • Post author:
  • Post category:其他



错误信息如下:


“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文件当中,用十六进制查看器对其与

ANCI



UTF8无ROM

编码进行对比。



(

UTF8

编码格式)








UTF8无ROM

编码、

ACNI

编码)







解决方法



用Notepad++软件将数据源的

UTF8

编码格式转化为

UTF8无ROM



感谢

runliuv


(他所提供的方法是正确的,打开显示所有字符是最有效的方法,但是我在执行上出了问题。)


总结:


“人们总是看到自己所愿意看到的东西”


在遇到解决不了BUG的时候,不妨从头想想,看看自己所忽略掉的细节。因为人们常常会忽略掉一些显而易见的细节,不断自我欺骗,让事情的走向看似向着我们所笃行的方向前进。


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

转载于:https://www.cnblogs.com/JerryOu/p/5618216.html