sábado, febrero 26, 2011

Encriptar texto en vb.net con SHA512

SHA512 en un encriptador de cifrado irreversible que se encuentra en la libreria System.Security.Cryptography del .net.

Al ser de cifrado irreversible ya no se puede desencriptar. puede tener diferentes usos por ejemplo si queremos validar la contraseña de un usuario poder comparar la contraseña encriptada en la base de datos y la cadena encriptada de una caja de texto.

para usar SHA512 debemos importar las siguientes librerias


Imports System.Security.Cryptography
Imports System.Text


la siguiente funcion recibe la cabena y devuelve la cadena encriptada


Public Function EncriptarPwd(ByVal pwd As String) As String
Dim cifrador As New SHA512Managed
Dim contraseñaOriginal As Byte() = Encoding.ASCII.GetBytes(pwd)
Dim contraseñaCifrada As Byte() = cifrador.ComputeHash(contraseñaOriginal)
Dim textoContraseñaCifrada As String = Convert.ToBase64String(contraseñaCifrada)
Return textoContraseñaCifrada
End Function

Uso de SET NOCOUNT en SQLServer

En SQLServer se usa SET NOCOUNT para devolver o no la cantidad de filas afectadas por alguna sentencia o transacción ejecutada. SET NOCOUNT tiene dos estados:

SET NOCOUNT ON : Inhabilita la cuenta del número de filas afectadas por una instrucción Transact-SQL

SET NOCOUNT OFF: Habilita la cuenta del número de filas afectadas por una instrucción Transact-SQL





Cuando se usa SET NOCOUNT ON se mejora el rendimiento del servidor porque omite la devolución del numero de filas afectadas al cliente o terminal que ha realizado la consulta, pero hay casos en que es necesario obtener el número de registros afectados segun nuestra necesidad, por ello se recomienda analizar muy bien cuando usar SET NOCOUNT ON.

El siguiente ejemplo hace una consulta a la tabla customers de la base de datos Northwind usando los dos estados de SET NOCOUNT, se puede apreciar la diferencia.

Usando SET NOCOUNT ON



----- 1
GO
SET NOCOUNT ON

select * from dbo.customers
where country = 'France'
GO

Resultado:

Usando SET NOCOUNT OFF


---- 2
GO
SET NOCOUNT OFF

select * from dbo.customers
where country = 'France'
GO


Resultado:

viernes, febrero 25, 2011

Reporte con Crystal Report y Linq to Xml

En el post anterior hice un pequeño ejemplo de como guardar los datos de una tabla a un archivo Xml y luego leerlos y mostrarlos en un DataGridView.

Ahora voy a realizar un ejemplo de como mostrar un reporte de los datos contenidos en un archivo XML usando Linq. Para este ejemplo tengo un proyecto de formularios de windows llamado XmlExample, en el cual tengo un formulario diseñado como muestra la imagen.


En el proyecto XmlExample también debo crear la clase Categories.vb el cual se usará para diseñar el reporte.
Public Class Categories
Private _CategoryID As Integer = String.Empty
Private _CategoryName As String = String.Empty
Private _Description As String = String.Empty

Public Property CategoryID() As Integer
Get
Return _CategoryID
End Get
Set(ByVal value As Integer)
_CategoryID = value
End Set
End Property

Public Property CategoryName() As String
Get
Return _CategoryName
End Get
Set(ByVal value As String)
_CategoryName = value
End Set
End Property

Public Property Description() As String
Get
Return _Description
End Get
Set(ByVal value As String)
_Description = value
End Set
End Property
End Class

Agregamos un nuevo proyecto de CrystalReport




El Explorador de soluciones debe quedar asi:


En el Diseñador del reporte Seleccionamos el origen de datos.

Nos Situamos como muestra la imagen (nueva conexión de ADO.NET) y presionamos doble click.

Aparecerá una ventana donde debemos indicar que objeto deseamos usar, en nuestro caso debemos seleccionar la clase categories.vb que esta en el proyecto XmlExample y presionamos finalizar.

En el arbol de la derecha nos aparecera el orgien de datos con el cual procederemos a diseñar nuestro reporte.

