3

我正在使用 C# 和 SQL Server 2008 制作一个管理程序。我想一次使用 Blood Group、District 和 Club Name 搜索记录。这就是产生问题的原因:

    SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM Table2 
    WHERE @Blood_Group =" + tsblood.Text + "AND @District =" + tsdist.Text + 
    "AND  Club_Name =" + tscname.Text, Mycon1);

谁能告诉我正确的语法是什么?提前Tnx。:)

4

2 回答 2

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 语句中,以确保即使在出现异常的情况下也能正确处理它,并且您的程序不会泄漏非托管句柄。

于 2013-02-24T16:20:28.130 回答
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);
于 2013-02-24T17:01:22.333 回答