''2'附近的语法不正确。'

时间:2018-05-15 17:47:29

标签: c# sql select

我试图从基于sql的用户输入&中检索没有行。在gridview中显示

请帮忙!

Int32 text = Convert.ToInt32(this.Txtusers.Text);
con.Open();
cmd = new SqlCommand("select TOP '" + text + "' * from Avaya_Id where LOB = '" + DDLOB.SelectedItem.Value + "' and Status = 'Unassigned'", con);
SqlDataReader rdr = cmd.ExecuteReader();
GridView1.DataSource = rdr;
GridView1.DataBind();
con.Close();

1 个答案:

答案 0 :(得分:3)

这是应该如何写的。

int text;
if(int.TryParse(this.Txtusers.Text, out text)
{
    using(var con = new SqlConnection(connectionString)
    {
        using(var cmd  = new SqlCommand("select TOP (@top) * from Avaya_Id where LOB = @LOB and Status = 'Unassigned'", con))
        {
            cmd.Parameters.Add("@top", SqlDbType.Int).Value = text;
            cmd.Parameters.Add("@LOB", SqlDbType.Int).Value = DDLOB.SelectedItem.Value;
            con.Open();
            using(var rdr = cmd.ExecuteReader())
            {
                GridView1.DataSource = rdr;
                GridView1.DataBind();
            }
        }
    }
}

兴趣点:

  • 使用参数来避免Sql Injection的风险。
  • Convert.ToInt32更改为int.TryParse。永远不要相信用户输入。
  • 对实现using接口的每个实例使用IDisposable语句。
  • 请注意,使用top x而不使用order by子句意味着您从数据库中获取x个任意记录 - 因为数据库表本质上是无序的,并且是确保从中返回的行的顺序的唯一方法select语句是使用order by子句。

请注意我已经猜到第二个参数是int,如果不是,则更改数据类型。