如何将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);
但是失败了。
用于初始化 SqlDataAdapter 的字符串成为 SqlDataAdapterCommandText的SelectCommand属性的。 您可以使用以下代码向该命令添加参数
CommandText
da = new SqlDataAdapter("SELECT * FROM annotations WHERE annotation LIKE @search", _mssqlCon.connection); da.SelectCommand.Parameters.AddWithValue("@search","%" + txtSearch.Text + "%");
您曾经要求使用 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 + "%";