C# ';靠近'的语法不正确;2'';
我正在尝试从gridview中基于sql的用户输入和显示中检索行数 请帮忙C# ';靠近'的语法不正确;2'';,c#,sql,select,C#,Sql,Select,我正在尝试从gridview中基于sql的用户输入和显示中检索行数 请帮忙 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); SqlDa
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();
下面是应该如何写的
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注入的风险
- 将
更改为Convert.ToInt32
。永远不要相信用户的输入int.TryParse
- 对实现
接口的每个实例使用IDisposable
语句using
- 请注意,使用
而不使用top x
子句意味着您从数据库中获得x条任意记录,因为数据库表本质上是无序的,确保从order by
语句返回的行顺序的唯一方法是使用select
子句order by
请注意,我猜第二个参数是int,如果不是,请更改数据类型。打印
cmd
并将其包含在问题中。选择顶部“2”…
应该是选择顶部2…
(不带引号)以类型1结尾TOP
需要一个数字,但可以在单引号中设置text
。2.您的代码对用户开放。请使用参数化查询,而不是将用户输入直接放入查询字符串中!如果使用,可以将参数参数化为TOP
,如和所示。另请参见,以了解为什么应始终使用参数化SQL查询,而不是使用用户输入直接构造查询。