我试图在我的应用程序中创建一个搜索框,为此,我需要修改SqlDataSource.SelectCommand。我将不胜感激!

为了进行测试,我这样做是可行的,但它很容易受到sql注入的攻击

   SqlDataSource1.SelectCommand = "sp_offer_search '" + txtSearch.Text + "', " +   Session["customerId"] + " , '" + "Pending"+ "'";
   GridView1.DataBind();


这是我到目前为止尝试过的,但是没有用:

 if (txtSearch.Text != "")
        {
         //open connection
          oCn.Open();
          SqlCommand com = new SqlCommand(query, oCn);
          com.CommandType = CommandType.StoredProcedure;

          com.Parameters.AddWithValue("@Variable", txtSearch.Text);
          com.Parameters.AddWithValue("@CustomerId",Session["customerId"]);
          com.Parameters.AddWithValue("@Status", txtStatus.Text);


            DataTable dt = new DataTable();
            dt.Load(com.ExecuteReader());

            SqlDataSource1.SelectCommand = dt.ToString();
            GridView1.DataBind();
       }

最佳答案

如果GridView数据源设置为SqlDataSource1,则不需要DataTable。而且DataTable.ToString()不是selectCommand。尝试:

 if (txtSearch.Text != "")
    {
      SqlCommand com = new SqlCommand(query, oCn);
      com.CommandType = CommandType.StoredProcedure;

      com.Parameters.AddWithValue("@Variable", txtSearch.Text);
      com.Parameters.AddWithValue("@CustomerId",Session["customerId"]);
      com.Parameters.AddWithValue("@Status", txtStatus.Text);

      SqlDataSource1.SelectCommand = com;
      GridView1.DataBind();
   }

10-06 07:54