public bool CheckSqlInyection(object[] _campos, string _condicion) { string campo; bool peligro = false; if ((_condicion.Contains(';')) || (_condicion.Contains("--")) || (_condicion.Contains("/*")) || (_condicion.Contains("*/")) || (_condicion.Contains("xp_")) || (_condicion.Contains("XP_"))) { peligro = true; GestionExcepcionWeb.WriteLog("***PELIGRO: INTENTO DE ATAQUE INYECCIÓN SQL:***"); GestionExcepcionWeb.WriteLog("Valor Condicíon SQL: " + _condicion); } if ((_campos != null) && (!peligro)) { foreach (object item in _campos) { campo = item.ToString(); if ((campo.Contains(';')) || (campo.Contains("--")) || (campo.Contains("/*")) || (campo.Contains("*/")) || (campo.Contains("xp_")) || (campo.Contains("XP_")) || (campo.Contains('\''))) { peligro = true; GestionExcepcionWeb.WriteLog("***PELIGRO: INTENTO DE ATAQUE INYECCIÓN SQL:***"); GestionExcepcionWeb.WriteLog("Valor Campo SQL: " + campo); break; } } } return(peligro); }
/// <summary> /// Este método ejecuta una sentencia sql en la B.D. /// </summary> /// <param name="sentencia">Cadena de caracteres con la sentencia sql (insertar, consultar, borrar...)</param> /// <returns>Devuelve el resultado de cada sentencia en una Lista de Array de Objects.</returns> public FilasDB Ejecuta(string sentencia) { FilasDB filas = new FilasDB(); using (SqlCommand cmd = new SqlCommand()) { cmd.Connection = conex; cmd.CommandText = sentencia; if (transaction != null) {//Si se creó una transacción para la conexión. cmd.Transaction = transaction; } try { using (SqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { Object[] campos = new object[reader.FieldCount]; reader.GetValues(campos); filas.Add(campos); } //reader.Close(); No se pone porque al acabar el using, se llama a reader.Dispose() //que a su vez llama a reader.Close(); } } catch (Exception ex) { //Título en el archivo de Logs para separar por párrafos todos los mensajes //que pertenecen a la misma operación. GestionExcepcionWeb.WriteLog("ERROR SQL SERVER:"); GestionExcepcionWeb ge = new GestionExcepcionWeb(ex); ge.Log(); if (transaction != null) {//Si se están ejecutando los comandos SQL dentro de una transacción, si se produce alguna Excepción en algún //comando, hay que lanzar una excepción para recogerla desde el código que utiliza el objeto 'AccesoSql' y capturarla //para ejecutar el método 'RollBack()' de este objeto. GestionExcepcionWeb.WriteLog("FALLO EN TRANSACCIÓN SQL: La siguiente operación no se pudo completar con éxito: \n" + cmd.CommandText); throw new TransactionSqlException("No se pudo completar la Transacción Sql con éxito."); } } return(filas); } }
public bool RollBackTransaction() { if (transaction != null) { try { transaction.Rollback(); return(true); } catch (Exception ex) { GestionExcepcionWeb.WriteLog(ex); } } return(false); }
//Este método crea una Transaccion SQL para la conexion y se guarda como un campo de este objeto 'AccesoSql'. public bool BeginTransaction(IsolationLevel isolationLevel = IsolationLevel.ReadCommitted) { if (transaction == null) {//Solo puede haber una Transacción creada por objeto 'AccesoSql', si ya existe una, no se crea otra. try { transaction = conex.BeginTransaction(isolationLevel); return(true); } catch (Exception ex) { GestionExcepcionWeb.WriteLog(ex); } } return(false); }
public bool CommitTransaction() { if (transaction != null) { try { transaction.Commit(); return(true); } catch (Exception ex) { GestionExcepcionWeb.WriteLog(ex); } } return(false); }