[Update 11-Aug-2012: Si quiere saber mas sobre la arquitectura en la que esta basado el DataSet/DbDataAdapter puede ver el siguiente post: Are Typed DataSets dead? Si quiere saber mas sobre optimizar el llenado de los DataSet sin DbDataAdapter puede visitar el siguiente post: Filling a DataSet with the Data Application Block]
Hola a todos,
Un lector del blog me hace la siguiente pregunta:
en que casos se debe usar un SqlCommand o un SqlDataAdapter; Solo con el SqlDataAdapter pude hacer una consulta general
Un SqlCommand se utiliza cuando necesitas ejecutar un tipo de sentencia Sql a la base de datos (los tipos pueden ser: Delete, Update, Insert o Select). Por su parte el SqlDataAdapter se utiliza si requieres ejecutar más de un tipo de sentencia Sql o si trabajarás en escenarios desconectados.
Ejemplo de SqlCommand:
public List Listar()
{
SqlConnection con = new SqlConnection(cadenaConexion);
SqlCommand com = new SqlCommand("LISTAR_CAMPANAS", con);
com.CommandType = System.Data.CommandType.StoredProcedure;
con.Open();
SqlDataReader drCampanas = com.ExecuteReader();
List listaCampanas = new List();
while (drCampanas.Read())
{
listaCampanas.Add(Cargar(drCampanas));
}
drCampanas.Close();
con.Close();
return listaCampanas;
}
Ejemplo de SqlDataAdapter (basado en el ejemplo anterior pero levemente modificado):
public List Listar()
{
SqlConnection con = new SqlConnection(cadenaConexion);
SqlCommand com = new SqlCommand("LISTAR_CAMPANAS", con);
com.CommandType = System.Data.CommandType.StoredProcedure;
SqlDataAdapter da = new SqlDataAdapter(com);
con.Open();
SqlDataReader drCampanas = da.SelectCommand.ExecuteReader();
List listaCampanas = new List();
while (drCampanas.Read())
{
listaCampanas.Add(Cargar(drCampanas));
}
drCampanas.Close();
con.Close();
return listaCampanas;
}
En el ejemplo anterior se muestra como un SqlDataAdapter puede contener a un SqlCommand (llamado «com» en el ejemplo) que representa una sentencia Select; de igual forma, se puede agregar comandos que representen las sentencias Insert, Update y Delete utilizando sus respectivas propiedades:
SqlCommand dummyCommand = new SqlCommand();
da.UpdateCommand = dummyCommand;
da.DeleteCommand = dummyCommand;
da.InsertCommand = dummyCommand;
Si no necesitas trabajar en escenarios desconectados y si solo necesitas utilizar un comando a la vez, utiliza un SqlCommand, de lo contrario un SqlDataAdapter.
Javier Andrés Cáceres Alvis
Microsoft Most Valuable Professional – MVP
Intel Black Belt Software Developer