27 c# parameters ado.net sqldataadapter
如何将Parameters.AddWithValue与SqlDataAdapter一起使用.下面搜索代码.
var da = new SqlDataAdapter("SELECT * FROM annotations WHERE annotation LIKE '%"+txtSearch.Text+"%'", _mssqlCon.connection);
var dt = new DataTable();
da.Fill(dt);
Run Code Online (Sandbox Code Playgroud)
我重写了这样的代码:
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);
Run Code Online (Sandbox Code Playgroud)
但它失败了.
Ste*_*eve 68
用于初始化SqlDataAdapter的字符串成为SqlDataAdapterCommandText
的SelectCommand属性.
您可以使用此代码向该命令添加参数
da = new SqlDataAdapter("SELECT * FROM annotations WHERE annotation LIKE @search",
_mssqlCon.connection);
da.SelectCommand.Parameters.AddWithValue("@search","%" + txtSearch.Text + "%");
Run Code Online (Sandbox Code Playgroud)
您已经要求使用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)
});
Run Code Online (Sandbox Code Playgroud)
使用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 = "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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
62725 次 |
最近记录: |