我正在制作一个C#&管理程序。 SQL Server 2008.我想使用Blood Group,District&俱乐部名称一目了然。这就是问题所在:
SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM Table2
WHERE @Blood_Group =" + tsblood.Text + "AND @District =" + tsdist.Text +
"AND Club_Name =" + tscname.Text, Mycon1);
有人能告诉我什么是正确的语法? Tnx提前。 :)
答案 0 :(得分:7)
正确的语法是使用参数化查询,绝对不会在构建SQL查询时使用字符串连接:
string query = "SELECT * FROM Table2 WHERE BloodGroup = @BloodGroup AND District = @District AND Club_Name = @ClubName";
using (SqlDataAdapter sda = new SqlDataAdapter(query, Mycon1))
{
sda.SelectCommand.Parameters.AddWithValue("@BloodGroup", tsblood.Text);
sda.SelectCommand.Parameters.AddWithValue("@District", tsdist.Text);
sda.SelectCommand.Parameters.AddWithValue("@ClubName", tscname.Text);
...
}
这样,您的参数将被正确编码,您的代码不容易受到SQL注入攻击。结帐bobby tables
。
另请注意我如何将IDisposable资源(如SqlDataAdapter)包装到using语句中,以确保即使在异常的情况下也能正确处理它,并且您的程序不会泄漏非托管句柄。
答案 1 :(得分:1)
您忘记了AND
(以及@
前可能Club_Name
)?
String CRLF = "\r\n";
String sql = String.Format(
"SELECT * FROM Table2" + CRLF+
"WHERE @Blood_Group = {0}" + CRLF+
"AND @District = {1} " + CRLF+
"AND Club_Name = {2}",
SqlUtils.QuotedStr(tsblood.Text),
SqlUtils.QuotedStr(tsdist.Text),
SqlUtils.QuotedStr(tscname.Text));
SqlDataAdapter sda = new SqlDataAdapter(sql, Mycon1);