将数据插入包含撇号的SQL Server数据库

时间:2017-07-06 21:27:23

标签: sql sql-server vb.net

我在Vb.net 2012上创建了与SQL Server 2012连接的程序。

此数据库表的一列是Description,在某些情况下,日期可能包含撇号,例如......'电锯15' 3" X 1 1/2 X .050 X 3/4'

当我运行查询时,数据之间的撇号会导致查询语法出错,这是VB.net中的查询行。

CMD.CommandText = 
"INSERT INTO Table_ARTICLES 
 (NUMPART, DESCRIPTION, LOCATION, MAX, ACTUAL, MIN, Unidad_de_medida) 
 VALUES ('" & txtNumParte.Text & "', '" & txtDescripcion.Text & "', 
  '" & txtLocaclizacion.Text & "', '" & txtMaximo.Text & "', '" & txtActual.Text & "',
  '" & txtMin.Text & "', '" & cmbUnidad.Text & "')"

有人知道如何让这个查询接受查询中的那些字符吗?

2 个答案:

答案 0 :(得分:3)

正如@pmbAustin指出的那样,由于SQL注入攻击和其他问题,通过字符串连接构建sql语句是一个可怕的想法。您应该使用的方法称为参数化查询:

CMD.CommandText = "INSERT INTO (NUMPART, DESCRIPTION, LOCATION, MAX, ACTUAL, 
MIN, Unidad_de_medida) 
VALUES (@NUMPART, @DESCRIPTION,@LOCATION,@MAX,@ACTUAL,@MIN,@UNIDAD_DE_MEDIDA)"

然后:

CMD.Parameters.Add("@NUMPART",txtNumParte.Text);
CMD.Parameters.Add("@DESCRIPTION",txtDescripcion.Text);
//...and so on
CMD.ExecuteNonQuery();

答案 1 :(得分:0)

使用参数化SQL(即存储过程)来防止SQL注入等。

至于你的问题,在将它作为参数添加之前,你需要用两个单引号替换单引号(撇号)。这样,第一个作为转义字符,允许将撇号插入数据库。

实施例: txtNumParte.Text.Replace("'", "''")