C#中SQL的转义字符

我想在我的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'; 

但它可以做到

 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注入的影响。 请改用参数化查询。

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

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

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

Sql为你做到了

所有你需要做的事情:

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

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

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

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

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

您应该使用参数化查询,而不是尝试转义字符串。

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

 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是一个变量。