El paso a paso o código que hallarás en este artículo es la resolución más eficiente y efectiva que encontramos a tus dudas o problema.
Solución:
los string utilizado para inicializar el 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.
- En segundo lugar, agregue el carácter comodín directamente en el parámetro Valor de AddWithValue
Has pedido usar AñadirConValorpero recuerda que, si bien es un atajo útil, también existen numerosos inconvenientes y todos bien documentados.
- Primero: ¿Podemos dejar de usar AddWithValue() ya? donde el autor discute cómo AñadirConValor podría devolver resultados erróneos 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 fuertes problemas de rendimiento para
AñadirConValor
Entonces, el mismo código sin AñadirConValor y el uso de 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)
);
y, una versión aún más simplificada y de una sola línea de lo anterior es:
da.SelectCommand.Parameters.Add("@search",SqlDbType.NVarChar,2000).Value = "%" + txtSearch.Text + "%";
Usar da.SelectCommand.Parameters.Add()
en vez de cmd.Parameters.Add()
aquí hay una muestra para tratar con un procedimiento almacenado que toma dos parámetros y el segundo es un parámetro int anulable:
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;