我想在我的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';
答案 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是一个变量。