selectcommand - sqldataadapter c# ejemplos
c#Usando Parameters.AddWithValue en SqlDataAdapter (4)
Cómo puedo usar Parameters.AddWithValue con un SqlDataAdapter. Abajo los códigos de búsqueda.
var da = new SqlDataAdapter("SELECT * FROM annotations WHERE annotation LIKE ''%"+txtSearch.Text+"%''", _mssqlCon.connection);
var dt = new DataTable();
da.Fill(dt);
Reescribí el código así:
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);
pero falló
La cadena utilizada para inicializar SqlDataAdapter se convierte en el CommandText
de la propiedad SelectCommand de SqlDataAdapter.
Podrías agregar parámetros a ese comando con este código.
da = new SqlDataAdapter("SELECT * FROM annotations WHERE annotation LIKE @search",
_mssqlCon.connection);
da.SelectCommand.Parameters.AddWithValue("@search","%" + txtSearch.Text + "%");
- Primero, elimine la comilla simple alrededor del marcador de posición del parámetro.
- Segundo, agregue el carácter comodín directamente en el parámetro Valor de AddWithValue
Ha solicitado utilizar AddWithValue , pero recuerde que, si bien es un atajo útil, también hay numerosos inconvenientes y todos están bien documentados.
- Primero: ¿Podemos dejar de usar AddWithValue () ya? donde el autor discute cómo AddWithValue podría devolver resultados incorrectos en sus consultas
- Segundo: cómo el código de acceso a datos afecta el rendimiento de la base de datos donde el autor presenta evidencias de problemas de rendimiento sólidos para AddWithValue
Por lo tanto, el mismo código sin AddWithValue y con la sintaxis de inicializadores de objetos y colecciones podría escribirse como
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)
});
Prueba esto:
mySearchString = "Select * From test Where ([title] LIKE ''%'' + @title + ''%'')";
cmd.Parameters.Add("@title", SqlDbType.VarChar, 120);
cmd.Parameters("@title").Value = TextBox1.Text;
Use da.SelectCommand.Parameters.Add()
lugar de cmd.Parameters.Add()
, aquí hay una muestra para tratar un procedimiento almacenado que toma dos parámetros y el segundo es un parámetro int que puede cmd.Parameters.Add()
:
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;
}
}
}
Yo uso Repeater para mostrar datos
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();
}