/// <summary> /// Crea un nuevo registro en la base de datos según los parámetros enviados /// </summary> /// <param name="tabla"></param> /// <param name="parametros"></param> /// <returns></returns> public static int Insertar(string tabla, Dictionary <string, object> parametros) { int idRegistro = 0; // El id del registro insertado object valor = ""; // El valor del parámetro al recorrer el diccionario string campos = "", valores = ""; // Mapeo de campos y parámetros para construir SQL Conexion conex = Conexion.ObtenerInstancia(); // Obtener la instancia de la clase Conexión OleDbConnection cnx = conex.ObtenerConexion(); // Obtener la conexión a la BD OleDbParameter[] dbParams = new OleDbParameter[parametros.Count]; // Crear el arreglo para los parámetros int i = 0; foreach (string key in parametros.Keys) // Recorrer los parámetros y asignar datos a variables { valor = parametros[key]; // Asignar el valor del parámetro dbParams[i] = new OleDbParameter($"{key}", Ejecutor.ConvertirTipo(valor), Ejecutor.ObtenerLongitud(valor)); // Crear el parámetro para SQL campos += $"{key}"; // El nombre del campo valores += "?"; // Se agrega uno por cada parámetro i++; if (i < parametros.Count) // Si no se ha llegado al último parámetro, se agrega ',' a los campos y parámetros { campos += ","; valores += ","; } } cnx.Open(); // Abrir la conexión using (OleDbCommand cmd = cnx.CreateCommand()) { try { cmd.CommandText = $"INSERT INTO {tabla} ({campos}) VALUES ({valores})"; // Consulta SQL cmd.Parameters.AddRange(dbParams); // Agregar los parámetros al comando foreach (var p in parametros) // Agregar los valores de los parámetros { cmd.Parameters[p.Key].Value = p.Value ?? DBNull.Value; } cmd.Prepare(); // Preparar la instrucción sql cmd.ExecuteNonQuery(); // Ejecutar el SQL cmd.CommandText = "SELECT @@Identity"; // Consulta para obtener el último registro insertado idRegistro = (int)cmd.ExecuteScalar(); // Obtener el id del registro insertado } catch (Exception ex) { Debug.WriteLine($"Error: {ex.Message}"); // Mostrar mensaje de error en caso que haya } } return(idRegistro); // Devolver ID del registro insertado }
/// <summary> /// Modifica datos de la base de datos según los parámetros enviados /// </summary> /// <param name="tabla"></param> /// <param name="parametros"></param> /// <param name="condiciones"></param> /// <returns></returns> public static bool Actualizar(string tabla, Dictionary <string, object> parametros, string condiciones) { bool resultado = false; object valor = ""; // El valor del parámetro al recorrer el diccionario string valoresParams = ""; // Variable para asignar el nombre del campo y su parámetro Conexion conex = Conexion.ObtenerInstancia(); // Obtener la instancia de la clase Conexión OleDbConnection cnx = conex.ObtenerConexion(); // Obtener la conexión a la BD OleDbParameter[] dbParams = new OleDbParameter[parametros.Count]; // Crear el arreglo para los parámetros int i = 0; foreach (string key in parametros.Keys) { valor = parametros[key]; // Asignar el valor del parámetro dbParams[i] = new OleDbParameter($"{key}", Ejecutor.ConvertirTipo(valor), Ejecutor.ObtenerLongitud(valor)); // Crear el parámetro para SQL valoresParams += $"{key} = ?"; // El nombre del campo con su parámetro i++; if (i < parametros.Count) { valoresParams += ","; } } cnx.Open(); // Abrir la conexión using (OleDbCommand cmd = cnx.CreateCommand()) { try { cmd.CommandText = $"UPDATE {tabla} SET {valoresParams} WHERE {condiciones}"; // Consulta SQL cmd.Parameters.AddRange(dbParams); // Agregar los parámetros al comando foreach (var p in parametros) // Agregar los valores de los parámetros { cmd.Parameters[p.Key].Value = p.Value ?? DBNull.Value; } cmd.Prepare(); // Preparar la instrucción sql resultado = cmd.ExecuteNonQuery() == 1 ? true : false; // Ejecutar el SQL } catch (Exception ex) { Debug.WriteLine($"Error: {ex.Message}"); // Mostrar mensaje de error en caso que haya } return(resultado); } }