2011-10-15 37 views
9

todos soy un estudiante y nuevo en .NET y especialmente desarrollo de MVC3 pero para uno de mis proyectos tengo que trabajar para resolverlo y pasar por la fase de aprendizaje Problema y confusión que estoy enfrentando en relación con DB-conectividad, whast I leanree D con respecto a la recuperación de registros de una base de datos es algo como esto:Confundido entre SqlCommand y SqlDataAdapter

//Method One: 
var conn = new SqlConnection(conString.ConnectionString); 
const string cmdString = "Select * FROM table"; 
var cmd = new SqlCommand(cmdString, conn); 
var mySqlDataAdapter = new SqlDataAdapter(cmd); 
mySqlDataAdapter = new SqlDataAdapter(cmd); 
mySqlDataAdapter.Fill(myDataSet, "design"); 
// making a new SqlCommand object with stringQuery and SqlConnection object THEN a new SqlDataAdapter object with SqlCommand object and THEN filling up the table with the resulting dataset. 

Pero mientras que yo era la salida MSDN Library descubrí que SqlDataAdapter ofrece a los constructores SqlDataAdapter (String, String) que directa toma un SelectCommand y una cadena de conexión para iniciar, omitiendo el rol de SqlCommand en el medio, como este:

//Method Two: 
var conn = new SqlConnection(conString.ConnectionString); 
const string cmdString = "Select * FROM table"; 
var mySqlDataAdapter = new SqlDataAdapter(cmdString, conn); 
mySqlDataAdapter.Fill(myDataSet, "design"); 

Parece corto y bonito para mí, pero estoy confundido aquí que si esto es posible de esta manera, entonces ¿por qué la mayoría de los libros/maestros pasan antes (forma de SqlCommand).

  • ¿Cuál es la diferencia entre SqlCommand y SqlDataAdapter?
  • ¿Qué método es mejor uno o dos?
  • ¿Tengo miedo de estar usando un atajo en el método dos que podría afectar la seguridad o el rendimiento?

¡Disculpa de antemano si me suena muy novato o borroso! Apreciaré cualquier ayuda que pueda aclarar mis conceptos! ¡Gracias! :)

Respuesta

7

Errorstacks resume bien:

  • SqlAdapter se utiliza para llenar un conjunto de datos.
  • SqlCommand se puede usar para cualquier propósito que tenga en mente relacionado con las operaciones Crear/Leer/Actualizar/Eliminar, la ejecución de procedimientos almacenados y mucho más.

Además:

  • SqlCommand puede tener una gran ventaja contra el uso de cadenas primas en lo que respecta a la seguridad - que usted puede proteger desde SQL Inyecciones. Simplemente use parámetros para los valores proporcionados por el usuario en lugar de string.Format (...).

Mi preferencia personal es ajustar CUALQUIER cadena sql en SqlCommand y agregarle SqlParameters para evitar la inyección Sql por parte de usuarios malintencionados.
En cuanto al rendimiento de los dos enfoques, no espero que haya ninguna diferencia. (Si alguien puede probar que estoy equivocado, ¡hazlo!).
Así que sugeriría que se quede con la variante más larga 1 y use comandos más parámetros si es necesario.

Una pequeña nota al margen: los datasets y DataTables están un poco fuera de juego recientemente debido a Linq2Sql y Entity Framework.
Pero, por supuesto, el conocimiento de simples antiguos SqlCommands/Adapters/Readers es bienvenido :)

-6

¡Rápido! ¡¡¡Dirige tu atención a LINQ !!!

No más cosas gran'ma como SQLDataset o TableAdapters, no hay conexión abierta. Todo se suaviza con LINQ.

muestra

LINQ:

tenue resultado = DE EMP en myDataContext.Employees donde emp.Salary> 10000 Seleccionar emp.ID, emp.SurName, ....

myDatagrid.datasource = resultado .toList

con LINQ, usted no tiene que preocuparse por comillas simples o CRLF dentro de sus consultas ...

y usted incluso tener intelliSense en el SQL tablas, columnas y objetos!

+0

Eso no respondió la pregunta. Además, a veces LINQ no está disponible. Por ejemplo, no está disponible en la versión de .NET CE antes de la versión 3.5. –

Cuestiones relacionadas