使用单引号保存数据的问题'在查询中

时间:2014-06-13 10:29:52

标签: c# asp.net sql sql-server

我有一个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。

3 个答案:

答案 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')