Solo quería compartir esta clase de Consulta y opinar sobre ella. La clase Query ayuda a ejecutar consultas en una conexión db. No he incluido la implementación, es mucho para publicar. He aquí un ejemplo de llamada, obtendrá la idea:Mi clase de consulta. ¿Su opinión?
OrdersDataTable table =
new Query(connection)
.Table("Orders")
.Fields("OrderID,CustomerID,Description,Amount")
.GreaterThan("OrderID", 1000)
.OrderBy("OrderID")
.Execute<OrdersDataTable>();
Aquí está la razones que me gusta la clase:
- No hay necesidad de escribir el código ADO.NET de comandos. Llamar a esta clase ocupa menos líneas que el equivalente de ADO.NET.
- Cada función de miembro lo devuelve para que varias llamadas se puedan encadenar juntas. No estoy seguro de si hay un nombre para este patrón. ¿Tú sabes?
- Maneja los dialectos MySql, OleDb y SqlServer.
- Me parece más legible que el equivalente de ADO.NET.
- El orden de las llamadas es irrelevante. Todos los parámetros se almacenan en búfer en colecciones internas y se leen cuando se ejecuta Execute.
- Mi escenario me obliga a comunicarme con múltiples productos de bases de datos, por lo que me gustaría escribir la consulta una vez de forma genérica y solo pasar la conexión dada. Sería un gran problema aprovechar las funciones específicas de DB, como los procesos almacenados.
Tengo un DAL que utiliza esta clase internamente. La IU realizaría una llamada al DAL, pasaría unos pocos parámetros de consulta y se devolvería la DataTable. La clase realmente ayudó a reducir la implementación de DAL de LOC y la hizo más legible.
Aquí está un ejemplo de llamada DAL:
OrdersDataTable orders = Orders.GetByOrderId(1)
Y la impl:
public static OrdersDataTable GetByOrderId(int id)
{
return
new Query(connection)
.Table("Orders")
.Fields("OrderID,CustomerID,Description,Amount")
.Equals("OrderID", id)
.Execute<OrdersDataTable>();
}
Gracias!
Editar: Gracias a todos por la gran retroalimentación. Muchos de ustedes sugirieron LinqToSql. No elegí Linq porque Microsoft actualmente solo admite el servidor Sql. Necesito consultar las tablas Jet, MySql y Sql Server.
Alguien preguntó cómo se construyen las cláusulas AND y OR. Aquí un ejemplo de cada
//and example
public static OrdersDataTable GetByOrderIdAndCustomerId(int orderId, int customerId)
{
return
new Query(connection)
.Table("Orders")
.Fields("OrderID,CustomerID,Description,Amount")
.Equals("OrderID", orderId)
.Equals("CustomerID", customerId)
.Execute<OrdersDataTable>();
}
//or example
public static OrdersDataTable GetByOrderIdOrCustomerId(int orderId, int customerId)
{
return
new Query(connection)
.Table("Orders")
.Fields("OrderID,CustomerID,Description,Amount")
.OrBegin
.Equals("OrderID", orderId)
.Equals("CustomerID", customerId)
.OrEnd
.Execute<OrdersDataTable>();
}
Por curiosidad ... Si está usando C#, ¿qué hay de malo con LINQ? –
¡Me gusta! Sería bueno si eres como yo y atrapado en 2.0. –
Me gusta. Debe saber que, si prefiere el estilo de puntos de la interfaz fluida, puede hacerlo también con Linq. –