Este proyecto realiza la carga de departamentos y ciudades de Colombia a una base de datos SQL Server a partir de un archivo CSV. Utiliza C# con CsvHelper para leer los datos y SqlBulkCopy para insertar eficientemente las ciudades.
Este proyecto utiliza información pública proporcionada por el Departamento Administrativo Nacional de Estadística (DANE) y el Ministerio de Tecnologías de la Información y las Comunicaciones (MINTIC) de Colombia. Los datos corresponden a la división político-administrativa del país e incluyen la relación entre departamentos y municipios.
La información se obtiene del conjunto de datos titulado "Departamentos y municipios de Colombia", disponible en la plataforma de datos abiertos del gobierno colombiano:
🔗 Departamentos y municipios de Colombia
- Última actualización: 20 de abril de 2024
- Fuente: Departamento Administrativo Nacional de Estadística (DANE)
- Propietario: Ministerio de Tecnologías de la Información y las Comunicaciones (MINTIC)
- Frecuencia de actualización: Anual
- Licencia: Creative Commons Attribution | Share Alike 4.0 International
El conjunto de datos contiene 1,123 filas y 5 columnas, organizadas de la siguiente manera:
| Columna | Descripción | Tipo de Dato |
|---|---|---|
| REGION | Nombre de la región | Texto |
| CÓDIGO DANE DEL DEPARTAMENTO | Código DANE del departamento | Número |
| DEPARTAMENTO | Nombre del departamento | Texto |
| CÓDIGO DANE DEL MUNICIPIO | Código DANE del municipio | Número |
| MUNICIPIO | Nombre del municipio | Texto |
Este código permite la transformación de estos datos en una estructura normalizada dentro de una base de datos SQL Server, almacenando los departamentos en la tabla TERRITORIAL.STATES y los municipios en TERRITORIAL.CITIES, asegurando la integridad y facilitando futuras consultas.
El archivo CSV debe contener los siguientes campos:
REGION,CÓDIGO DANE DEL DEPARTAMENTO,DEPARTAMENTO,CÓDIGO DANE DEL MUNICIPIO,MUNICIPIO
Región Eje Cafetero - Antioquia,5,Antioquia,5.001,Medellín
Región Eje Cafetero - Antioquia,5,Antioquia,5.002,Abejorral
Región Centro Oriente,15,Boyacá,15.832,Tununguá
- C# .NET para la implementación del cargador de datos.
- CsvHelper para la lectura del archivo CSV.
- SQL Server como base de datos destino.
- SqlBulkCopy para inserciones masivas de ciudades.
Antes de crear las tablas, asegúrate de que el esquema TERRITORIAL exista en la base de datos. Si no existe, créalo con el siguiente comando:
CREATE SCHEMA TERRITORIAL;
GOA continuación, se presentan las sentencias SQL para crear las tablas que almacenarán los departamentos y municipios:
CREATE TABLE TERRITORIAL.STATES (
StateId UNIQUEIDENTIFIER DEFAULT (NEWID()) NOT NULL,
StateCode VARCHAR(10) NOT NULL,
Name VARCHAR(100) NOT NULL,
CONSTRAINT PK_States PRIMARY KEY (StateId),
CONSTRAINT UQ_States_StateCode UNIQUE (StateCode)
);
CREATE TABLE TERRITORIAL.CITIES (
CityId UNIQUEIDENTIFIER DEFAULT (NEWID()) NOT NULL,
CityCode VARCHAR(10) NOT NULL,
Name VARCHAR(100) NOT NULL,
StateId UNIQUEIDENTIFIER NOT NULL,
CONSTRAINT PK_Cities PRIMARY KEY (CityId),
CONSTRAINT FK_Cities_States FOREIGN KEY (StateId)
REFERENCES TERRITORIAL.STATES (StateId) ON DELETE CASCADE,
CONSTRAINT UQ_Cities_CityCode UNIQUE (CityCode)
);- Leer el CSV usando CsvHelper.
- Crear un diccionario de departamentos para evitar duplicados.
- Insertar los departamentos en la base de datos.
- Realizar una carga masiva de las ciudades utilizando SqlBulkCopy.
- Instalar dependencias:
dotnet add package CsvHelper
- Modificar la conexión a la base de datos en
connectionString. - Ejecutar el programa:
dotnet run
- Se asegura que no haya duplicados mediante restricciones
UNIQUEenStateCodeyCityCode. - Se utiliza
GUIDpara los identificadores primarios.