C#中SQL的转义字符

时间:2012-07-17 17:54:55

标签: c# .net

我想在我的C#代码中添加一个简单的select语句。示例如下所示。 fname中y之类的值来自参数。     //从myTable中选择lname,其中fname =' y'

这就是我在做什么。我显然得到了Sql Exception。我该如何纠正?感谢。

string strOrdersOrigSQL = "SELECT LastName FROM Employees";
// Concatenate the default SQL statement with the "Where" clause and add an OrderBy clause
       strOrdersSQL = strOrdersOrigSQL + "where FirstName ="+ 'strFname';

5 个答案:

答案 0 :(得分:14)

你不应该手工连接sql命令。使用课程SqlCommand并添加参数

using (var cmd = new SqlCommand("SELECT LastName FROM Employees where FirstName = @firstName", conn))
{
   cmd.Parameters.AddWithValue("@firstName", strFname);
   var reader = cmd.ExecuteReader();
}

答案 1 :(得分:3)

您的查询的其他一些问题是您缺少空格并且引号位于字符串文字内:

strOrdersSQL = strOrdersOrigSQL + " where FirstName = '"+ strFname + "'";
//                                 ^                  ^               ^

但如果变量包含引号字符或反斜杠,这仍然无法工作。

您应该使用参数化查询

,而不是尝试转义字符串

答案 2 :(得分:3)

从C#传递时,您不必担心在Sql中转义字符。

Sql为你做了

所有你需要做的事情:

string strOrdersOrigSQL = "SELECT LastName FROM Employees Where  FirstName = @FirstName" 

Nwo你可以通过SqlParameter传递@FirstName的值这将保护你从Sql注入查询

答案 3 :(得分:1)

但它可以作为

完成
string strOrdersOrigSQL = "SELECT LastName FROM Employees";
// Concatenate the default SQL statement with the "Where" clause and add an OrderBy clause
       strOrdersSQL = strOrdersOrigSQL + " where FirstName ='"+ strFname + "'";

这不是正确的方法,因为它可能会受到SQL注入的影响。改为使用参数化查询。

答案 4 :(得分:0)

首先,使用SqlCommand。但是如果您选择编写直接SQL,只要您转义输入就可以了。你应该非常小心,知道你在做什么。否则,您的代码会显示SQL Injection。这是正确的代码:

string strOrdersOrigSQL = "SELECT LastName FROM Employees ";
// Concatenate the default SQL statement with the "Where" clause and add an OrderBy clause
strOrdersSQL = strOrdersOrigSQL + "where FirstName = '" + strFname.Replace("'", "''") + "'";

假设strFname是一个变量。