运行此代码时,会出现以下错误
ExecuteNonQuery:CommandText属性尚未初始化
代码:
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
if (Request.QueryString["search"] != null)
{
cmd.CommandText = "Select * from Products where ProductName like('%" + Request.QueryString["search"].ToString() + "%')";
}
cmd.ExecuteNonQuery();
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
dlProduct.DataSource = dt;
dlProduct.DataBind();
con.Close();
答案 0 :(得分:3)
如果您没有search
查询字符串参数,则会发生这种情况 - 您永远不会分配给CommandText
。
但是:请请永远不要写这样的代码;这是一个SQL注入漏洞,可以让任何人轻松拥有您的数据库。请使用ADO.NET参数或为您执行此操作的数据访问工具。
示例:
string q = Request.QueryString["search"] ?? "";
cmd.CommandText = "Select * from Products where ProductName like N'%' + @q + N'%'";
cmd.Parameters.AddWithValue("@q", q);
另外:cmd.ExecuteNonQuery();
没有任何用处 - 所以只需扔掉它。
答案 1 :(得分:0)
由于您有条件地设置CommandText并且条件为false,这就是您收到错误的原因。确保您在querystring中搜索并使用参数化查询,而不是在查询中嵌入值以防止sql注入
if (Request.QueryString["search"] != null)
{
cmd.CommandText = "Select * from Products where ProductName like('%" + Request.QueryString["search"].ToString() + "%')";
}