【问题标题】:c# Using Parameters.AddWithValue in SqlDataAdapterc# 在 SqlDataAdapter 中使用 Parameters.AddWithValue
【发布时间】:2012-11-07 19:16:20
【问题描述】:

如何将 Parameters.AddWithValue 与 SqlDataAdapter 一起使用。下面搜索代码。

var da = new SqlDataAdapter("SELECT * FROM annotations WHERE annotation LIKE '%"+txtSearch.Text+"%'", _mssqlCon.connection);
var dt = new DataTable();
da.Fill(dt);

我这样重写代码:

SqlDataAdapter da;
da = new SqlDataAdapter("SELECT * FROM annotations WHERE annotation LIKE '%@search%'", _mssqlCon.connection);
da.SelectCommand.Parameters.AddWithValue("@search",txtSearch.Text);
var dt = new DataTable();
da.Fill(dt);

但它失败了。

【问题讨论】:

    标签: c# parameters ado.net sqldataadapter


    【解决方案1】:

    用于初始化 SqlDataAdapter 的字符串成为 SqlDataAdapter 的 SelectCommand 属性的 CommandText
    您可以使用此代码向该命令添加参数

    da = new SqlDataAdapter("SELECT * FROM annotations WHERE annotation LIKE @search",
                            _mssqlCon.connection);
    da.SelectCommand.Parameters.AddWithValue("@search","%" + txtSearch.Text + "%");
    
    • 首先,删除参数占位符周围的单引号。
    • 二、直接在Value参数中添加通配符 AddWithValue

    您已要求使用 AddWithValue,但请记住,虽然它是一种有用的快捷方式,但也有许多缺点,而且都有据可查。

    因此,没有 AddWithValue 并使用 Object and Collection Initializers 语法的相同代码可以写成

    da = new SqlDataAdapter("SELECT * FROM annotations WHERE annotation LIKE @search",
                            _mssqlCon.connection);
    da.SelectCommand.Parameters.Add(new SqlParameter
    {
        ParameterName = "@search",
        Value = "%" + txtSearch.Text + "%",
        SqlDbType = SqlDbType.NVarChar,
        Size = 2000  // Assuming a 2000 char size of the field annotation (-1 for MAX)
    });
    

    而且,上面的一个更简化的衬里版本是:

    da.SelectCommand.Parameters.Add("@search",SqlDbType.NVarChar,2000).Value = "%" + txtSearch.Text + "%";
    

    【讨论】:

      【解决方案2】:

      使用da.SelectCommand.Parameters.Add() 而不是cmd.Parameters.Add(),这是一个处理带有两个参数且第二个是可为空的int 参数的存储过程的示例:

      public DataTable GetData(int par1, int? par2)
      {
          using (SqlConnection conn = new SqlConnection(connectionString))
          {
              using (SqlDataAdapter da = new SqlDataAdapter())
              {
                  string sql = "StoredProcedure_name";
                  da.SelectCommand = new SqlCommand(sql, conn);
                  da.SelectCommand.CommandType = CommandType.StoredProcedure;
      
                  da.SelectCommand.Parameters.Add("@Par1", SqlDbType.Int).Value = par1;
                  da.SelectCommand.Parameters.Add("@Par2", SqlDbType.Int).Value = (object)par2?? DBNull.Value;
      
                  DataSet ds = new DataSet();
                  da.Fill(ds, "SourceTable_Name");
      
                  DataTable dt = ds.Tables["SourceTable_Name"];
      
                  //foreach (DataRow row in dt.Rows)
                  //{
                  //You can even manipulate your data here
                  //}
                  return dt;
              }
          }
      }
      

      【讨论】:

        【解决方案3】:

        试试这个:

        mySearchString = "Select * From test Where ([title] LIKE '%' + @title + '%')";
        cmd.Parameters.Add("@title", SqlDbType.VarChar, 120);
        cmd.Parameters("@title").Value = TextBox1.Text;
        

        【讨论】:

          【解决方案4】:

          我使用Repeater来显示数据

          int queryString =int.Parse(Request.QueryString["Id"]);
          
          SqlConnection conn =new SqlConnection("server=.; Database=Northwind; 
          Integrated Security=true;");
          
          try{
          conn.Open();
          
          SqlDataAdapter dataAdapter = new SqlDataAdapter("SELECT ProductID, ProductName, UnitPrice, CategoryID FROM Products WHERE CategoryID =@CategoryID", conn);
          
          dataAdapter.SelectCommand.Parameters.Add("@CategoryID", queryString);
                                  DataSet dataSet = new DataSet();
                                  dataAdapter.Fill(dataSet);
                                  QueryStringProductListRepeater.DataSource = dataSet;
                                  QueryStringProductListRepeater.DataBind();
          }
          
          catch{
          Response.Write("QueryStringProductListRepeater");
          }
          
          finally{
          conn.Close();
          }
          

          【讨论】:

            猜你喜欢
            • 2021-02-13
            • 1970-01-01
            • 2015-08-26
            • 1970-01-01
            • 2013-06-23
            • 1970-01-01
            • 2016-07-05
            • 1970-01-01
            • 2012-06-05
            相关资源
            最近更新 更多