martes, 16 de octubre de 2018

137. Abrir un pdf en asp.net en una nueva pestaña

Para poder abrir un pdf es necesario primero enviarlo, para ello seguimos el siguiente codigo

Response.ContentType = "application/pdf"
Response.Clear()
Response.TransmitFile("C:\Carlos\Libros\thinkpython.pdf")
Response.End()

Sin embargo esto no lo abre en una nueva pestaña, para ello es necesario al momento de llamar el boton del lado del cliente agregar lo siguiente:

OnClientClick="frmAyuda.target ='_blank';

por ejemplo


<asp:Button CssClass="btnAgregar" ID="btnAgregar" runat="server" Text="Agregar" OnClientClick="frmAyuda.target ='_blank';"/>

Felices lineas

136.Generar una cadena aleatoria de manera agil

Esta es una función rápida para generar una cadena alfanumérica aleatoria

 public string GeneraCadenaAleatoria(int longitud)
        {
            using (MD5 md5Hash = MD5.Create())
            {
                
                StringBuilder sb = new StringBuilder();
                while (sb.Length < longitud)
                {
                    byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(Guid.NewGuid().ToString());
                    byte[] hash = md5Hash.ComputeHash(inputBytes);
                    sb.Append(Convert.ToBase64String(hash));
                }
                return sb.ToString().Substring(0, longitud);
            }
        }

Felices lineas

jueves, 11 de octubre de 2018

135. MVC - Cambiar la complejidad del password usando identity framework

MVC permite la construcción de paginas ágiles, y un gran control sobre la estructura de las mismas, Visual Studio cuenta con plantillas para poder iniciar una pagina con características mínimas para poder empezar a trabajar, MVC emplea identity para poder efectuar la administración de accesos y autorizaciones, por default, Identity tiene algunas características definidas para los paswords pero en algunas ocaciones es necesario aumentar o reducir la complejidad, para ello se debe hacer esto:

Debemos ir a la carpeta App_Start donde encontraremos un archivo llamado IdentityConfig.cs


Abrimos el archivo y buscamos la sección:

public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context) 

Dentro de esta encontraremos las características para definir el password

 // Configure la lógica de validación de contraseñas
            manager.PasswordValidator = new PasswordValidator
            {
                RequiredLength = 8,
                RequireNonLetterOrDigit = false,
                RequireDigit = false,
                RequireLowercase = false,
                RequireUppercase = false,
            };

Felices lineas

miércoles, 10 de octubre de 2018

134. Deep Freeze

Hoy quiero recomendar un software que permite la experimentación, convirtiendo la PC en un cajón de arena, de esta forma cualquier cosa que se haga en la PC se recupera con un simple reinicio, (cualquier cosa que afecte al sistema, esto no necesariamente tiene que ver con archivos de documentos), como desarrolladores siempre existe la curiosidad de jugar con partes internas del S.O. o modificar configuraciones, si bien existen las maquinas virtuales que nos permiten hacer esto libremente o maquinas en Azure, existen algunas veces, que es necesario hacer alguna modificación sobre algún equipo que no tiene estas características, principalmente por que se requiere que se cumpla con las características exactas de software y configuración.

Es en estos casos en que el producto es útil, ya que basta un reinicio para volver a la configuración original.

Les dejo la liga, para que lo analicen. https://www.faronics.com/es/products/deep-freeze/enterprise

Felices lineas

133. ¿Que esta haciendo mi servidor de SQL?

La salud de un servidor de SQL es muy importante, ya que una consulta muy pesada, un bloqueo, puede acabar con una aplicación completa, los contadores de performance de un servidor son una herramienta gratuita muy importante que nos permite ver prácticamente todo lo que hace un servidor, y estos pueden ser consultados por diversos métodos, vamos a revisar este tema mas adelante, si ya se que tengo varios temas abiertos pero es que sistemas es un mundo muy grande y si realmente quieren ser buenos arquitectos de sistemas deben conocer y ser expertos en todos los frentes, su labor es orquestar todos los recursos que tienen y aprovecharlos al maximo.

Hoy les dejo un query que les permite saber la actividad de su servidor de base de datos, para saber si un usuario esta abusando del servidor

SELECT es.session_id
    ,es.program_name
    ,es.login_name
    ,es.nt_user_name
    ,es.login_time
    ,es.host_name
    ,es.cpu_time
    ,es.total_scheduled_time
    ,es.total_elapsed_time
    ,es.memory_usage
    ,es.logical_reads
    ,es.reads
    ,es.writes
    ,st.text
FROM sys.dm_exec_sessions es
    LEFT JOIN sys.dm_exec_connections ec
        ON es.session_id = ec.session_id
    LEFT JOIN sys.dm_exec_requests er
        ON es.session_id = er.session_id
    OUTER APPLY sys.dm_exec_sql_text (er.sql_handle) st
WHERE es.session_id > 50   
ORDER BY es.cpu_time DESC

Que tengan felices lineas

lunes, 1 de octubre de 2018

132. Cambiar el esquema de un objeto en una base de datos

Para poder cambiar un objeto de una base de un esquema a otro se usa la instrucción

ALTER SCHEMA [Nuevo esquema] TRANSFER [Objeto];

para que sirve un esquema, un esquema es un agrupador, que nos permite organizar los objetos en la base de datos, de esta forma podemos saber el uso de los objetos, e implementar una seguridad por uso definiendo limites entre lo que puede ver o acceder cada grupo de usuarios



martes, 25 de septiembre de 2018

131. Buscar una columna en toda la base de datos

Les dejo este script que les permite encontrar una columa en una base de datos

DECLARE @StrValorBusqueda NVARCHAR(100)

SET @StrValorBusqueda = '[Columna]'

CREATE TABLE #Resultado (NombreColumna NVARCHAR(370))

SET NOCOUNT ON

DECLARE @NombreTabla NVARCHAR(256)
,@NombreColumna NVARCHAR(128)

SET @NombreTabla = ''

WHILE @NombreTabla IS NOT NULL
BEGIN
PRINT @NombreTabla

SET @NombreColumna = ''
SET @NombreTabla = (
SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @NombreTabla
AND OBJECTPROPERTY(OBJECT_ID(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)), 'IsMSShipped') = 0
)

WHILE (@NombreTabla IS NOT NULL)
AND (@NombreColumna IS NOT NULL)
BEGIN
if @NombreColumna like ('%' + @StrValorBusqueda + '%')
Begin
insert into #Resultado values(@NombreTabla + '.' + @NombreColumna)
End
SET @NombreColumna = (
SELECT MIN(QUOTENAME(COLUMN_NAME))
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = PARSENAME(@NombreTabla, 2)
AND TABLE_NAME = PARSENAME(@NombreTabla, 1)
AND DATA_TYPE IN (
'char'
,'varchar'
,'nchar'
,'nvarchar'
)
AND QUOTENAME(COLUMN_NAME) > @NombreColumna
)
END
END

SELECT NombreColumna
FROM #Resultado

lunes, 6 de agosto de 2018

130. Si una tabla existe SQL

El siguiente Query permite determinar si una tabla existe en SQL

IF (EXISTS (SELECT * 
                 FROM INFORMATION_SCHEMA.TABLES 
                 WHERE TABLE_SCHEMA = [Esquema] 
                 AND  TABLE_NAME = [Tabla]))
BEGIN
    --Codigo
END

viernes, 27 de julio de 2018

129. Query para obtener la fracmentacion de los indices de una base de datos

La fracmentacion de los indices es algo que se debe evitar esto principalmente por que indices fracmentados no ayudan a que una base opere correctamente.

El siguiente query permite revisar el estado de los indices de una base de dato de SQL server

SELECT OBJECT_NAME(ind.OBJECT_ID) AS TableName,
ind.name AS IndexName, indexstats.index_type_desc AS IndexType,
indexstats.avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, NULL) indexstats
INNER JOIN sys.indexes ind 
ON ind.object_id = indexstats.object_id
AND ind.index_id = indexstats.index_id
WHERE indexstats.avg_fragmentation_in_percent > 30
ORDER BY indexstats.avg_fragmentation_in_percent DESC

jueves, 12 de julio de 2018

128. Queries mas pesados en una base de datos

Les dejo un script para determinar los queries mas pesados en una base de datos de Microsoft sql server

SELECT TOP 10 SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.TEXT)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2)+1),
qs.execution_count,
qs.total_logical_reads, qs.last_logical_reads,
qs.total_logical_writes, qs.last_logical_writes,
qs.total_worker_time,
qs.last_worker_time,
qs.total_elapsed_time/1000000 total_elapsed_time_in_S,
qs.last_elapsed_time/1000000 last_elapsed_time_in_S,
qs.last_execution_time,
qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY qs.total_logical_reads DESC

saludos