Archivo

Posts Tagged ‘VISUAL BASIC’

Copiado masivo de datos utilizando la clase SqlBulkCopy y Visual basic .NET

noviembre 23, 2009 13 comentarios

Tienes que realizar una migración de una base de datos?

Tienes que copiar una Excel a una base de datos?

Tienes que copiar toda la información de una griv a una base de datos?

Pues la solución para el caso de .Net es una clase llamada SqlBulkCopy esta clase nos permite copiar un dataset o un datatable a una base de datos siempre y cuando tengan la misma estructura.

Les advierto a todos el hecho de no usar el  SqlBulkCopy rutinariamente no es conveniente ya que esto da pie a errores de inserción y no permite controlar exactamente donde se da el error.

Ejemplo si queremos copiar 5 registros a una base de datos y controlar el hecho de un posible error lo mejor es usar un RollBack si ocurre un error no se guardan los insert  de los registros antes de que se desatara la excepción, de este tema hablare en otra ocasión.

Bien ahora entonces, ¿cuándo usar SqlBulkCopy?

–          Migración de base de datos

–          Copiado de datos desde una estructura Excel

–          Inserción masiva de datos

Bueno ahora veremos un ejemplo de cómo se usa esta clase útil para muchos casos

‘ se usaran los siguientes namespace

Imports System.Data.SqlClient

Imports System.Data.Sql

‘Necesitamos lo usual una conexión, un objeto command y una datatable

Dim cmd As New SqlCommand()

Dim conn As SqlConnection

Dim tabla As New DataTable

‘aca los string de conexion uno para capturar los datos

‘ y el otro para copiar los datos a la otra base de datos

Public cadenaconexionorigen As String = String.Empty

Public cadenaconexiondestino As String = String.Empty

cadenaconexionorigen = "Persist Security Info=False;User ;Password=sa;Initial Catalog=BDOrigen;Data Source=Servidor1\”

cadenaconexiondestino = "Persist Security Info=False;User ;Password=sa;Initial Catalog=BDDetino;Data Source=Servidor2\”

Bueno ahora para realizar un procedimiento sencillo

‘ despues de asignar el conection string abrimos la conexión

connOrigen.Open()

‘ asigno la conexion

cmd.Connection = connOrigen

‘le digo que va hacer de tipo texto

cmd.CommandType = CommandType.Text

‘ seleciono todo de la tabla ya se que se va migrar toda

cmd.CommandText = "SELECT * FROM tCliente"

‘ ejecuto la sentencia, cierro la coenxion y lleno el datatable

cmd.ExecuteReader()

connOrigen.Close()

adaptador.Fill(tabla)

Ahora si a lo que vinimos bueno ya tenemos nuestros datos y vamos a migrarlos a una nueva base de datos usando BulkCopy hacemos esto:

‘abro la conexión de destino

connDestino.Open()

‘ creo el objeto BulkCopy

Dim copia As New SqlBulkCopy(connDestino)

‘le digo la tabla que va migrar

copia.DestinationTableName = “tCliente”

‘copio los datos

copia.WriteToServer(tabla)

‘cierro la conexión

connDestino.Close()

ok como ven que fácil es copiar datos desde un servidor a otro con pocas líneas de código,

ahora bien tuve otro problema al usar esta clase generalmente en las tablas hay un ID que se coloca autoincrementado al momento en que se copia los datos con esta clase él les asigna un nuevo valor a esta columna comenzando desde el valor inicial que tenga en la nueva tabla, así que OJO al realizar la una migración.

Como se soluciona esto? De esta manera:

connDestino.Open()

cmd.Connection = connDestino

cmd.CommandType = CommandType.Text

‘ con este codigo apagamos el campo identidad de toda la tabla antes ‘de insertar

cmd.CommandText = "SET IDENTITY_INSERT t_Cliente ON"

adaptador.SelectCommand = cmd

cmd.ExecuteNonQuery()

‘escribimos sobre la tabla

Dim copia As New SqlBulkCopy(cadenaconexiondestino, SqlBulkCopyOptions.KeepIdentity)

copia.DestinationTableName = "tCliente"

copia.WriteToServer(tabla)

copia.Close()

‘quitamos el comando anterior

cmd.CommandText = "SET IDENTITY_INSERT t_Cliente OFF"

adaptador.SelectCommand = cmd

‘confirmamos y cerramos la conexion

cmd.ExecuteNonQuery()

connDestino.Close()

Espero que les sirva por favor cualquier duda o inquietud me escriben un comentario o me contactan mis datos están en el perfil.

PROGRAMA DE COMUNICACION SERIAL PC A PC CON VISUAL BASIC MODO CONSOLA

octubre 13, 2008 7 comentarios

En primer lugar quiero agradecer por la aceptación que han tenido mis artículos y sus opiniones, las cuales me han motivado a seguir escribiendo y brindando información a todo el que la necesita.

Este tutorial consiste en un programa escrito en lenguaje VISUAL BASIC “consola”, que permite la conexión entre 2 computador a través del puerto serial, dicho programa es muy sencillo no necesita de configuración de la rata de transmisión, ni tampoco del control de flujo, como se configuran en otros programas como el hyperterminal.

<!–[if !supportLists]–>1- <!–[endif]–>Creación del proyecto: este fue realizado con VISUAL STUDIO 2005 pero es igual para algunas versiones anteriores y para la nueva versión 2008.

Le damos nuevo proyecto y le damos seleccionamos VISUAL BASIC aplicación consola

<!–[if gte vml 1]> <![endif]–><!–[if !vml]–><!–[endif]–>

Después de crear el proyecto nos aparecerá algo en la pantalla como esto:

<!–[if gte vml 1]> <![endif]–><!–[if !vml]–><!–[endif]–>

<!–[if !supportLists]–>2- <!–[endif]–>Programa: para usarlo solo tienen que copiar y pegar sobre lo que les aparece en el proyecto que crearon:

PROGRAMA DE TRANSMICION DE DATOS

Module Module1

Sub SendSerialData(ByVal data As String)

‘Envia una cadena string al puerto serie

Dim Data As String

Data = “HOLA” ‘coloca lo que desees transmitir al puerto.

Using com1 As IO.Ports.SerialPort = _

My.Computer.Ports.OpenSerialPort(“COM1”)

com1.WriteLine(data)

com1.Close()

End Using

End Sub

End Module

PROGRAMA DE RECEPCIÓN DE DATOS

Module Module1

Function ReceiveSerialData() As String

‘Recibe una cadena string que halla sido escrita en el puerto

Dim returnStr As String = “”

Using com1 As IO.Ports.SerialPort = _

My.Computer.Ports.OpenSerialPort(“COM1”)

Do

Dim Incoming As String = com1.ReadLine()

If Incoming Is Nothing Then

Exit Do

Else

 

returnStr &= Incoming & vbCrLf

Console.WriteLine(returnStr)

End If

Loop

com1.Close()

End Using

End Function

End Module

 

3 – Explicación: el programa consiste en un modulo de transmisión de datos al puerto serie y otro de recepción de datos, también se puedes combinar las 2 programas para que ambos escriban y lean.

EL programa de recepción debe estar en modo run, cuando este todo listo se ejecutara el de transmisión quien enviara la cadena string solo una vez y deberá ser recibida por el otro PC inmediatamente.

Los programas no pueden ser probados en el mismo PC por la utilización del puerto del puerto serial.

Espero que les ejecute a todos y que les sirva.

Cualquier duda comentario o sugerencia será recibida.

De nuevo gracias por los comentarios de los anteriores artículos y/o tutoriales son una motivación para seguir escribiendo.