我有一个asp.net项目,我在保存数据时遇到错误。我有一个学校名称的文本框,大多数学校名称都被保存但是如果我有一个像St.Xavier这样的学校名称,它会创建一个执行插入查询期间出现问题。这是因为文本中存在单引号。因此,我得到的最终查询是:
Insert Into tblSchool(SchoolName, CreatedBy, CreatedOn)
values('St.Xavier's',1,'2014-6-13 13:14:16')
如何在文本中使用单引号保存数据?我正在使用Microsoft SQL Server 2005。
答案 0 :(得分:5)
您还没有显示您的代码,但我强烈怀疑您已获得以下代码:
// Bad code!
String sql = "Insert Into tblSchool(SchoolName, CreatedBy, CreatedOn) "
+ "values('" + name + "'," + creator + ",'" + date +"')";
不要这样做。它很难阅读,在转换方面容易出错,而且易受SQL Injection attacks攻击。
相反,您应该使用参数化SQL。类似的东西:
String sql = "Insert Into tblSchool(SchoolName, CreatedBy, CreatedOn) "
+ "values(@Name, @CreatedBy, @CreatedOn)";
using (var command = new SqlCommand(sql, connection))
{
command.Parameters.Add("@Name", SqlDbType.VarChar).Value = name;
command.Parameters.Add("@CreatedBy", SqlDbType.Int).Value = creator;
command.Parameters.Add("@CreatedOn", SqlDbType.DateTime).Value = date;
int results = command.ExecuteNonQuery();
...
}
有关详细信息,请参阅SqlCommand.Parameters
文档。
答案 1 :(得分:0)
您需要在SqlCommand
中使用bind parameters。其他任何事情一定会失败。
答案 2 :(得分:-3)
你需要引用'与另一个'。即:
values('St.Xavier''s',1,'2014-6-13 13:14:16')