Por ejemplo el tipo entero (Integer en VB) no tenia forma de tener un valor nulo. Esto permite guardar valores nulos en la base de datos.
'Declarar la variable
Dim nul as Nullable(Of Integer)
'Verificar el valor
If nul.HasValue Then
'Tiene valor
End if
febrero 18, 2007
enero 08, 2007
Utilizar el Patron Singleton con formularios MDI
Objetivo: Que desde una aplicación Windows sólo podamos tener una forma hija abierta.
-------1. En la forma hija
'Variable global
Private Shared frmInstance As frmReport = Nothing
'Finalmente crearemos una función shared que será la que finalmente controlara la creación o manejo de la instancia del formulario, logrando obtener solo un formulario 'abierto para este form1.
'Función que verifica sola a una instancia del form1
Public Shared Function Instance() As form1
If frmInstance Is Nothing OrElse frmInstance.IsDisposed = True Then
frmInstance = New form1
End If
frmInstance.BringToFront()
Return frmInstance
End Function
'2-En la forma padre.
'Ahora en el padre escribiremos el llamado al hijo para crear la instancia, o si ya esta 'creada, entonces pondrá el formulario hijo en frente para que lo podamos ver.
Dim frmHijo as form1 = form1.Instance
frmHijo.MdiParent = Me
frmHijo.Show
Referencia:
href="http://www.mentores.net/articulos/Percynet_EditorTexto.htm"
-------1. En la forma hija
'Variable global
Private Shared frmInstance As frmReport = Nothing
'Finalmente crearemos una función shared que será la que finalmente controlara la creación o manejo de la instancia del formulario, logrando obtener solo un formulario 'abierto para este form1.
'Función que verifica sola a una instancia del form1
Public Shared Function Instance() As form1
If frmInstance Is Nothing OrElse frmInstance.IsDisposed = True Then
frmInstance = New form1
End If
frmInstance.BringToFront()
Return frmInstance
End Function
'2-En la forma padre.
'Ahora en el padre escribiremos el llamado al hijo para crear la instancia, o si ya esta 'creada, entonces pondrá el formulario hijo en frente para que lo podamos ver.
Dim frmHijo as form1 = form1.Instance
frmHijo.MdiParent = Me
frmHijo.Show
Referencia:
href="http://www.mentores.net/articulos/Percynet_EditorTexto.htm"
El Patrón Singleton
Objetivo: Hacer que la instancia de un objeto sea accesible globalmente, y que sea única. Para ello es necesario crear un método en la clase que se desee sólo tener una instancia a la ves.
Yo por ejemplo hice un objeto mapper el cuál necesitaba que no fuera instanciado más de una vez por la aplicacion que lo usara.
'---1 La clase Singleton-----------------------------------------------------
Public Class MapperEmpleado
Private pnombre As String
Public Property nombre() As String
Get
Return pnombre
End Get
Set(ByVal Value As String)
pnombre = Value
End Set
End Property
Private Shared mInstance As MapperEmpleado
Private Shared mMutex As New System.Threading.Mutex()
' Constructor privado para no poder instanciar la clase
Private Sub New()
End Sub
'Método que verifica la existencia del objeto al querer instanciar.
Public Shared Function GetInstance() As MapperEmpleado
mMutex.WaitOne()
If mInstance Is Nothing Then
mInstance = New MapperEmpleado()
End If
mMutex.ReleaseMutex()
Return mInstance
End Function
End Class
--2 La aplicación desde que se consume a la clase que implementa el patrón singleton.
'Para poder instanciar el objeto se usa el método GetInstance ya que el constructor New() es privado.
Dim obj As MapperEmpleado = MapperEmpleado.GetInstance
obj.nombre = "Julio"
Dim obj2 As MapperEmpleado = MapperEmpleado.GetInstance
MessageBox.Show(obj2.nombre)
--El nombre es el mismo porque sólo se permite una clase.
Aquí un link de referencia sobre este patrón:
http://www.mug.org.ar/Patrones/ArticPatrones/304.aspx
http://searchvb.techtarget.com/tip/0,289483,sid8_gci921128,00.html
Yo por ejemplo hice un objeto mapper el cuál necesitaba que no fuera instanciado más de una vez por la aplicacion que lo usara.
'---1 La clase Singleton-----------------------------------------------------
Public Class MapperEmpleado
Private pnombre As String
Public Property nombre() As String
Get
Return pnombre
End Get
Set(ByVal Value As String)
pnombre = Value
End Set
End Property
Private Shared mInstance As MapperEmpleado
Private Shared mMutex As New System.Threading.Mutex()
' Constructor privado para no poder instanciar la clase
Private Sub New()
End Sub
'Método que verifica la existencia del objeto al querer instanciar.
Public Shared Function GetInstance() As MapperEmpleado
mMutex.WaitOne()
If mInstance Is Nothing Then
mInstance = New MapperEmpleado()
End If
mMutex.ReleaseMutex()
Return mInstance
End Function
End Class
--2 La aplicación desde que se consume a la clase que implementa el patrón singleton.
'Para poder instanciar el objeto se usa el método GetInstance ya que el constructor New() es privado.
Dim obj As MapperEmpleado = MapperEmpleado.GetInstance
obj.nombre = "Julio"
Dim obj2 As MapperEmpleado = MapperEmpleado.GetInstance
MessageBox.Show(obj2.nombre)
--El nombre es el mismo porque sólo se permite una clase.
Aquí un link de referencia sobre este patrón:
http://www.mug.org.ar/Patrones/ArticPatrones/304.aspx
http://searchvb.techtarget.com/tip/0,289483,sid8_gci921128,00.html
diciembre 11, 2006
Check box en GridView para procesar renglones seleccionados
Recientemente tuve la necesidad de poner un ccheck box en cada una de las filas de un control GridView para que poder seleccionar a un número determinado de ellas y asi poder procesarlas.


