我在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 & "')"
有人知道如何让这个查询接受查询中的那些字符吗?
答案 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("'", "''")