agosto 04, 2006

MARS (Multiple Active Result Sets)

Sobre algo de lo nuevo en NET 2.0 y SQL Server 2005 está el concepto llamado: Multiple Active Result Sets y que la idea es poder trabajar con la misma conexión para dar realizar más de una operación en la base de datos, por ejemplo leer un conjunto de resultados de un datareader y que para cada registro obtenido hacer un insert. Para realizar está operación con SQL Server 2000 es necesario utilizar dos objetos conexión, pero ahora con MARS (Multiple Active Result Sets es posible realizar esto con una sóla conexión, sólo es necesario especificar esta funcionalidad en la cadena de conexión.



connectionString = "Data Source=(local);Integrated Security=SSPI;" & _
"Initial Catalog=AdventureWorks; MultipleActiveResultSets=True"

Using awConnection As New SqlConnection(connectionString)

Este es un link con más información al respecto:

http://msdn2.microsoft.com/en-us/library/yf1a7f4f.aspx

Tipo Nullables en net 2.0

Hace unos días mi amigo Orlando hizo un procedimiento en visual basic net que leía un datareader, extraía los valores y éstos los pasaba a una función que los recibía para hacer un insert. Él me preguntaba como podia pasar un valor nulo como parámetro a una función y yo le conteste que eso no era posible porque lo que lo que él estaba pasando eran valores a variables escalares y no objetos.

Él necesitaba pasar un valor nulo a su función cuando el datareader que el leía contenía un nulo. Al dia siguiente encontré el concepto de valores nulables soportados por el framework 2.0 y esta es la forma en que se pueden utilizar.

'Asignar un valor nulo al tipo escalar
Dim booleanoNulo as Nullable(Of Boolean) = Nothing
Dim IntegerNulo As Nullable(Of Integer) = 34
'Llamar al método.
valor(booleanoNulo , IntegerNulo )

'Se puede usar la propiedad HasValue de los tipos nullables para preguntar si la variable tiene o no un valor asignado. A continuación se muestra una función que recibe tipos de datos escalares con valores nulos.

Private Sub valor(ByVal booleanoNulo As Nullable(Of Boolean), ByVal IntegerNulo As Nullable(Of Integer))

If booleanoNulo.HasValue() Then
'Asignar Valor.
MessageBox.Show(booleanoNulo.Value)
Else
MessageBox.Show("No existe valor x asignar entonces insertar System.DbNull.Value.")
End If

End sub

Obtener fecha y hora de un datetime en SQL Server

Muchas veces es neesario extraer sólo la fecha u hora a un valor correspondiente a un tipo Datetime en SQL Server.

Aquí están algunas de las formas de obtenerlo:

SELECT CONVERT(CHAR(10), FechaAlta, 103) AS SoloFecha
FROM Tabla
--103 es el formato corto de dd/mm/aaaa

SELECT dateonly = CONVERT(CHAR(8),FechaHora1,112) FROM TABLA1
SELECT timeonly = CONVERT(CHAR(8),FechaHora1,8) FROM TABLA1