' ExecuteNonQuery:CommandText属性尚未初始化'

时间:2018-06-08 15:49:09

标签: c# asp.net sql-server

运行此代码时,会出现以下错误

  

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();

2 个答案:

答案 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() + "%')";
        }