Экранирование специальных символов для MS Access Query - PullRequest
1 голос
/ 21 сентября 2011

Я хочу сохранить эти символы "'^ +% & / () =? _" Через запрос на вставку для базы данных доступа ms. Как мне это сделать и предотвратить от всех случаев?

Ответы [ 4 ]

2 голосов
/ 21 сентября 2011

Используйте параметризованный INSERT оператор.

Похоже, ваш код собирает командную строку SQL.Я должен сказать вам: если это так, ваш код уязвим для SQL-инъекций .

1 голос
/ 21 сентября 2011

В дополнение к параметризованному запросу (см. Ответ Адриана) вы можете использовать определение запроса с параметром и вызывать его.

Например, вы можете создать запрос с именем qry_InsSomeTable со следующим sql

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");

против

Запрос уже определен в 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,...)

, затем в c #

 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");

Так что это кажется в основном стилистическим вразличия.

0 голосов
/ 30 декабря 2014

в Visual Studio необходимо преобразовать одинарный в двойной символ

, то есть:

sql = replace(sql, "'", "''");
0 голосов
/ 21 сентября 2011

Чтобы вставить специальные символы, вы должны заключить специальные символы в квадратные скобки ([]).Надеюсь, это поможет.

...