MS Access查询的特殊字符转义



我想存储这些字符" '^+%&/()=?通过对ms access数据库的插入查询。我如何做到这一点,防止每一种情况?

使用参数化的INSERT语句

看起来你的代码正在组装SQL命令字符串。我必须告诉你:如果是这样的话,它会使你的代码容易受到SQL注入的攻击。

除了使用参数化查询(参见Adrian's Answer)之外,您还可以使用带有参数的查询定义并调用它

例如,您可以使用以下sql

创建一个名为qry_InsSomeTable的查询
PARAMETERS P_SomeField Text ( 255 );
INSERT INTO tbl_SomeTable (  P_SomeField )
VALUES (P_SomeField );

然后你可以像调用任何存储过程一样调用

using(var cn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:Whatever.mdb")
{
    var cmd = new OleDbCommand();
    cmd.Connection = cn;
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = cmd.CommandText = "qry_InsSomeTable";
    cmd.Parameters.AddWithValue("P_SomeField", "'^+%&/()=?_ ");
    cn.Open();
    cmd.ExecuteNonQuery(); 

}

当你的表中有很多字段

时,它特别有用

例如

  cmd.CommandText = @"Insert  Into TableWithAlotofFields 
                    (field1, field2, field3, field4, field5,...)
                    VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?..)";

  cmd.Parameters.Add("value1");
  cmd.Parameters.Add("value2");
  cmd.Parameters.Add("value3");
  cmd.Parameters.Add("value4");
  cmd.Parameters.Add("value5");

vs。

查询已经在Access中定义为

 PARAMETERS P_field1Text Text ( 255 ), P_field2 Number, P_field3 text(15), ...;
  Insert Into TableWithAlotofFields 
  (field1, field2, field3, field4, field5,...)
  VALUES(P_field1, P_field2, P_field3, P_field4, P_field5,...)

 cmd.CommandText = cmd.CommandText = "qry_InsSomeTable";
 cmd.Parameters.AddWithValue("P_field1", "value1");
 cmd.Parameters.AddWithValue("P_field2", "value2");
 cmd.Parameters.AddWithValue("P_field3", "value3");
 cmd.Parameters.AddWithValue("P_field4", "value4");
 cmd.Parameters.AddWithValue("P_field5", "value5");

然而,正如@David-W-Fenton指出的那样,参数上的名称被忽略,只考虑位置。例如

  cmd.Parameters.AddWithValue("P_field1", "value1");
  cmd.Parameters.AddWithValue("P_field2", "value2");

不等于

 cmd.Parameters.AddWithValue("P_field2", "value2");
 cmd.Parameters.AddWithValue("P_field1", "value1");

所以看起来主要是文体上的差异

要插入特殊字符,必须将特殊字符括在方括号([])中。我希望这对你有帮助。

在Visual Studio中,您必须将单个字符转换为双字符

即:

sql = replace(sql, "'", "''");

最新更新