c# - 使用带参数的存储过程修改 SqlDataSource.SelectCommand

标签 c# sql sql-server sqldatasource

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

为了测试,我这样做了,它有效,但很容易受到 SQL 注入(inject)的攻击

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

关于c# - 使用带参数的存储过程修改 SqlDataSource.SelectCommand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27745174/

相关文章:

sql - 如何获取 SQL Server 表列的约束

sql - 在存储过程中使用同义词

sql-server - Visual Studio 2013与MS SQL Server 2014不兼容

c# - .NET 中 ref 和 out 参数的区别

c# - Need Insight - 需要 webservice c# .net TO php mysql 的软件开发人员

java - Opa:它如何识别服务器端或客户端脚本

c# - 打印数据表的内容

c# - 如何在日历中保留所有日期选择?

c# - C++ 和 C# 与 Crypto 之间加密的互操作性

sql - 配置单元:无法从配置单元表中的文件插入数组和映射