Ошибка строки "'" при вставке в БД - PullRequest
0 голосов
/ 24 октября 2011

Я использую клиент sqlite для Windows Phone для моей базы данных.Я столкнулся с проблемой, касающейся форматирования текста в этом коде:

cmd.CommandText = @" Insert into Restaurants (address,description,id,latitude,longitude,name,opening_hours,phone,sandwich,price,updated_at,website,score,rating_count,thumbnail_url) values ('" + r.address + "','" + r.description + "',"+r.id +","+r.latitude+","+r.longitude+",'"+r.name+"','"+r.opening_hours+"','"+r.phone+"','"+r.sandwich+"','"+r.price+"','"+r.updated_at+"','"+r.website+"',"+r.score+","+r.rating_count+",'"+r.thumbnail_url+"')";
cmd.ExecuteScalar();

Проблема в том, что текстовые поля могут быть похожи на "xyz it's abc", и поэтому ' нарушает мою команду обновления.Как я могу сохранить ' и заставить мой код работать?

Ответы [ 4 ]

4 голосов
/ 24 октября 2011

Используйте Parameter вместо жестко закодированной строки (запроса).

cmd.CommandText = @"Insert into Restaurants 
    (address,description,id,latitude,longitude,name,opening_hours,
      phone,sandwich,price,updated_at,website,score,rating_count,thumbnail_url) 
  values 
    (@address,@description,@id,@latitude,@longitude,@name,@opening_hours,
      @phone,@sandwich,@price,@updated_at,@website,@score,
        @rating_count,@thumbnail_url)";
4 голосов
/ 24 октября 2011

Вместо использования дословной строки запроса, которая (более) открыта для атаки, используйте параметры вместо:

cmd.Parameters.Add("@Param0", SqlDbType.VarChar, 80).Value = "value";
1 голос
/ 24 октября 2011

Попробуйте использовать хранимые процедуры или параметризованные запросы, а не прямой SQL.Это даст дополнительное преимущество, сделав ваш код менее восприимчивым к проблемам.

0 голосов
/ 24 октября 2011

Вы можете избежать символов, выполнив что-то вроде:

cmd.CommandText = cmd.CommandText.Replace("'", "''");

Но построение запроса так, как вы это делаете, может привести к серьезным угрозам безопасности.Взгляните на следующую статью , которая описывает, как изменить динамический sql для использования параметров sql:

...