插入DB时出现字符串“'”

时间:2011-10-24 09:11:58

标签: c# .net character-encoding special-characters

我正在使用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 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

使用parameters而不是使用(更多)开放攻击的逐字查询字符串,而不是:

cmd.Parameters.Add("@Param0", SqlDbType.VarChar, 80).Value = "value";

答案 2 :(得分:1)

考虑使用存储过程或参数化查询而不是直接SQL。这将使您的代码更容易受到问题的影响。

答案 3 :(得分:0)

您可以通过执行以下操作来逃避角色:

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

但以您的方式构建查询可能会导致一些严重的安全风险。查看the following article,其中介绍了如何更改动态sql以使用sql参数: