lunes, 24 de diciembre de 2018

Mensaje de error Visual Studio 2012: configuring web for asp.net 4.5 failed you must manually configure

Tuve un problema en Visual Studio 2012 al intentar crear un nuevo proyecto MVC 4, me mostraba un mensaje de error donde indicaba que había problemas en la configuración web para asp.net 4.5 y que debía configurar manualmente el sitio:

"configuring web for asp.net 4.5 failed you must manually configure this site for ASP.net 4.5. ... "



Yo descargué una actualización para solucionar el problema del Microsoft Visual Studio 2012, la actualización es KB3002339, http://support.microsoft.com/kb/3002339. El enlace para la descara directa es: http://download.microsoft.com/download/A/0/2/A02C37E0-77F7-448A-BD5C-F66AB1F78DBC/VS11-KB3002339.exe
Posted by InfoTacticas Soluciones  |  No comments

12/24/2018 04:40:00 p. m. Share:

domingo, 9 de diciembre de 2018

Insertar varias filas con una sola consulta

Puede hacerse de alguna de las siguientes maneras:

--
--
INSERT INTO tabla (campo1, campo2) VALUES ('f1c1', 'f1c2'), ('f2c1', 'f2c2'),('f3c1', 'f3c2');



--
--
INSERT INTO MyTable (FirstCol, SecondCol)
SELECT 'f1c1' , 'f1c2'
UNION ALL
SELECT 'f2c1' , 'f2c2'
UNION ALL
SELECT 'f3c1' , 'f3c2'
UNION ALL
SELECT 'f4c1' , 'f4c2'
UNION ALL
SELECT 'f5c1' , 'f5c2'
GO


Posted by InfoTacticas Soluciones  |  No comments

12/09/2018 03:34:00 p. m. Share:

miércoles, 28 de noviembre de 2018

ORM en desarrollo de aplicaciones

Un ORM, en el desarrollo de aplicaciones con acceso a base de datos, simplifica el trabajo del desarrollo de este tipo de aplicaciones enormemente. En el desarrollo de este tipo de aplicaciones se requiere realizar un mapeo, que consiste en transformar la información de la base de datos en tablas a objetos de la aplicación y viceversa. Entonces, ¿Qué es un ORM? Un ORM es el responsable del mapeo automático.

ORM procede de las siglas Object Relational Mapping. El trabajo deja de ser manual ya que el ORM lo realizará de forma independiente de la base de datos. Además, gracias al mapeo automático podrás cambiar de motor de base de datos fácilmente y cuando quieras.

El ORM es un modelo de programación que transforma las tablas de una base de datos en entidades para simplificar enormemente la tarea del programador.

Un ORM es una biblioteca especializada en acceso a datos que genera por ti todo lo necesario para conseguir que no tengas conceptos "extraños" de bases de datos en tu código orientado a objetos. En la práctica para ti la base de datos es como si no existiera.

Un ORM (Object Relational Mapping) es un tipo de biblioteca de acceso a datos que intenta hacer que esta tarea sea más natural para los desarrolladores. Así, a la hora de acceder a datos, en lugar de utilizar otro lenguaje (generalmente SQL), un ORM permite que puedas utilizar los paradigmas habituales de la programación orientada a objetos: clases y objetos. En lugar de pensar en tablas y relaciones, piensas en objetos y propiedades.

Ventajas y desventajas de un ORM
  • Ventajas
    • No tienes que escribir código SQL
    • Algo que muchos programadores no dominan y que es bastante complejo y propenso a errores. Ya lo hacen por nosotros los ORM.
    • Facilidad y velocidad de uso
    • Un ORM, nos facilita las labores básicas de cualquier acceso a datos , el CRUD (Create, Read, Update y Delete). Realizando todas estas labores a través de un lenguaje de alto nivel orientado a objetos.
    • Abstracción de la base de datos usada.
    • Por ejemplo, si se usaran instruciones SQL desde la aplicación en vez de ORm, listar los 10 primeros registro de una tabla conlleva a usar diferentes sintaxis en las bases de datos MS-SQL SERVER, ORACLE o MySQL. El ORM al tener un capa intermedia, abstrae al programador de la base de datos y le centra en el desarrollo de la aplicación.
    • Seguridad de la capa de acceso a datos contra ataques.
    • Se encargan de evitar posibles ataques de inyección SQL y similares.
  • Desventajas
    • En entornos con gran carga poner una capa más en el proceso puede mermar el rendimiento.
    • En general una consulta SQL directa será más eficiente siempre.
    • Aprender el nuevo lenguaje del ORM.
    • La configuración inicial que requieren se puede complicar dependiendo de la cantidad de entidades que se manejen y su complejidad, del gestor de datos subyacente, etc...

Uno de los mapeos automáticos más utilizados es de JAVA y se llama Hibernate, pero también están iBatis, Ebean, para .NET nHibernate, Entity Framework, o para PHP Doctrine y Propel, entre otros.

