octubre 16, 2006

Un control Web ASP. net que expone un dialogo de espera

Este en un control asp net que funciona para la versión 1.1 y 2 y que es muy útil para mostrar al usuario cuando éste debe esperar a que se procese la página.

El link es:


http://busyboxdotnet.qsh.eu/



Revisen el demo. Considero que es un control free muy útil.

octubre 13, 2006

Encriptado de información del ViewState ASP 2.0

Para reducir el riesgo que alguien intercepte la información almacenada en el ViewState, es posible cifrar dicha información.

Los valores aceptados de la propiedad ViewStateEncryptionMode son:

Always: La información del ViewState siempre es encriptada. Si la aplicación maneja información sensible de manera constante seria conveniente utilizar este valor.

Auto: La información es encriptada si un control lo solicita. Este es el valor por defecto de la propiedad.

Never: La información nunca es encriptada, aún si un control lo solicita. Úselo bajo su propia responsabilidad...

Para establecer el valor a nivel de aplicación empleamos el atributo ViewStateEncryptionMode de la sección pages en el web.config:

pages viewStateEncryptionMode="Always"


O bien por medio del atributo homónimo de la directiva @Page, para establecer el valor en una página en particular:

@Page ViewStateEncryptionMode="Always"

También se puede establecer el valor de manera dinámica a través de la propiedad ViewStateEncryptionMode del objeto Page:

Page.ViewStateEncryptionMode = ViewStateEncryptionMode.Auto

Así pues, utilizando el valor por defecto (Auto) de la propiedad ViewStateEncryptionMode, si se requiere que la información del ViewState sea encriptada, se debe llamar al método RegisterRequiresViewStateEncryption del objeto Page:

If () Then
Page.RegisterRequiresViewStateEncryption()
End If

Formatear (Identación) las instrucciones SQL

Navegando por Internet encontré este formateador de instrucciones SQL en línea, me gusto mucho pues resulta muy útil para cuando hacemos scripts, stores procedures o disparadores.


Este es el link de referencia:

http://www.wangz.net/cgi-bin/pp/gsqlparser/sqlpp/sqlformat.tpl

octubre 05, 2006

EXISTS vs. COUNT(*) en SQL Server

Es muy común que querramos saber la existencia de datos en determinada tabla de una base de datos y para ello utilizamos EXISTS o COUNT(*), pero qué es más eficiente?

Pues en un artículo que muestra como es más eficiente utilizar EXISTS.


IF EXISTS(SELECT * FROM OrderDetails
WHERE orderid = 10248)
PRINT 'yes'
ELSE
PRINT 'no'

Este es el link de referencia:

http://www.sqlmag.com/Article/ArticleID/38039/sql_server_38039.html

Manual de Diseño e Implementación de Base de Datos

Este es el link al manual en línea:


http://www.sqlmax.com/centro/programa.asp

Cargar DataTable con DataReader NET 2005

Ahora en VB.NET 2005 el objeto DataTable puede cargarse via IDataReader (por ejemplo un SqlDataReader) sin necesidad de un objeto SQLDataAdapter. El DataTable tiene un método Load que acepta como argumento un obj que implemente IDataReader.

El siguiente ejemplo pobla un DataView con un DataTable que a su vez es poblado con un SQLDataReader.


----------------Código Fte----------------------------------------------
Imports System.Data.SqlClient

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Me.DataGridView1.DataSource = llenaDataTableConRS()

End Sub


'Función que ejecuta el reader y carga los resultados en una DataTable.
Private Function llenaDataTableConRS() As DataTable
Dim con As New SqlConnection(strConn)

Dim datatable1 As New DataTable
Dim dr As SqlDataReader
Try
Dim cmd As New SqlCommand("Select * From Employees", con)
con.Open()
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection)
'Aqui es donde se carga el Recordset al DataTable.
datatable1.Load(dr)

Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
con.Close()
End Try

Return datatable1
End Function
End Class

Guardar la hora como un entero en SQL Server.

Una opción de guardar la hora es como un valor entero, por ejemplo si son las 11:20 entonces el valor sería guardado como 1120. Sólo es necesario multiplicar por 100.

En el ejemplo se crea una tabla temporal.
Se le agrega un registos con la hora como un entero.
Se consulta el valor guardado.
Se borra la tabla temporal.

--Creación de tabla termporal.
SET NOCOUNT ON
CREATE TABLE #foo
(
tm SMALLINT
)
go

--Insertar la hora y minutos actuales del equipo
INSERT #foo VALUES
(
-- e.g. 1527 = 3:27 PM / 15:27
100 * DATEPART(HOUR, GETDATE())
+ DATEPART(MINUTE,GETDATE())
)

go

--Imprimir la hora y minutos guardados
SELECT tm FROM #foo
go

--Borrar la tabla temporal
DROP TABLE #foo
go
----------------------------------------------------

Verifica si existe tabla en una BD en SQL Server

--Verifica si existe una tabla temporal.
IF OBJECT_ID('tempdb..#AnyTable') IS NOT NULL
PRINT 'EXISTE'
ELSE
PRINT 'NO EXISTE'
go


--Verifica si existe tabla en determinda Base de datos.
IF OBJECT_ID('Northwind..Categories') IS NOT NULL
PRINT 'EXISTE'
ELSE
PRINT 'NO EXISTE'
go

Función SQL Server verifica existe columna en tabla

--------------------Código de la Función-----------------------------
CREATE FUNCTION ColumnAlreadyExists(@TableName NVARCHAR(128),@ColumnName NVARCHAR(128))
RETURNS INTEGER--Returns 0 if column does not exist. Returns 1 if column exists.
AS
BEGIN
--See if the Table already contains the column.
IF EXISTS
(SELECT * FROM SysObjects O INNER JOIN SysColumns C ON O.ID=C.ID
WHERE ObjectProperty(O.ID,'IsUserTable')=1
AND O.Name=@TableName
AND C.Name=@ColumnName)
RETURN 1
--Table does not contain the column.
RETURN 0
END
GO

----------------------Usar la función-------------------------IF .dbo.ColumnAlreadyExists('CLIENTE','IdCte')=1
print 'Existe la columna IdCte en la tabla.'
Else
print 'No existe la columna IdCte en la tabla.'
--------------------------------------------------------------