1. Agregar el control check box al GridView como parte de sus columnas:
2. Recorrer a todos los renglones del GridView para identificar cuales están seleccionados.
'Obtener el total de renglones para saber cunado parar durante la iteración.
Dim intRows As Int16 = Me.GridViewEdoCta.Rows.Count
For i = 0 To Me.GridViewEdoCta.Rows.Count - 1
'En la posición 13 es en donde se encuentra el control Check.
If CType(Me.GridViewEdoCta.Rows(i).Cells(13).Controls(1), CheckBox).Checked Then
CargoxContrato = Me.GridViewEdoCta.Rows(i).Cells(0).Text
End If
Next
Inserciones, Actulizaciones y Borrados masivo de registros
En el siguiente ejemplo se expone como hacer Deletes y Updates masivamente con el uso de XML, sólo es necesario pasar el árbol XML al store procedure para leerlo y especificarlo en las intrucciones delete y update. La´página web referencia es:
http://support.microsoft.com/kb/316244/es
Cadena xml válida que recibe el sp:

CREATE PROCEDURE sps_CancelaCargosXContratoTelXML
@xmlCargosxContrato varchar(8000) AS
DECLARE @idoc int --xmlDoc
--Ejecutar el sp que carga en memoria el docuemnto XML.
EXEC sp_xml_preparedocument @idoc output, @xmlCargosxContrato
--Comienza la transacción
BEGIN TRANSACTION
--Actualizar el Status de los cargos a Cancelado.
UPDATE Tel_CargosxContrato SET Tel_CargosxContrato.Status = 'CANCELADO'FROM OPENXML (@idoc, '/CargosxContrato/Concepto')
WITH (CargoUid varchar(11)) Tel_CargosxContratoXML
WHERE Tel_CargosxContrato.Uid = Tel_CargosxContratoXML.CargoUid
--Verificar si hubo errores saltar al bloque manejador.
IF @@Error != 0
GOTO ERROR_HANDLER
--Eliminar cargos de la tabla TEL_Cobranza
Delete Tel_cobranza
FROM OPENXML (@idoc, '/CargosxContrato/Concepto')
WITH (CargoUid varchar(11)) CobranzaXMLWHERE Tel_Cobranza.Uid = CobranzaXML.CargoUid
--Verificar si hubo errores saltar al bloque manejador.
IF @@Error != 0
BEGIN
GOTO ERROR_HANDLE
--Finalizar la Transacción pues todo salió bien.
COMMIT TRANSACTION
SET NOCOUNT OFF
--Descargar documento XML de la memoria.
EXEC sp_xml_removedocument @idoc
RETURN 0
--Manejador de Error.
ERROR_HANDLER:
ROLLBACK TRANSACTION--Descargar documento XML de la memoria.EXEC sp_xml_removedocument @idoc
SET NOCOUNT OFF
RETURN 0
GO
http://support.microsoft.com/kb/316244/es
Cadena xml válida que recibe el sp:

CREATE PROCEDURE sps_CancelaCargosXContratoTelXML
@xmlCargosxContrato varchar(8000) AS
DECLARE @idoc int --xmlDoc
--Ejecutar el sp que carga en memoria el docuemnto XML.
EXEC sp_xml_preparedocument @idoc output, @xmlCargosxContrato
--Comienza la transacción
BEGIN TRANSACTION
--Actualizar el Status de los cargos a Cancelado.
UPDATE Tel_CargosxContrato SET Tel_CargosxContrato.Status = 'CANCELADO'FROM OPENXML (@idoc, '/CargosxContrato/Concepto')
WITH (CargoUid varchar(11)) Tel_CargosxContratoXML
WHERE Tel_CargosxContrato.Uid = Tel_CargosxContratoXML.CargoUid
--Verificar si hubo errores saltar al bloque manejador.
IF @@Error != 0
GOTO ERROR_HANDLER
--Eliminar cargos de la tabla TEL_Cobranza
Delete Tel_cobranza
FROM OPENXML (@idoc, '/CargosxContrato/Concepto')
WITH (CargoUid varchar(11)) CobranzaXMLWHERE Tel_Cobranza.Uid = CobranzaXML.CargoUid
--Verificar si hubo errores saltar al bloque manejador.
IF @@Error != 0
BEGIN
GOTO ERROR_HANDLE
--Finalizar la Transacción pues todo salió bien.
COMMIT TRANSACTION
SET NOCOUNT OFF
--Descargar documento XML de la memoria.
EXEC sp_xml_removedocument @idoc
RETURN 0
--Manejador de Error.
ERROR_HANDLER:
ROLLBACK TRANSACTION--Descargar documento XML de la memoria.EXEC sp_xml_removedocument @idoc
SET NOCOUNT OFF
RETURN 0
GO
Ocultar columnas con DataBind en un GridView
Es muy comun el poblar un control GridView con datos de una Base de Datos y ocultar columnas que no es recomendable que se muestran a los usuarios, pero en el GridView al poner la propiedad visible= False de una columna a ocultar y luego tratar de recuperar el valor de esta celda el valor es cadena vacía, para que esto no courra se debe implementar el siguiente evento manejado del GridView y aquí poner las columnas que se desea ocultar.
'Ocultar columnas del GridView que no son necesarias para el usuario en la vista.
Public Sub myGrid_OnRowCreated(ByVal sender As Object, ByVal e As Web.UI.WebControls.GridViewRowEventArgs) Handles GridViewEdoCta.RowCreated
e.Row.Cells(0).Visible = False 'Uid cobranza
e.Row.Cells(1).Visible = False 'MovimientoUid
End Sub
De esta forma si es posible recuperar su valor.
'Recuperar el valor de la celda, aunque este oculta.
Dim strClave as String = Me.GridViewEdoCta.Rows(1).Cells(0).Text
'Ocultar columnas del GridView que no son necesarias para el usuario en la vista.
Public Sub myGrid_OnRowCreated(ByVal sender As Object, ByVal e As Web.UI.WebControls.GridViewRowEventArgs) Handles GridViewEdoCta.RowCreated
e.Row.Cells(0).Visible = False 'Uid cobranza
e.Row.Cells(1).Visible = False 'MovimientoUid
End Sub
De esta forma si es posible recuperar su valor.
'Recuperar el valor de la celda, aunque este oculta.
Dim strClave as String = Me.GridViewEdoCta.Rows(1).Cells(0).Text
Imprimir directamente con ASP.NET

1. En el evento Load cargo la lista de impresoras disponibles localemente.
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
Me.DropDownListImpresoras.DataSource = PrinterSettings.InstalledPrinters()
Me.DropDownListImpresoras.DataBind()
Me.DropDownListImpresoras.SelectedIndex = 0
End If
End Sub
2. Al hacer clic en el botón imprimir
Protected Sub ButtonImprimir_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButtonImprimir.Click
'Create an instance of PrintDocument
Dim printdoc As New System.Drawing.Printing.PrintDocument()
' Set the printer name
printdoc.PrinterSettings.PrinterName = Me.DropDownListImpresoras.Text
' Handle printing
AddHandler printdoc.PrintPage, AddressOf Me.printdoc_PrintPage
' Print!
printdoc.Print()
End Sub
3. Evento manejado al imprimir que es en donde se especifica lo que se desea imprimir.
Private Sub printdoc_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
'Definición de la fte a utilizar.
Dim printFont As System.Drawing.Font = New System.Drawing.Font("Courier New", 12)
' Dibujar el nombre escrito y que se desea imprimir directamente.
e.Graphics.DrawString(Me.TextBox1.Text, printFont, System.Drawing.Brushes.Black, New System.Drawing.PointF(10.0F, 50.0F))
End Sub
noviembre 08, 2006
Script para Activar/Desactivar Constraints en SQL Server
Muchas veces es necesario deshabilitar la integridad referencial o ciertos constraints establecidos en una base de datos SQL Server y este script que encontré en "http://www.melkorcete.com/index.php?c=17" es muy útil para llevar acabo esta tarea.
/*
Script para Activar y Desactivar todos los constraints de una
Base de Datos (CK, FK, PK, DK).
Sólo se especiifca 1 para activar o 0 para desactivar a la variable @p_activar
*/
USE Facturacion
DECLARE @p_activar BIT
SET @p_activar = 1 --Para Activar = 1, Desactivar = 0
Declare @v_retorno int
Begin
Set NoCount Off
-- Almacena la Orden
declare @orden varchar(100)
-- Almacena la Tabla
declare @tabla varchar(100)
-- Almacena el numero de Operacion Realizada
declare @contador int
-- Variables para mensaje
declare @no varchar(2)
declare @des varchar(4)
-- Para la construccion de mensajes se da un valor
-- dependiendo del parametro @p_activar
if @p_activar = 1
begin
set @no = null
set @des = 'A'
end
else
begin
set @no = 'NO'
set @des = 'Desa'
end
-- Cursor para recorrer una a una las Constraints
declare CURSORITO cursor for
SELECT 'ALTER TABLE ' + QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) + ' ' + IsNull(@no,'') + 'CHECK CONSTRAINT ALL',TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE
OBJECTPROPERTY(OBJECT_ID(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)), 'IsMSShipped') = 0
AND TABLE_TYPE = 'BASE TABLE'
-- Inicializacion de Variables
set @orden = ''
set @tabla = ''
set @contador = 0
-- Mensaje de entrada
print ' '
print '####################################################'
if @no = 'NO'
print '### DESACTIVADO DE CONSTRAINTS ###'
else
print '### ACTIVADO DE CONSTRAINTS ###'
print '####################################################'
print '### '
-- Iniciamos el Cursor y lo recorremos
OPEN CURSORITO
fetch next from CURSORITO
into @orden,@tabla
while @@fetch_status = 0
begin
-- Contador ++
set @contador = @contador + 1
-- Ejecutamos la Orden
exec(@orden)
-- Crear mensaje de salida
print '### ' + convert(varchar,@contador) + ' - ' + convert(varchar,@des) + 'ctivado de ' + convert(varchar,@tabla) + ' completado.'
-- Siguiente Vuelta
fetch next from CURSORITO into @orden, @tabla
end
-- cerramos el cursor
close CURSORITO
deallocate CURSORITO
-- Mensaje de Fin
print '### '
print '####################################################'
if @@error = 0
print '### FINALIZADO CORRECTAMENTE ###'
else
print '### FINALIZADO CON ERRORES ###'
print '####################################################'
Select @v_retorno = @@error
End
/*
Script para Activar y Desactivar todos los constraints de una
Base de Datos (CK, FK, PK, DK).
Sólo se especiifca 1 para activar o 0 para desactivar a la variable @p_activar
*/
USE Facturacion
DECLARE @p_activar BIT
SET @p_activar = 1 --Para Activar = 1, Desactivar = 0
Declare @v_retorno int
Begin
Set NoCount Off
-- Almacena la Orden
declare @orden varchar(100)
-- Almacena la Tabla
declare @tabla varchar(100)
-- Almacena el numero de Operacion Realizada
declare @contador int
-- Variables para mensaje
declare @no varchar(2)
declare @des varchar(4)
-- Para la construccion de mensajes se da un valor
-- dependiendo del parametro @p_activar
if @p_activar = 1
begin
set @no = null
set @des = 'A'
end
else
begin
set @no = 'NO'
set @des = 'Desa'
end
-- Cursor para recorrer una a una las Constraints
declare CURSORITO cursor for
SELECT 'ALTER TABLE ' + QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) + ' ' + IsNull(@no,'') + 'CHECK CONSTRAINT ALL',TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE
OBJECTPROPERTY(OBJECT_ID(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)), 'IsMSShipped') = 0
AND TABLE_TYPE = 'BASE TABLE'
-- Inicializacion de Variables
set @orden = ''
set @tabla = ''
set @contador = 0
-- Mensaje de entrada
print ' '
print '####################################################'
if @no = 'NO'
print '### DESACTIVADO DE CONSTRAINTS ###'
else
print '### ACTIVADO DE CONSTRAINTS ###'
print '####################################################'
print '### '
-- Iniciamos el Cursor y lo recorremos
OPEN CURSORITO
fetch next from CURSORITO
into @orden,@tabla
while @@fetch_status = 0
begin
-- Contador ++
set @contador = @contador + 1
-- Ejecutamos la Orden
exec(@orden)
-- Crear mensaje de salida
print '### ' + convert(varchar,@contador) + ' - ' + convert(varchar,@des) + 'ctivado de ' + convert(varchar,@tabla) + ' completado.'
-- Siguiente Vuelta
fetch next from CURSORITO into @orden, @tabla
end
-- cerramos el cursor
close CURSORITO
deallocate CURSORITO
-- Mensaje de Fin
print '### '
print '####################################################'
if @@error = 0
print '### FINALIZADO CORRECTAMENTE ###'
else
print '### FINALIZADO CON ERRORES ###'
print '####################################################'
Select @v_retorno = @@error
End
octubre 27, 2006
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.
El link es:
http://busyboxdotnet.qsh.eu/
Revisen el demo. Considero que es un control free muy útil.
octubre 14, 2006
Server.Transfer o Response.Redirect, para enviar a los usuarios a otra página?
En un blog encontré la post y que se encuentra en el siguiente link:
http://blogs.3devnet.com/blogs/starrillo/archive/2006/09/30/1074.aspx
http://blogs.3devnet.com/blogs/starrillo/archive/2006/09/30/1074.aspx
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
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 (
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
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
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
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
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
----------------------------------------------------
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
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.'
--------------------------------------------------------------
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.'
--------------------------------------------------------------
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
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
Suscribirse a:
Entradas (Atom)