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