En el proyecto XmlExample donde se encuentra el formulario de consulta agregamos la referencia del proyecto de CrystalReport que hemos agregado


En el formulario agregamos un boton para generar el reporte y un crystalreportView. En el boton ingresamos el siguiente código:
Dim lCategoriaXml As XDocument = XDocument.Load(txtUrl.Text)
Dim lCategorias = From lcategoria In lCategoriaXml.Descendants("Categoria") _
Select CategoryID = lcategoria.Element("CategoryID").Value, _
CategoryName = lcategoria.Element("CategoryName").Value, _
Description = lcategoria.Element("Description").Value

Dim crp As New XMLReport.RptCategories
crp.SetDataSource(lCategorias.ToList)
CrystalReportViewer1.ReportSource = crp
TabControl1.SelectedIndex = 1

Grabar Datos de una tabla a Xml y leer con Linq to XML

En algunos casos es necesario guardar los datos de una table en un archivos XML. El siguiente código muestra como grabar los datos de la tabla categories de la base de datos Northwind hacia un archivo XML en la unidad D:\




Using cn As New SqlClient.SqlConnection
cn.ConnectionString = "Data Source=xxxxx;Initial Catalog=northwind;user ID=sa;password=xxxxxxxx"
cn.Open()
Using cmd As New SqlClient.SqlCommand
cmd.CommandType = CommandType.Text
cmd.CommandText = RichTextBox1.Text
cmd.Connection = cn
Using dr As SqlClient.SqlDataReader = cmd.ExecuteReader
Dim lColumn01 As Integer = dr.GetOrdinal("CategoryID")
Dim lColumn02 As Integer = dr.GetOrdinal("CategoryName")
Dim lColumn03 As Integer = dr.GetOrdinal("Description")
Dim lCount As Integer = dr.FieldCount - 1
Dim Values(lCount) As Object
Dim lRead As Boolean = False
Dim lElement As XElement

While dr.Read
dr.GetValues(Values)
If lRead = False Then
lElement = New XElement("Categorias", _
New XElement("Categoria", New XElement("CategoryID", Values(lColumn01)), _
New XElement("CategoryName", Values(lColumn02)), _
New XElement("Description", Values(lColumn03))))
Else
lElement.Add(New XElement("Categorias", _
New XElement("Categoria", New XElement("CategoryID", Values(lColumn01)), _
New XElement("CategoryName", Values(lColumn02)), _
New XElement("Description", Values(lColumn03)))))
End If
lRead = True
End While
lElement.Save(txtUrl.Text)
MsgBox("Datos Grabados en " & txtUrl.Text)
End Using
End Using
End Using


para leer los datos del archivo XML he usado Linq to XML para mostrar los datos en el datagridview


Dim lCategoriaXml As XDocument = XDocument.Load(txtUrl.Text)
Dim lCategorias = From lcategoria In lCategoriaXml.Descendants("Categoria") _
Select CategoryID = lcategoria.Element("CategoryID").Value, _
CategoryName = lcategoria.Element("CategoryName").Value, _
Description = lcategoria.Element("Description").Value

DataGridView1.DataSource = lCategorias.ToList




puedes descargar el código del ejemplo aquí.

jueves, febrero 24, 2011

Extraer esquemas de tablas con datatable


Tal vez en alguna oportunidad se habran topado con la necesidad de extraer el esquema de una tabla (sin importar la base de datos), es decir obtener el nombre de todas sus columnas, tipo de dato, si acepto nulos, etc. . Net ofrece la posibilidad de extraer el esquema de una tabla a travez de Datatables.

Un Datatable es un objeto Ado.Net, el cual te permite representar cualquier tabla de una base de datos en modo local, donde tu puedes manipularlo a tu gusto sin que la tabla real de la base de datos se vea afectado, almenos que tu indiques que deas grabar los cambios realizados.

Este ejemplo lo voy a realizar con la tabla categories de la base de datos Northwind el cual tiene la siguiente estructura:


Ahora para obtener la estructura de la tabla categories procedemos a ejecutar la siguiente sentencia:

El resultado es: