Entradas

Carga de muchos datos hacia SQL Server, desde C#

Este mes me enfrenté a la carga de grandes volúmenes de datos desde C# hacia SQL Server. Millones de registros de un solo envión y en una sola transacción. Primero intenté usar Bulk Insert , pero resultó muy lento para el requerimiento. Luego intenté con Data Tables y SQL Bulk Copy , pero se reventó por memoria. Encontré la solución en una herramienta que nunca había utilizado: yield . Esta es la versión simplificada de un método que lee archivos por bloques de 1000 registros y genera Data Tables "bajo demanda" usando yield : protected   IEnumerable < DataTable >  BuildDataTableByBatches ( StreamReader   reader ,  DataColumn []  columns ) {      var   dt  =  new   DataTable ();      foreach  ( var   col   in   columns )     {          dt . Columns . Add ( col . ColumnName ,  col . DataType );     }      int   n  =  0 ;      string   line ;      while  (( line  =  reader . ReadLine ()) !=  null )     {          n ++;          var   values  =  line . Split ( "|&q

Adviento C# 2020: Diario de ASP.NET

Este año volví tiempo completo al desarrollo Web, primero con .NET Core y ahora con .NET 5. Quiero compartir 3 cosas que aprendí y me parecen relevantes. Si logro mostrarte al menos una que no conocías, habré cumplido con el propósito de este post. 1. Inyectar el usuario Seguramente tienes varios servicios que agregas a tus controladores usando inyección de dependencias y es probable que en ellos tengas métodos como: IEnumerable<Product> GetProducts(string userId); En donde userId lo pasas desde el controlador usando algo como: var userId = User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier).Value; var products = _service.GetProducts(userId); Yo creé una extensión para usar: User.GetId(); Eso me funcionó en muchos proyectos, hasta que me topé con la implementación de un IEditableDashboardStorage para un control de DevExpress. En resumen, esa interfaz la implementas para almacenar la configuración de un dashboard que es editable por el usuario… Pero no tie