一尘不染

C#在SqlDataAdapter中使用Parameters.AddWithValue

c#

如何将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);

但是失败了。


阅读 604

收藏
2020-05-19

共1个答案

一尘不染

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

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

您曾经要求使用 AddWithValue ,但请记住,尽管这是一个有用的快捷方式,但也存在许多弊端,并且所有方面都有据可查。

因此,不带 AddWithValue 并使用Object和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 + "%";
2020-05-19