Para profundizar más puede acceder a:
https://www.campusmvp.es/recursos/post/que-es-un-orm.aspx

Posted by InfoTacticas Soluciones  |  2 comments

11/28/2018 03:02:00 p. m. Share:

jueves, 10 de mayo de 2018

Listar las tablas de una base de datos, su tamaño en disco, de los datos e indices

Para listar las tablas de una base de datos con información de su tamaño en disco, de los datos e indices y del número de filas se puede hacer uso del siguiente script:
--
--

--

--Cursor que contiene todos los objetos que ocupan espacio
DECLARE objects_cursor CURSOR LOCAL FAST_FORWARD READ_ONLY for
      SELECT s.name + '.' + o.name from sys.schemas s
      INNER JOIN sys.objects o
      ON o.schema_id = s.schema_id
      WHERE
            o.type = 'S' or --Tablas de sistema
            o.type = 'U' or --Tablas de usuario
            o.type = 'V' or --Vistas (solo las indexadas devuelven tamaño)
            o.type = 'SQ' or --Cola de servicio
            o.type = 'IT' -- Tablas internas usadas p.e. por el Service Broker o los indices XML
--Tabla temporal para albergar los resultados
CREATE TABLE #results
      (name_with_schema SYSNAME,
   name SYSNAME, rows CHAR(11),
      reserved VARCHAR(18), data VARCHAR(18),
      index_size VARCHAR(18),Unused VARCHAR(18))

DECLARE @resultado AS TABLE
      (name SYSNAME, rows CHAR(11),
      reserved VARCHAR(18), data VARCHAR(18),
      index_size VARCHAR(18),Unused VARCHAR(18))
--Recorremos el cursor obteniendo la información de espacio ocupado
DECLARE @object_name AS SYSNAME
OPEN objects_cursor
FETCH NEXT FROM objects_cursor
INTO @object_name;
WHILE @@FETCH_STATUS = 0
BEGIN
      INSERT INTO @resultado
            EXEC sp_spaceused @object_name
   
   INSERT INTO #results
   SELECT @object_name, x.* 
   from @resultado as x

   delete from @resultado
   
      FETCH NEXT FROM objects_cursor
            INTO @object_name;    
END;
CLOSE objects_cursor;
DEALLOCATE objects_cursor;
-- Quitamos "KB" para poder ordenar
UPDATE
  #results
SET
  reserved = LEFT(reserved,LEN(reserved)-3),
  data = LEFT(data,LEN(data)-3),
  index_size = LEFT(index_size,LEN(index_size)-3),
  Unused = LEFT(Unused,LEN(Unused)-3)
--Ordenamos la información por el tamaño ocupado
SELECT
  name_with_schema,
  Name,
  reserved AS [Tamaño en Disco (KB)],
  data AS [Datos (KB)],
  index_size AS [Indices (KB)],
  Unused AS [No usado (KB)],
  Rows AS Filas FROM #results
ORDER BY
    name_with_schema,
 name,
  CONVERT(bigint, reserved) DESC

drop table #results


indices sql server
Posted by InfoTacticas Soluciones  |  No comments

5/10/2018 12:11:00 a. m. Share:

lunes, 7 de mayo de 2018

Deshabilitar o Habilitar todos los triggers de la base de datos sql server

A continuación muestro un procedimiento almacenado que permite habilitar o deshabilitar todos los triggers de una base de datos, de acuerdo al parámetro booleano: HABILITAR
--
--

CREATE PROCEDURE [dbo].[PROC_HABILITAR_DESHABILITAR_TRIGGERS_BASE]
@HABILITAR bit = 1
AS

 DECLARE @string VARCHAR(8000)
 DECLARE @NombreTabla NVARCHAR(500)
 DECLARE @NombreEsquema NVARCHAR(500)
 DECLARE @instruccion NVARCHAR(500)
 SET @instruccion = CASE WHEN @HABILITAR = 1 THEN 'ENABLE' ELSE 'DISABLE' END

 DECLARE cur CURSOR
 FOR SELECT DISTINCT  sch.name AS nombre_esquema, ta.name as 'nombre_tabla'
 FROM    sys.objects tr
 INNER JOIN sys.schemas sch ON tr.schema_id = sch.schema_id
 inner join  sys.objects ta on tr.parent_object_id = ta.object_id
 where tr.type = 'TR'
 order by sch.name, ta.name

 
 OPEN cur
 FETCH next FROM cur INTO @NombreEsquema, @NombreTabla 
 WHILE @@fetch_status = 0
 BEGIN
 SET @string ='Alter table '+ @NombreEsquema + '.'+@NombreTabla + ' ' + @instruccion + ' trigger all'
 EXEC (@string)
 FETCH next FROM cur INTO @NombreEsquema, @NombreTabla 
 END
 CLOSE cur
 DEALLOCATE cur 
GO


Posted by InfoTacticas Soluciones  |  No comments

5/07/2018 01:55:00 p. m. Share:
back to top