我试图从基于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();
答案 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();
}
}
}
}
兴趣点:
Convert.ToInt32
更改为int.TryParse
。永远不要相信用户输入。using
接口的每个实例使用IDisposable
语句。top x
而不使用order by
子句意味着您从数据库中获取x个任意记录 - 因为数据库表本质上是无序的,并且是确保从中返回的行的顺序的唯一方法select
语句是使用order by
子句。请注意我已经猜到第二个参数是int,如果不是,则更改数据类型。