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

TVi*_*cky 0 c# sql sql-server asp.net

我有一个asp.net项目,我在保存数据时遇到错误.我有一个学校名称的文本框,大多数学校名称都被保存但如果我有学校名称像St.Xavier's,它会产生一个问题执行插入查询.这是因为文本中存在单引号.因此,我得到的最终查询是:

Insert Into tblSchool(SchoolName, CreatedBy, CreatedOn) 
values('St.Xavier's',1,'2014-6-13     13:14:16')
Run Code Online (Sandbox Code Playgroud)

如何在文本中使用单引号保存数据?我正在使用Microsoft SQL Server 2005.

Jon*_*eet 5

您没有显示您的代码,但我强烈怀疑您有以下代码:

// Bad code!
String sql = "Insert Into tblSchool(SchoolName, CreatedBy, CreatedOn) "
           + "values('" + name + "'," + creator + ",'" + date +"')";
Run Code Online (Sandbox Code Playgroud)

不要那样做.它很难阅读,在转换方面容易出错,而且容易受到SQL注入攻击.

相反,您应该使用参数化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();
    ...
}
Run Code Online (Sandbox Code Playgroud)

有关SqlCommand.Parameters详细信息,请参阅文档.