c#在SqlDataAdapter中使用Parameters.AddWithValue
如何将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的字符串成为SqlDataAdapter的SelectCommand属性的CommandText
。
您可以使用此代码向该命令添加参数
da = new SqlDataAdapter("SELECT * FROM annotations WHERE annotation LIKE @search", _mssqlCon.connection); da.SelectCommand.Parameters.AddWithValue("@search","%" + txtSearch.Text + "%");
- 首先,删除参数占位符周围的单引号。
- 其次,直接在AddWithValue的Value参数中添加通配符
您已经要求使用AddWithValue ,但请记住,虽然它是一个有用的快捷方式,但也有许多缺点,并且都有很好的文档记录。
- 第一: 我们可以停止使用AddWithValue()吗? 作者讨论了AddWithValue如何在查询中返回错误结果
- 第二: 数据访问代码如何影响数据库性能 ,其中作者为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()
而不是cmd.Parameters.Add()
,这里有一个处理存储过程的示例,它接受两个参数,第二个是可以为null的int参数:
public DataTable GetData(int par1, int? par2) { using (SqlConnection conn = new SqlConnection(connectionString)) { using (SqlDataAdapter da = new SqlDataAdapter()) { string sql = "StoreProcedure_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; } } }
试试这个:
mySearchString = "Select * From test Where ([title] LIKE '%' + @title + '%')"; cmd.Parameters.Add("@title", SqlDbType.VarChar, 120); cmd.Parameters("@title").Value = TextBox1.Text;
我使用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(); }