? Sé que ha habido numerosas preguntas aquí sobre sql en línea vs procedimientos almacenados ... ¡No quiero comenzar otro así! Este es sobre sql en línea (o dinámico).¿Cuáles son las mejores prácticas en el formato de sql en línea con ADO.NET en C#
También sé que este punto se ha vuelto más o menos discutible con Linq a SQL y su Entidad marco sucesor.
Pero ... supongamos que ha elegido (o lo requieren sus superiores) para trabajar con ADO.NET normal antiguo y sql en línea (o dinámico). ¿Cuáles son entonces las mejores prácticas para esto y para formatear el sql?
Lo que hago ahora es lo siguiente: Primero me gusta crear mis sentencias de SQL en un procedimiento almacenado. Esto me da una coloración de sintaxis en SQL Server Management Studio y la capacidad de probar la consulta fácilmente sin tener que ejecutarla en código a través de la aplicación que estoy desarrollando.
Así que, mientras estoy poniendo en práctica/depuración, mi código es el siguiente:
using (SqlConnection conn = new SqlConnection("myDbConnectionString"))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "myStoredProcName";
// add parameters here
using (SqlDataReader rd = cmd.ExecuteReader())
{
// read data and fill object graph
}
}
}
Una vez que la fase de depuración y la realización de pruebas, que cambie el código anterior como esto:
using (SqlConnection conn = new SqlConnection("myDbConnectionString"))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandType = CommandType.Text;
cmd.CommandText = GetQuery();
// add parameters here
using (SqlDataReader rd = cmd.ExecuteReader())
{
// read data and fill object graph
}
}
}
Y añado un método privado adicional, por ej. GetQuery()
en la que copiar/pegar todo el bloque del procedimiento almacenado de esta manera:
private string GetQuery()
{
return @"
SET NOCOUNT ON;
SELECT col1, col2 from tableX where id = @id
-- more sql here
";
}
Trabajando como esto tiene la ventaja de que puedo volver el código fácilmente para llamar al procedimiento almacenado de nuevo si tengo que depuración/actualización el código sql más tarde, y una vez hecho, puedo volver a colocar fácilmente el código sql con copiar/pegar, sin tener que poner comillas en cada línea y cosas así.
¿Es una buena práctica incluir líneas nuevas en la consulta?
¿Hay otras cosas o trucos que no he pensado que puedan mejorar este enfoque?
¿Cómo hacen ustedes cosas como esta?
¿O soy el único que todavía usa (tiene que usar) sql en línea?
LINQ-to-SQL está ** no ** "oficialmente muerto"; todavía es un producto compatible con desarrollo continuo; simplemente, EF se está enfocando en las nuevas características. –
lo siento fue solo citar algo que encontré en otras preguntas aquí ... lo eliminé ;-) – fretje