Sei sulla pagina 1di 49

Cmo enviar SMS desde un PC usando un mdem GSM con Visual Basic .

Net
Explicamos paso a paso cmo desarrollar una aplicacin informtica para enviar un SMS (mensaje de texto por mvil) usando como lenguaje de programacin Microsoft Visual Bascic .Net 2010, el componente SerialPort y un mdem GSM conectado al PC mediante puerto serie (COM). Mostramos cmo enviar comandos AT (Hayes) y cmo obtener la respuesta del mdem.

Conjunto de comandos Hayes, Comandos AT. Requisitos para dotar a nuestras aplicaciones de la opcin de envo de SMS desde el PC con mdem GSM. Mtodos para obtener los resultados devueltos por el puerto serie. o Mtodo simple. o Mtodo Complejo. Desarrollar aplicacin en Visual Basic .Net para envo de SMS mediante puerto serie y mdem GSM. La aplicacin AjpdSoft Envo de SMS por GSM en funcionamiento. Uso de envo de SMS por mdem GSM desde PC. Artculos relacionados. Crditos.

Conjunto de comandos Hayes, Comandos AT


El conjunto de comandos Hayes es un lenguaje desarrollado por la compaa Hayes Communications que prcticamente se convirti en estndar abierto de comandos para configurar y parametrizar mdems. Los caracteres "AT", que preceden a todos los comandos, significan "Atencin", e hicieron que se conociera tambin a este conjunto de comandos como comandos AT. Midiendo la longitud de los bits se puede determinar en detalle la velocidad de transmisin. Un aparato que implemente el conjunto de comandos Hayes se considera compatible Hayes. Parte del conjunto de comandos Hayes fue incluido por la ITU-T en el protocolo V.25ter, actual V.250. La adopcin de este estndar hizo el desarrollo de controladores especficos para distintos mdems. A partir de la versin 3.x de Microsoft Windows el sistema operativo contaba con una implementacin de controlador para mdems compatibles con Hayes. Sin embargo, a partir de Microsoft Windows 95 se desarrollaron controladores especficos para cada mdem, as que la compatibilidad con Hayes dej de ser importante y por esta razn cada vez menos mdems la implementaron. Esto dificult su uso en otros sistemas operativos, pues no resulta frecuente que haya controladores disponibles. La mayora de los mdems se controlan y responden a caracteres enviados a travs del puerto serie. Estos comandos u rdenes hacen posible que el software de

comunicacin pueda comunicarse con el mdem. El lenguaje ms extendido de comandos para mdems es el de los comandos Hayes o AT. Los comandos Hayes se dividen en dos grandes tipos: 1. De ejecucin de acciones inmediatas: ATD marcacin, ATA contestacin, ATH desconexin, ... 2. De configuracin de algn parmetro del mdem: ATV define cmo responde el mdem tras la ejecucin de un parmetro, ATE selecciona el eco local, ... Como ya hemos comentado, la mayora de los comandos Hayes empieza con la secuencia AT, con la excepcin del comando A/ que repite el ltimo comando introducido y tambin la secuencia triple del carcter de escape. El resto de los comandos van a continuacin de la secuencia AT, con las letras del alfabeto. Adems, muchos de ellos necesitan a continuacin un valor numrico, que en el caso de que no se introduzca se tomar como que dicho valor es cero. Por ejemplo, la funcin ECO permite que el mdem enve a la terminal el mismo carcter que recibe de ella. De esta forma el operador de la terminal puede visualizar en pantalla lo que le est enviando al mdem. La secuencia ATE1 activa esta funcin y la ATE0 ATE (al no escribir el valor numrico el mdem lo toma como que es cero) la desactiva. A media que se fueron requiriendo ms funciones en los mdems se fueron agregando nuevos comandos AT. A estos comandos se los llama extendidos y tienen la forma AT&X donde & indica que el comando X es extendido. As mismo cada fabricante introdujo otros comandos que no fueron estndares y cumplan funciones especficas para sus dispositivos. Por lo tanto no todos los mdems responden a estos comandos. En resumen, a los comandos Hayes se los puede dividir en 4 grupos: 1. Bsicos (AT...): estos comandos fueron los que inicialmente se definieron y cumplen funciones elementales. 2. De registro (ATSi=, ATSi?): modifican los valores de los registros internos del mdem solicitan sus valores. 3. Extendidos (AT&...): comandos adicionales que se agregaron posteriormente a las definiciones de los comandos bsicos. Generalmente cumplen funciones un poco ms complejas que los bsicos. 4. Propietarios (AT/...): definidos por el fabricante del dispositivo. Ante cualquier comando AT enviado al mdem, ste responde con el resultado de la operacin: OK, ERROR, CONNECT, etc. El operador de la terminal puede elegir que el resultado, en vez de aparecer en forma alfabtica, aparezca de forma numrica donde cada nmero corresponde a una respuesta en particular. Por ejemplo OK tiene por valor cero. El comando para elegir la forma de la respuesta es ATV donde ATV1 activa la respuesta alfabtica y ATV0 la numrica. Esta ltima forma es til cuando es un programa y no un usuario el que est comunicndose con el mdem y necesita de un valor numrico para comparar y tomar una accin determinada segn el resultado. Algunos comandos Hayes AT y su significado, normalmente usados en mdem GSM con tarjeta SIM para envo y recepcin de SMS: AT: devuelve "OK" si se ha encontrado un mdem en el puerto establecido.

AT+CREG?: devuelve un valor que indica si el mdem GSM tiene activa la red de telefona. Si tiene red devolver 0,1. AT+CSQ: devuelve un valor que indica la intensidad de la seal en el dispositivo GSM, el mximo es 31,99. AT+CGSN: devuelve el ID del dispositivo (IMEI). AT+CMGF=1: activa el mdem para modo de SMS de formato texto. AT+CMGS="numero_telefono": establece el nmero de telfono al que se enviar el SMS. AT+CPIN=PIN: establece el PIN para la tarjeta SIM conectada al mdem GSM. AT+COPS=?: muestra las redes disponibles para la tarjeta SIM del mdem GSM. AT+CGMI: devuelve el fabricante del mdem GSM o telfono mvil. AT+CGMM: devuelve el modelo del mdem GSM o telfono mvil. AT+CGMR: devuelve la versin de la revisin del dispositivo. AT+CPAS: devuelve el estado del mdem, las posibilidades son: o 0 Ready. o 1 Unavailable. o 2 Status unknown. o 3 Ringing. o 4 Call in progress. o 5 Asleep. AT+CPBR=1,10: devuelve las diez primeras entradas del la agenda de contactos de la tarjeta SIM (devuelve el nmero de telfono y el nombre del contacto).

GSM (Sistema global para las comunicaciones mviles)


El sistema global para las comunicaciones mviles (GSM, del francs Groupe Spcial Mobile) es un sistema estndar, libre de regalas, de telefona mvil digital. Un cliente GSM puede conectarse a travs de su telfono con su computador y enviar y recibir mensajes por correo electrnico, faxes, navegar por Internet, acceder con seguridad a la red informtica de una compaa (red local/Intranet), as como utilizar otras funciones digitales de transmisin de datos, incluyendo el servicio de mensajes cortos (SMS) o mensajes de texto. GSM se considera, por su velocidad de transmisin y otras caractersticas, un estndar de segunda generacin (2G). Su extensin a 3G se denomina UMTS y difiere en su mayor velocidad de transmisin, el uso de una arquitectura de red ligeramente distinta y sobre todo en el empleo de diferentes protocolos de radio (W-CDMA). Una de las caractersticas principales del estndar GSM es el mdulo de identidad del suscriptor, conocida comnmente como tarjeta SIM. La tarjeta SIM es una tarjeta inteligente desmontable que contiene la informacin de suscripcin del usuario, parmetros de red y directorio telefnico. Esto permite al usuario mantener su informacin despus de cambiar su telfono. Paralelamente, el usuario tambin puede cambiar de operador de telefona, manteniendo el mismo equipo simplemente cambiando la tarjeta SIM. Algunos operadores introducen un bloqueo

para que el telfono utilice un solo tipo de tarjeta SIM, o slo una tarjeta SIM emitida por la compaa donde se compr el telfono, esta prctica se conoce como bloqueo de sim, y es ilegal en algunos pases.

SMS (Short Message Service Servicio de mensajes cortos)


El servicio de mensajes cortos o SMS (Short Message Service) es un servicio disponible en los telfonos mviles que permite el envo de mensajes cortos (tambin conocidos como mensajes de texto) entre telfonos mviles, telfonos fijos y otros dispositivos de telefona. SMS fue diseado originariamente como parte del estndar de telefona mvil digital GSM, pero en la actualidad est disponible en una amplia variedad de redes, incluyendo las redes 3G. Un mensaje SMS es una cadena alfanumrica de hasta 140 caracteres o de 160 caracteres de 7 bits, y cuyo encapsulado incluye una serie de parmetros. En principio, se emplean para enviar y recibir mensajes de texto normal, pero existen extensiones del protocolo bsico que permiten incluir otros tipos de contenido, dar formato a los mensajes o encadenar varios mensajes de texto para permitir mayor longitud . En GSM existen varios tipos de mensajes de texto: mensajes de texto "puros", mensajes de configuracin (que contienen los parmetros de conexin para otros servicios, como WAP o MMS), mensajes WAP Push, notificaciones de mensajes MMS... Existen otros estndares diferentes de GSM, como CDMA2000 o UMTS, en estos el proceso de codificacin de los mensajes se realiza de otra forma, pero el funcionamiento es transparente de cara al usuario. En un principio, los mensajes SMS se definieron en el estndar GSM como un medio para que los operadores de red enviaran informacin sobre el servicio a los abonados, sin que stos pudieran responder ni enviar mensajes a otros clientes. Este tipo de mensajes se denominaban MT-SM(Mobile Terminated-Short Message mensajes que llegan al terminal del usuario). Sin embargo, la empresa Nokia desarroll un sistema para permitir la comunicacin bidireccional por SMS; los mensajes enviados por los usuarios pasaron a denominarse MO-SM (Mobile Originated,originados en el terminal del usuario). Los mensajes de texto son procesados por un SMSC o centro de mensajes cortos (Short Message Service Center) que se encarga de almacenarlos hasta que son enviados y de conectar con el resto de elementos de la red GSM. Para la correcta gestin de los mensajes SMS se hace necesario introducir en el sistema GSM un elemento: el centro de mensajes cortos oSMSC (Short Message Service Center.) Las funciones del SMSC son: Recibir y almacenar los mensajes cortos enviados por los usuarios (MO-SM) o por otras fuentes (avisos del operador, buzn de voz, sistemas de publicidad, alertas de correo electrnico...) hasta que puedan ser enviados. Verificar los permisos para enviar mensajes, en comunicacin con el HLR de origen.

Verificar si el usuario al que se enva el mensaje est operativo o no, mediante consulta al VLR de destino; si est operativo, el mensaje se enva, y si no se almacena temporalmente en el SMSC. Verificar peridicamente el estado de los usuarios que tienen mensajes pendientes.

Cuando un usuario de la red genera un mensaje corto (MO-SM) se producen los siguientes acontecimientos: El HLR donde est registrado el usuario decide si puede o no enviar mensajes, si todo es correcto. El MSC al que est conectado el usuario recibe el mensaje, enva la informacin necesaria al VLR para su posterior tarificacin y despus lo remite al SMSC de origen. El SMSC de origen enva el mensaje al SMSC de destino. Una vez all, se convierte en MT-SM y se procesa como veremos a continuacin. El SMSC de destino informa del estado del mensaje y devuelve un informe de recepcin al MSC y al usuario. En la pantalla del usuario se advierte: mensaje enviado. Si el usuario lo ha solicitado, recibir posteriormente un mensaje de estado confirmndole si el usuario de destino ha recibido el mensaje o no, y un mensaje de error en caso de que caduque.

Una vez hay un mensaje preparado para su envo en el SMSC de destino, originado por un usuario o por cualquier otra circunstancia, se le denomina MT-SM y el proceso de entrega es el siguiente: El SMSC que ha recibido el mensaje lo almacena en su base de datos y solicita al VLR del usuario la informacin de localizacin; Si el usuario destino est disponible, el SMSC enva al MSC el mensaje, indicando en qu parte del BSS debe ser entregado; si no lo est, se almacena en el SMSC durante su periodo de vigencia. Si el usuario destino est disponible, el MSC enva un aviso al VLR al que est conectado el usuario destino (que puede ser o no de su operador) para indicarle que va a entregarse un mensaje. El VLR avisa al terminal del usuario y verifica si est conectado a la red (en zona de cobertura). El VLR responde al MSC con el estado del usuario y, si est operativo, con la informacin de localizacin (parte del BSS en que se encuentra conectado). El MSC enva el mensaje al usuario. El MSC informa al SMSC de que el mensaje se ha entregado y puede ser borrado de su base de datos. Opcionalmente, el SMSC de destino responde a quien origin el mensaje (normalmente, el SMSC origen) con un aviso de entrega del mensaje.

Requisitos para dotar a nuestras aplicaciones de la opcin de envo de SMS desde el PC con mdem GSM
Vamos a explicar lo que se necesita, los requisitos para aadir la opcin de envo de SMS en nuestras aplicaciones, para notificacin a determinados usuarios mediante un SMS cuando sucede algn evento. Por ejemplo, si estamos desarrollando una aplicacin para control de la flota de camiones de una empresa

de Transportes (viajes, portes, reportes, etc.), mediante esta utilidad podramos aadir la opcin de envo deSMS a un camionero desde nuestra aplicacin con los datos del porte que ha de realizar. Por supuesto, existen multitud de utilidades para esta caracterstica de envo de SMS. Los requisitos son: Equipo informtico con puerto serie, en caso de no tenerlo se podr usar un adaptador de USB a Serie, pero es recomendable un equipo con puerto serie (COM) pues los adaptadores pueden no funcionar adecuadamente. Sistema operativo: usaremos un equipo informtico con sistema operativo Micrsoft Windows 7, aunque este mtodo es vlido para cualquier sistema operativo de Microsoft. Mdem GSM, en nuestro caso usaremos un CellRoute GSM de Telecom FM. Estos dispositivos van conectados al PC mediante el puerto serie (tambin los hay con conexin al puerto USB). Tarjeta SIM de mvil con lnea activa y servicio de envo de SMS activo, esta tarjeta ir introducida en el mdem GSM. IDE de desarrollo: en nuestro caso usaremos Microsoft Visual Basic .net del paquete Microsoft Visual Studio .Net 2010.

En la siguiente imagen mostramos un mdem GSM conectado al PC mediante un adaptador USB-Serie:

La tarjeta SIM insertada en el mdem GSM:

Mtodos para obtener los resultados devueltos por el puerto serie


Mtodo simple Para leer los datos devueltos por el puerto serie directamente, hacemos referencia a la lectura de datos programada, es decir que se ejecuta el mtodo de lectura del objeto justo en el momento en que deseamos recibir los datos. Por ejemplo: StrRead = objeto.Read IntRead = objeto.ReadByte IntRead = objeto.ReadChar StrRead = objeto.ReadExisting StrLineRead = objeto.ReadLine Es posible utilizar cualquiera de estos mtodos de acuerdo a las necesidades o al tipo de dato que se espera recibir; en el ejemplo, en las tres primeras letras se indica el tipo de datos a leer. Generalmente este mtodo se aplica a ocasiones en que enviamos datos a un dispositivo y luego esperamos una respuesta. Por ejemplo: serialPort.WriteLine(tstxtSend) 'Se Envia el dato. serialPort.ReadExisting() 'Lee la respuesta.

Mtodo Complejo A menudo estamos interactuando con dispositivos que pueden no requerir una trasmisin de datos en ambos sentidos o que pueden genera informacin de una manera espontnea. Es entonces donde entra en juego el evento DataReceived, el cual se dispara en el mismo momento en que se detecta la llegada de datos al puerto previamente abierto. Este evento se dispara en un hilo o Thread separado;

se pueden manipular los datos en ese hilo de modo separado, como por ejemplo enviarlos a una base de datos. Pero muchas veces se necesita pasar esta informacin al hilo principal para desplegar estos datos en algn objeto del formulario; en este caso necesitaremos utilizar un delegado para invocar un mtodo dentro del hilo principal que contiene la Interfaz de Usuario: Delegate Sub WriteDataDelegate(ByVal str As String)

En el siguiente cdigo se muestra el procedimiento utilizado por el evento:

Private Sub serialPort_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _ Handles serialPort.DataReceived Dim strData As String = serialPort.ReadExisting Dim WriteInvoke As New _ WriteDataDelegate(AddressOf Me.WriteData) Me.Invoke(WriteInvoke, strData) End Sub

Si observamos el cdigo, encontraremos que al dispararse el evento DataReceived lo primero que hacemos es obtener los datos provenientes del disposivo conectado al puerto ya abierto, en este ejemplo se utiliza ReadExisting. Una vez obtenidos los datos provenientes del puerto, procedemos a instanciar el procedimiento WriteData a travs del delegado WriteDataDelegate. Finalmente invocamos el procedimiento previamente instanciado pasando los datos capturados desde el puerto serie. Dentro del procedimiento WriteData colocamos el siguiente cdigo: Private Sub WriteData(ByVal str As String) txtConsole.AppendText(str) End Sub

La razn de que el evento se dispare en hilo separado ofrece sus ventajas y desventajas de acuerdo a la cantidad de informacin a recibir y del procesamiento de esta informacin. Debido a que el Framework utiliza ciertos recursos del sistema para manejar los hilos, sera conveniente no utilizar el evento DataReceived a menos que la situacin lo requiera. Sin embargo, este mismo evento nos da una ventaja enorme cuando, por ejemplo, se recibe una cadena de texto que debe ser analizada, procesada y finalmente almacenada en una base de datos, porque todo este proceso es realizado en hilos separados de la interfaz de usuario. Hay que mencionar que si usamos el evento DataReceived de un componente SerialPort agregado a un formulario de nuestra aplicacin, como en el ejemplo de ms abajo, no ser necesario usar un delegado para acceder a los componentes del formulario.

Desarrollar aplicacin en Visual Basic .Net para envo de SMS mediante puerto serie y mdem GSM
Una vez adquirida la correspondiente licencia e instalado Microsoft Visual Bascic .net (o bien si usamos la versin Trial limitada en el tiempo) abriremos Visual Basic .Net, pulsaremos en el men "Archivo" - "Nuevo Proyecto", seleccionaremos en "Plantillas instaladas" la opcin "Visual Basic" - "Windows", en la parte derecha seleccionaremos "Aplicacin de Windows Forms". En "Nombre" estableceremos el nombre del proyecto, por ejemplo "AjpdSoftEnvioSMS". En el desplegable de la versin de .NET Framework seleccionaremos ".NET Framework 4" (aunque los componentes que usaremos pueden funcionar con versiones inferiores):

En el formulario (ventana) principal de nuestra aplicacin AjpdSoft Envo SMS colocaremos los siguientes componentes, indicamos los ms importantes: System.Windows.Forms.ComboBox: varios desplegables para seleccionar el puerto serie del equipo y otros datos de configuracin. System.Windows.Forms.TextBox: varios cuadros de texto para solicitar el PIN, para introducir comandos AT personalizados, para introducir el nmero de telfono y para introducir el texto del mensaje SMS que se enviar. System.Windows.Forms.Button: varios botones para obtener los puertos serie del equipo, para conectar con el mdem GSM conectado al puerto serie, para establecer el PIN de la tarjeta SIM, para enviar un comando AT personalizado, para enviar un SMS mediante el mdem GSM y el puerto serie. System.Windows.Forms.StatusStrip: barra de estado de la aplicacin donde mostraremos la informacin ms importante (intensidad de la seal del mdem GSM, ID del dispositivo, estado de la red mvil, estado del mdem GSM, etc. System.IO.Ports.SerialPort: componente ms importante que usaremos para conectar nuestro equipo informtico (PC) con el mdem GSM mediante el puerto serie. Este componente ser el encargado de establecer la conexin con el mdem, de enviar los comandos AT necesarios y de obtener el resultado de la ejecucin de cada comando AT.

En las siguientes imagenes mostramos cmo ubicar los componentes anteriores en la ventana principal de nuestra aplicacin para envo de SMS mediante mdem GSM:

En la ventana principal, aadimos un TabControl con tres pestaas, para los componentes de "Envo de SMS", de "Envo de comando AT personalizado" y de "Configuracin del puerto serie y el mdem GSM":

En la pestaa "Enviar comando AT" colocaremos el TextBox para introducir el comando AT personalizado y un Button para enviar el comando:

En la pestaa "Configuracin puerto y mdem GSM" introduciremos los componentes necesarios para personalizar los parmetros de conexin (bits por segundo, paridad, control de flujo, bits de datos, bits de parada, buffer de lectura, buffer de escritura, tiempo de espera, puerto serie, PIN):

10

Indicamos a continuacin el cdigo fuente Visual Basic .Net ms importante de la aplicacin: El botn que obtendr los puertos serie del equipo (btObtenerPuertos):

Private Sub btObtenerPuertos_Click(sender As System.Object, e As System.EventArgs) Handles btObtenerPuertos.Click Dim puertosSerie As List(Of String) Dim i As Integer txtPuerto.Items.Clear() puertosSerie = obtenerPuertosSeriePC() For i = 0 To puertosSerie.Count - 1 txtPuerto.Items.Add(puertosSerie(i).ToString) Next If txtPuerto.Items.Count >= 1 Then txtPuerto.Text = txtPuerto.Items(0) Else txtPuerto.Text = "" End If If puertosSerie.Count = 0 Then MsgBox("No se han detectado puertos serie en su equipo, " + "asegrese de que estn correctamente configurados.", MsgBoxStyle.Information + MsgBoxStyle.OkOnly) End If End Sub

El cdigo de la funcin obtenerPuertosSeriePC usada por el botn anterior ser: 'Obtener los puertos Serie (COM) disponibles en el PC Function obtenerPuertosSeriePC() As List(Of String) Dim puertosSerie As List(Of String)

11

puertosSerie = New List(Of String) Try puertosSerie = New List(Of String) For Each puertosSerieObtenidos As String In My.Computer.Ports.SerialPortNames puertosSerie.Add(puertosSerieObtenidos) Next obtenerPuertosSeriePC = puertosSerie Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical + MsgBoxStyle.OkOnly) obtenerPuertosSeriePC = puertosSerie End Try End Function

Para establecer los valores de conexin al puerto serie por defecto (btDefecto): Private Sub btDefecto_Click(sender As System.Object, e As System.EventArgs) Handles btDefecto.Click lsBitPorSegundo.Text = "9600" lsBitDatos.Text = "8" lsParidad.Text = "Ninguno" lsBitsParada.Text = "1" lsControlFlujo.Text = "Ninguno" txtTamanoBufferLectura.Text = "1024" txtTamanoBufferEscritura.Text = "1024" txtTiempoEspera.Text = "500" End Sub

Para conectar con el puerto serie y obtener los datos bsicos del mdem GSM y la tarjeta SIM (cobertura intensidad de la seal, ID de dispositivo (IMEI), disponibilidad de mdem en puerto indicado, disponibilidad de red mvil para enviar SMS en tarjeta SIM de mdem GSM) (btConectar): Private Sub btConectar_Click(sender As System.Object, e As System.EventArgs) Handles btConectar.Click Dim posBusqueda As Integer Dim resultadoDevuelto As String Try If btConectar.Text = "Conectar" Then If txtPuerto.Text = "" Or txtTamanoBufferEscritura.Text = "" Or txtTamanoBufferLectura.Text = "" Or txtTiempoEspera.Text = "" Or lsBitDatos.Text = "" Or lsBitPorSegundo.Text = "" Or lsBitsParada.Text = "" Or lsControlFlujo.Text = "" Or lsParidad.Text = "" Then MsgBox("Antes de conectar con el puerto serie " & "debe introducir los datos " & "de conexin con el mdem GSM y la tarjeta

SIM.",

12

MsgBoxStyle.Information + MsgBoxStyle.OkOnly) Else abrirPuertoSerie(txtPuerto.Text) 'Comprobar si hay un mdem GSM conectado al puerto serie compPuertoSerie.Write("AT" & Chr(13)) 'Esperamos un segundo para dar tiempo a 'las comunicaciones serie System.Threading.Thread.Sleep(1000) 'Si el comando AT devuelve OK es que hay mdem GSM If compPuertoSerie.ReadExisting().IndexOf("OK") Then bePModem.Text = "Mdem GSM activo" bePModem.ForeColor = Color.Green Else bePModem.Text = "Mdem GSM no encontrado" bePModem.ForeColor = Color.Red End If 'Limpiamos el bugger de datos de entrada 'devueltos por el mdem GSM compPuertoSerie.DiscardInBuffer() 'Comprobar si el mdem mdem GSM est conectado a una red GSM compPuertoSerie.Write("AT+CREG?" & Chr(13)) System.Threading.Thread.Sleep(1000) 'Si el comando AT+CREG? devuelve 0,1 es que hay red mvil If compPuertoSerie.ReadExisting().IndexOf("0,1") Then bePRedMovil.Text = "Red mvil disponible" bePRedMovil.ForeColor = Color.Green Else bePRedMovil.Text = "No hay red mvil" bePRedMovil.ForeColor = Color.Red End If compPuertoSerie.DiscardInBuffer() 'Obtener la intensidad de la seal (cobertura) del mdem GSM 'mximo: 31.99 compPuertoSerie.Write("AT+CSQ" & Chr(13)) System.Threading.Thread.Sleep(1000) resultadoDevuelto = compPuertoSerie.ReadExisting() posBusqueda = resultadoDevuelto.IndexOf("+CSQ: ") If posBusqueda >= 0 Then bpSenal.Minimum = 0 bpSenal.Maximum = 39 bpSenal.Value = obtenerCobertura(resultadoDevuelto) Else bpSenal.Minimum = 0 bpSenal.Value = 0 bpSenal.Minimum = 39 End If compPuertoSerie.DiscardInBuffer() 'Obtener ID del dispositivo GSM (IMEI)

13

compPuertoSerie.Write("AT+CGSN" & Chr(13)) System.Threading.Thread.Sleep(1000) resultadoDevuelto = compPuertoSerie.ReadExisting() posBusqueda = resultadoDevuelto.IndexOf("CGSN") If posBusqueda >= 0 Then resultadoDevuelto = quitarSaltosLinea(resultadoDevuelto, " ") bePID.Text = "IMEI: " & Replace(Mid(resultadoDevuelto, posBusqueda + Len("CGSN") + 1, Len(resultadoDevuelto)), "OK", "") End If btConectar.Text = "Desconectar" End If Else If compPuertoSerie.IsOpen Then compPuertoSerie.Close() End If btConectar.Text = "Conectar" End If Catch ex As Exception MsgBox("Error al abrir el puerto serial: " & ex.Message, MsgBoxStyle.Critical) End Try End Sub

A continuacin listamos el cdigo fuente de las funciones usadas en el botn anterior: Funcin abrirPuertoSerie: 'Abre el puerto serie pasado como parmetro Sub abrirPuertoSerie(ByVal puerto As String) Try With compPuertoSerie If .IsOpen Then .Close() End If .PortName = puerto .BaudRate = CInt(lsBitPorSegundo.Text) .DataBits = CInt(lsBitDatos.Text) Select Case lsBitsParada.Text Case "1" .StopBits = IO.Ports.StopBits.One Case "1.5" .StopBits = IO.Ports.StopBits.OnePointFive Case "2" .StopBits = IO.Ports.StopBits.Two Case "Ninguno" .StopBits = IO.Ports.StopBits.None End Select Select Case lsParidad.Text Case "Par" .Parity = IO.Ports.Parity.Even Case "Impar"

14

.Parity = IO.Ports.Parity.Odd Case "Ninguno" .Parity = IO.Ports.Parity.None Case "Marca" .Parity = IO.Ports.Parity.Mark Case "Espacio" .Parity = IO.Ports.Parity.Space End Select Select Case lsControlFlujo.Text Case "Hardware" .Handshake = IO.Ports.Handshake.RequestToSend Case "Xon / Xoff" .Handshake = IO.Ports.Handshake.XOnXOff Case "Ninguno" .Handshake = IO.Ports.Handshake.None Case "Hardware y Xon/Xoff" .Handshake = IO.Ports.Handshake.RequestToSendXOnXOff End Select .DtrEnable = False .ReadBufferSize = CInt(txtTamanoBufferLectura.Text) .WriteBufferSize = CInt(txtTamanoBufferEscritura.Text) .WriteTimeout = CInt(txtTiempoEspera.Text) .RtsEnable = True .Encoding = System.Text.Encoding.Default .Open() End With Catch ex As Exception MsgBox("Error al abrir el puerto serie: " & ex.Message, MsgBoxStyle.Critical) End Try End Sub Funcin quitarSaltosLinea: 'Funcin para quitar los saltos de lnea de un texto Private Function quitarSaltosLinea(ByVal texto As String, caracterReemplazar As String) As String quitarSaltosLinea = Replace(Replace(texto, Chr(10), caracterReemplazar), Chr(13), caracterReemplazar) End Function Funcin obtenerCobertura: Private Function obtenerCobertura( ByVal texto As String) As Double Dim pos As Integer Dim textoTemp As String texto = quitarSaltosLinea(texto, " ") pos = texto.IndexOf("CSQ:") + Len("CSQ:") + 1 textoTemp = Mid(texto, pos, Len(texto)) textoTemp = Trim(Replace(textoTemp, "OK", "")) obtenerCobertura = CDbl(textoTemp)

15

End Function Establecer el PIN de la tarjeta SIM del mdem GSM (btPIN):

Private Sub btPIN_Click(sender As System.Object, e As System.EventArgs) Handles btPIN.Click Try 'Enviar PIN a tarjeta SIM del dispositivo mdem GSM compPuertoSerie.Write("AT+CPIN=" & txtPIN.Text & Chr(13)) Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical + MsgBoxStyle.OkOnly) End Try End Sub Enviar comando AT personalizado (btEnviarATPrueba): Private Sub btEnviarATPrueba_Click(sender As System.Object, e As System.EventArgs) _ Handles btEnviarATPrueba.Click Try compPuertoSerie.Write(txtComandoAT.Text & Chr(13)) Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical + MsgBoxStyle.OkOnly) End Try End Sub

El botn ms importante, para enviar el SMS (btEnviarSMS): Private Sub btEnviarSMS_Click(sender As System.Object, e As System.EventArgs) Handles btEnviarSMS.Click If Not compPuertoSerie.IsOpen Then tabPes.SelectedTab = tabConfiguracionModem MsgBox("Antes de enviar el SMS debe introducir los datos "

& "de conexin con el mdem GSM y la tarjeta SIM y " & "conectar con el puerto serie.", MsgBoxStyle.Information + MsgBoxStyle.OkOnly) Else If txtNumeroTelefono.Text = "" Or txtSMS.Text = "" Then MsgBox("Debe introducir el nmero de telfono al " & "que se enviar el SMS y el texto del SMS.", MsgBoxStyle.Information + MsgBoxStyle.OkOnly) Else Try 'Activar modo SMS en dispositivo GSM compPuertoSerie.Write("AT+CMGF=1" & Chr(13)) System.Threading.Thread.Sleep(1000) 'Establecer nmero de telfono de destino del SMS compPuertoSerie.Write("AT+CMGS=" & Chr(34) & (txtNumeroTelefono.Text) & Chr(34) & Chr(13))

16

System.Threading.Thread.Sleep(1000) 'Enviar texto SMS a dispositivo GSM compPuertoSerie.Write(txtSMS.Text & Chr(26)) Application.DoEvents() System.Threading.Thread.Sleep(1000) MsgBox("El SMS ha sido enviado al nmero " & txtNumeroTelefono.Text & ".", MsgBoxStyle.Information + MsgBoxStyle.OkOnly) Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical + MsgBoxStyle.OkOnly) End Try End If End If End Sub

Para mostrar el resultado de cada comando AT, usamos el evento DataReceived del SerialPort (compPuertoSerie):

'NOTA: este evento del SerialPort se ejecuta en un Thread 'diferente al de la aplicacin, por lo que los datos devueltos 'por el puerto serie no tienen por qu ser instantneos, puede que tengan retraso Private Sub compPuertoSerie_DataReceived(sender As System.Object, e As System.IO.Ports.SerialDataReceivedEventArgs) _ Handles compPuertoSerie.DataReceived Dim resultadoModemGSM As String Try 'Obtener el resultado devuelto por el puerto serie resultadoModemGSM = compPuertoSerie.ReadExisting.Trim().ToString If txtResultado.Text <> "" Then txtResultado.Text = txtResultado.Text + vbCrLf + resultadoModemGSM Else txtResultado.Text = resultadoModemGSM End If 'Mostrar ltima lnea del TextBox txtResultado.Select(txtResultado.Text.Length, 0) txtResultado.ScrollToCaret() Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical + MsgBoxStyle.OkOnly) End Try End Sub En el evento Load del formulario principal colocamos el siguiente cdigo para desactivar la deteccin a llamadas en subprocesos equivocados: Private Sub formEnvioSMS_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 'Desactivar deteccin a llamadas en subprocesos equivocados CheckForIllegalCrossThreadCalls = False

17

End Sub La descarga con la aplicacin completa AjpdSoft Envo SMS y el cdigo fuente en Visual Basic .Net 2010: AjpdSoft Envo SMS

La aplicacin AjpdSoft Envo de SMS en funcionamiento


Una vez conectado el mdem GSM con su correspondiente tarjeta SIM activa al puerto serie del PC, ejecutaremos AjpdSoft Envo SMS, accederemos a la pestaa "Configuracin puerto y mdem GSM". Pulsaremos en el botn "Establecer valores por defecto":

A continuacin pulsaremos en el botn "Obtener" para listar los puertos serie del equipo:

18

Seleccionaremos el puerto serie donde tengamos conectado el mdem GSM (por ejemplo COM7) y pulsaremos "Conectar" para establecer la comunicacin con el mdem GSM y la tarjeta SIM conectada:

Si todo es correcto, AjpdSoft Envo SMS obtendr los datos bsicos: comprobar si hay un mdem GSM conectado al puerto serie, comprobar si hay red mvil disponible, obtendr el IMEI del mdem GSM y obtendr la intensidad de la seal (cobertura). Mostrar estos datos en la parte inferior:

Si nuestra tarjeta SIM est protegida con un PIN de seguridad deberemos establecerlo para poder usarla. Para indicar el PIN lo introduciremos en "PIN" y pulsaremos el botn "Establecer PIN". Si el PIN es correcto mostrar "OK" en la ventana de resultado de los comandos AT:

19

Desde la pestaa "Enviar comando AT" podremos enviar cualquier comando AT que queramos al mdem, a nos devolver el resultado (si lo hay) en el cuadro "Resultado". Para enviar el comando AT lo introduciremos en "Comando AT", por ejemplo para obtener la primera entrada de la agenda de la tarjeta SIM introduciremos el comando AT: AT+CPBR=1,1 pulsando en el botn "Enviar comando AT" nos devolver el resultado:

Para enviar un SMS a un mvil pulsaremos en la pestaa "Envo de SMS", introduciremos el nmero de telfono de destino del SMS en "N telfomo" y el texto del mensaje SMS que queramos enviar en "Mensaje". Pulsaremos el botn "Enviar SMS":

20

Si el envo se realiza (no implica que llegue el SMS necesariamente al destinatario) mostrar el mensaje:

En el cuadro de resultado mostrar el resultado devuelto por el mdem mediante el puerto serie de los comandos AT ejecutados para enviar el SMS:

el mvil del destinatario, casi instantneamente (depender de los operadores y la saturacin de la red) llegar el SMS enviado desde el PC:
En

Abriremos el mensaje SMS (en nuestro caso en un LG Optimus 2x con Android):

21

Y podremos consultar el mensaje enviado desde el PC con un mdem GSM y AjpdSoft Envo SMS:

Uso de envo de SMS por mdem GSM desde PC


Obviamente el uso que se quiera dar a la opcin de enviar mensajes de texto SMS depender de cada desarrollador y las necesidades de sus programas. Existen multitud de utilidades para usar un mdem GSM y enviar SMS desde un PC, por ejemplo se podra programar una aplicacin que hiciera ping cada cierto tiempo a los servidores de nuestra empresa y, si algn ping falla, enviar un SMS al administrador de sistemas. Otra aplicacin sera aadir la opcin de enviar datos de un viaje por SMS a un camionero en una aplicacin de transportes. Como decimos, esta herramienta es muy interesante para notificaciones instantneas, ms eficiente y rpido que el correo electrnico. Podramos dotar a

22

nuestras aplicaciones de la posibilidad de avisar mediante SMS en determinadas circunstancias. Desde el Proyecto AjpdSoft hemos pretendido mostrar todas las posibilidades del manejo de un mdem GSM para envo de mensajes cortos SMS a mviles. Puesto que tenis el cdigo fuente gratuito y completo de la aplicacin podris modificarlo y usarlo para implementar esta opcin en vuestras aplicaciones: AjpdSoft Envo SMS

Fuente:
http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=562#.UCkahWE0O1g

Instalar Visual Studio 2010 y desarrollar aplicacin con acceso a PostgreSQL


Explicamos en este artculo cmo descargar e instalar la suite de desarrollo Microsoft Visual Studio .Net 2010. Realizamos una aplicacin de ejemplo que accede al motor de bases de datos gratuito PostgreSQL usando ODBC. Explicamos cmo instalar el driver ODBC de PostgreSQL. mostramos tambin un ejemplo de cdigo para conexin con PostgreSQL usando ODBC sin componentes visuales, haciendo un CREATE TABLE, un INSERT INTO y un SELECT.

Descargar e instalar Microsoft Visual Studio 2010. Realizar aplicacin Visual Basic de Visual Studio 2010 con acceso a base de datos PostgreSQL. o Instalar driver ODBC de PostgreSQL en Microsoft Windows 7. o Desarrollar aplicacin con Visual Basic .Net de Visual Studio 2010 con acceso a PostgreSQL usando el asistente para agregar nuevo origen de datos. o Desarrollar aplicacin con Visual Basic .Net de Visual Studio 2010 con acceso a PostgreSQL sin usar componentes visuales. Artculos relacionados. Crditos.

Descargar e instalar Microsoft Visual Studio 2010


23

Abriremos un navegador web como Mozilla Firefox y accederemos a la URL: http://www.microsoft.com/downloads/es-es/details.aspx?FamilyID=06A32B1C-80E941DF-BA0C-79D56CB823F7 (la URL puede variar en funcin de la versin) Descargaremos los cuatro ficheros de Visual Studio 2010 Utilmate (versin de evaluacin):

VS2010UltimTrialESN_4PartsTotal.part1.exe (720MB). VS2010UltimTrialESN_4PartsTotal.part2.rar (720MB). VS2010UltimTrialESN_4PartsTotal.part3.rar (120MB). VS2010UltimTrialESN_4PartsTotal.part4.rar (366MB).

Una vez descargados todos los ficheros, ejecutaremos el fichero VS2010UltimTrialESN_4PartsTotal.part1.exe:

24

Seleccionaremos la carpeta de destino para la descompresin de los ficheros y pulsaremos "Instalar":

Se iniciar la descompresin de los ficheros descargados en el fichero .iso con la instalacin de Microsoft Visual Studio 2010:

Una vez descomprimidos los ficheros, quedar el fichero VS2010UltimTrialESN.iso de 2,5GB, este fichero podremos pasarlo a un DVD como indicamos aqu: Crear CD con imagen ISO y CDBurnerXP Tras crear el DVD (o descomprimir el fichero ISO), ejecutaremos el fichero "setup.exe":

25

Se iniciar el asistente para la instalacin d Microsoft Visual Studio 2010 (versin de evaluacin). Pulsaremos en "Instalar Microsoft Visual Studio 2010":

En el primer paso de la instalacin de Microsoft Visual Studio 2010 Ultimante, desmarcaremos "S, enviar a Microsoft Corporation informacin sobre la instalacin" (si no queremos enviar esta informacin) y pulsaremos "Siguiente":

26

Leeremos los trminos de licencia del software de Microsoft Visual Studio 2010 Ultimate (edicin de prueba). Si estamos de acuerdo marcaremos "He ledo los trminos de la licencia y los acepto". Pulsaremos "Siguiente" para continuar:

A continuacin marcaremos "Personalizar" para seleccionar los lenguajes de programacin y las herramientas que se quieran instalar. En "Ruta de instalacin del producto" indicaremos la unidad y carpeta de destino de la instalacin:

Seleccionaremos los lenguajes a instalar:


Visual Basic. Visual C++. Visual C#. Visual F#.

Seleccionaremos tambin las caractersticas a instalar:


27

Microsoft Office Developer Tools. Dotfuscator Software Services. Microsoft SQL Server 2008 Express. Microsoft SharePoint Developer Tools.

Una vez seleccionadas las caractersticas a instalar pulsaremos en el botn "Instalar":

Se iniciar la instalacin de Microsoft Visual Studio 2010 Ultimate: informe de errores de Microsoft, VC 9.0 Runtime, VC 10.0 Runtime, Microsoft .Net Framework 4, Microsoft Visual Studio 2010 Ultimate, Microsoft ASP .Net, etc.:

Tras la instalacin, el asistente para instalar Visual Studio mostrar la siguiente ventana, con el texto "Correcto. Se instal Visual Studio 2010 y finaliz el programa de instalacin". Pulsaremos "Finalizar":

28

Tras el proceso de instalacin puede que pida reiniciar el equipo:

Con el texto: "Debe reiniciar el equipo para completar la instalacin. El programa de instalacin continuar automticamente despus de haber reiniciado el equipo". Desde el botn "Iniciar" - "Todos los programas" podremos ver el grupo de programas "Microsoft Visual Studio 2010":

29

Tras iniciar por primera vez Microsoft Visual Studio 2010 Ultimate, seleccionaremos la configuracin de entorno predeterminada, por ejemplo "Configuracin de desarrollo de Visual Basic":

Y ya podremos disponer de este entorno de programacin:

Realizar aplicacin Visual Basic de Visual Studio 2010 con acceso a base de datos PostgreSQL
A continuacin realizaremos una sencilla aplicacin que permita conectarse al motor de bases de datos gratuito PostgreSQL, para ello usaremos el driver ODBC correspondiente de PostgreSQL. Realizaremos la aplicacin usando el lenguaje de
30

programacin Microsoft Visual basic .Net de Microsoft Visual Studio 2010 en el sistema operativo Microsoft Windows 7. Nos conectaremos con nuestra aplicacin a un servidor de PostgreSQL en GNU Linux Debian. Por supuesto, para probar la conexin, necesitaremos un servidor (equipo) con PostgreSQL, bien con Windows o bien con Linux. En el siguiente artculo explicamos cmo instalar PostgreSQL en GNU Linux Debian: Instalar el motor de bases de datos PostgreSQL en GNU Linux Debian 5 En este otro artculo explicamos cmo instalar PostgreSQL en Microsoft Windows 7: Instalar y administrar PostgreSQL en Microsoft Windows 7

Instalar driver ODBC de PostgreSQL en Microsoft Windows 7


En primer lugar descargaremos el driver ODBC de PostgreSQL para Microsoft Windows 7, para ello abriremos un navegador web como Mozilla Firefox y accederemos a la URL: http://www.postgresql.org/ftp/odbc/versions/msi Descargaremos el fichero correspondiente a la versin ms reciente, en nuestro caso: psqlodbc_09_00_0200-x64.zip de 1,7MB. Atencin: aunque aqu vamos a instalar PostgreSQL ODBC 64 bits, recomendamos instalar la versin de 32 bits, de lo contario es muy posible que Microsoft Visual Studio no sea compatible. Una vez descargado el fichero haremos doble clic para ejecutarlo (o botn derecho y "Instalar"):

31

Se iniciar el asistente para instalar el driver ODBC de PostgreSQL en Microsoft Windows 7, pulsaremos "Next" para continuar:

Leeremos los trminos de licencia, si estamos de acuerdo marcaremos "I accept the terms in the License Agreement", pulsaremos "Next" para continuar:

Seleccionaremos la ubicacin de los ficheros de instalacin, pulsaremos "Next":

32

Pulsaremos "Install" para iniciar la instalacin final del driver ODBC de PostgreSQL en Microsoft Windows 7:

Si tenemos UAC (Control de cuentas de Usuario) activado, nos mostrar un mensaje de aviso, pulsaremos "S" para continuar:

La instalacin se completar, mostrar el mensaje Completed hte psqlODBC_x64 ( psqlODBC_x32) Setup Wizard. Click the Finish button to exit the Setup Wizard. Pulsaremos "Finish" para finalizar la instalacin:
33

Desarrollar aplicacin con Visual Basic .Net de Visual Studio 2010 con acceso a PostgreSQL usando el asistente para agregar nuevo origen de datos
A continuacin desarrollaremos una aplicacin de ejemplo en Microsoft Visual Basic .Net de Microsoft Visual Studio 2010 que acceder a una base de datos PostgreSQL mediante ODBC. Pulsaremos en el botn "Iniciar" de Windows - "Todos los programas" - "Microsoft Visual Studio 2010" y seleccionaremos "Microsoft Visual Studio 2010":

En el IDE de desarrollo de Visual Basic, pulsaremos en el men "Archivo" - "Nuevo Proyecto":


34

En "Plantillas instaladas" seleccionaremos "Visual Basic" y "Windows". En la parte derecha tendremos las siguientes posibilidades:

Aplicacin de Windows Forms: que ser la que seleccionemos. Aplicacin WPF. Aplicacin de consola. Biblioteca de clases. Aplicacin de explorador WPF. Biblioteca de controles de usuario WPF. Biblioteca de controles personalizados de WPF. Proyecto vaco. Servicio de Windows. Biblioteca de controles de Windows Forms.

Seleccionaremos "Aplicacin de Windows Forms". En el desplegable selecionaremos ".NET Framework 4". En "Nombre" introduciremos, por ejemplo, "AjpdSoftAccesoPostgreSQL". Pulsaremos "Aceptar":

35

Aadiremos el origen de datos a la aplicacin que desarrollaremos, para ello pulsaremos en el men "Datos" - "Agregar nuevo origen de datos":

En el asistente para la configuracin e orgenes de datos, en "De dnde obtendr la aplicacin los datos?" seleccionaremos "Base de datos". Pulsaremos "Siguiente":

Seleccionaremos "Conjunto de datos" en "Qu tipo de modelo de base de datos desea usar?":

36

En la ventana de "Elegir la conexin de datos", en "Qu conexin de datos debera utilizar la aplicacin para conectarse a la base de datos?" pulsaremos en el botn "Nueva conexin":

En "Elegir origen de datos" seleccionaremos "Origen de datos de Microsoft ODBC", en "Proveedor de datos seleccionaremos "Proveedor de datos de .NET Framework para ODBC". Pulsaremos "Continuar":

A continuacin marcaremos la opcin "Usar cadena de conexin" y pulsaremos "Generar":

37

Pulsaremos en la pestaa "Origen de datos de equipo" y pulsaremos en el botn "Nuevo":

Marcaremos "Origen de datos de sistema (se aplica slo a este equipo). Pulsaremos "Siguiente":

Seleccionaremos el origen de datos "PostgreSQL ANSI", pulsaremos "Siguiente":

Pulsaremos "Finalizar":

38

En las opciones del driver psqlODBC de PostgreSQL introduciremos las siguientes opciones:

Data Source: nombre que le daremos al origen de datos para identificarlo en la cadena de conexin, en nuestro caso "bdajpdsoft". Database: nombre de la base de datos PostgreSQL a la que nos conectaremos, en nuestro caso "bdajpdsoft". Description: texto descriptivo de la conexin, por ejemplo "PosgreSQL con Visual Basic". SSL Mode: si tenemos el modo SSL activado en el servidor podremos seleccionar "enable", en caso contrario seleccionaremos "disable". Server: nombre de red (hostname) o IP del servidor de PostgreSQL, en nuestro caso, el servidor PostgreSQL lo tenemos en un equipo con GNU Linux Debian, con la IP 192.168.1.100. Port: puerto usado por PostgreSQL, por defecto 5432. User Name: nombre de usuario de PostgreSQL con permisos suficientes para la accin que realizar la aplicacin, en nuestro caso seleccionaremos el usuario por defecto "postgres". Password: contrasea del usuario anterior.

Pulsaremos en el botn "Test" para comprobar la conexin con el servidor:

Si la conexin se establece correctamente con el servidor de PostgreSQL nos mostrar el siguiente mensaje:

39

Con el texto: "Connection successful". Si la conexin no puede establecerse mostrar un mensaje con el error que se haya producido. Pulsaremos "Aceptar" en la ventana de "Seleccionar origen de datos":

Pulsaremos "OK" en la ventana de "PostgreSQL Connection":

En la ventana de "Agregar conexin", en la opcin "Usar cadena de conexin", nos habr aadido la cadena de conexin resultante de las opciones anteriores, con todos los parmentros seleccionados. Si queremos realizar otra prueba pulsaremos en "Probar conexin":

40

Si todo es correcto, en la prueba de conexin de Visual Basic con el servidor establecido en el driver ODBC nos mostrar el siguiente mensaje:

Con el texto: "La conexin de prueba se realiz correctamente". El asistente para la configuracin de orgenes de datos de Visual Basic .Net nos mostrar la cadena de conexin. En esta ventana podremos seleccionar las siguientes opciones:

Qu conexin de datos deber utilizar la aplicacin para conectarse a la base de datos?: en este desplegable seleccionaremos el driver ODBC creado anteriormente.

En la siguiente opcin nos indica: Esta cadena de conexin parece contener datos confidenciales (por ejemplo, una contrasea) que son necesarios para conectarse con la base de datos. Sin embargo, almacenar datos confidenciales en la cadena de conexin puede suponer un riesgo para la seguridad. Desea incluir estos datos en la cadena de conexin? Y las opciones:

No, excluir los datos confidenciales de la cadena de conexin. Establecer esta informacin en el cdigo de mi aplicacin. S, incluir datos confidenciales en la cadena de conexin.

41

En nuestro caso, para simplificar y mostrar un ejemplo de conexin a PostgreSQL, seleccionaremos "S, incluir datos confidenciales en la cadena de conexin". Pulsaremos "Siguiente":

Nota: la opcin de guardar los datos confidenciales en la cadena de conexin no es recomendable, lo ideal es guardar los datos de usuario y contrasea de la base de datos en un fichero encriptados, no en la cadena de conexin sin encriptar. A continuacin, en "Guardar cadena de conexin en el archivo de config. de la aplicacin" marcaremos "S, guardar la conexin como" e introduciremos un nombre para la cadena de conexin, por ejemplo "bdajpdsoftConnectionString":

Con el texto: El almacenamiento de las cadenas de conexin del archivo de configuracin de aplicacin facilita el mantenimiento y la implementacin. Para guardar la cadena de conexin en el archivo de configuracin de la aplicacin, escriba un nombre en el cuadro y, a continuacin, haga clic en Siguiente. Desea guardar la cadena de conexin en el archivo de configuracin de la aplicacin?

42

A continuacin, el asistente para la configuracin de orgenes de datos, nos mostrar las tablas que encuentre en el servidor de PostgreSQL (para el usuario que hayamos usado en la conexin y la base de datos seleccionada). En nuestro caso marcaremos "factura". En la parte inferior podremos indicar el nombre para el DataSet que crear el asistente de forma automtica, enlazado con el origen de datos y con las tablas, vistas, procedimientos almacenados y funciones seleccionados, en nuestro caso "bdajpdsoftDataSet". Pulsaremos "Siguiente" para continuar:

El asistente habr creado un DataSet con las tablas seleccionadas:

Tambin habr creado un fichero de configuracin para la aplicacin "app.conf":

43

A continuacin aadiremos un DataGridView al formulario de la aplicacin, para mostrar los datos de la tabla "factura" de PostgreSQL. Para ello pulsaremos en "Cuadro de herramientas", en el grupo de componentes "Datos" seleccionaremos "DataGridView":

Colocaremos el DataGridView en el formulario, seleccionaremos la propiedad "DataSource" del DataGridView, en el desplegable seleccionaremos el DataSet y, dentro de ste, la tabla que queramos mostrar, en nuestro caso "factura":

44

Automticamente mostrar los campos de la tabla seleccionada en el DataGridView, seleccionndolo podremos establecer sus propiedades (columnas a mostrar, tamao, caption (nombre), etc.):

Si compilamos la aplicacin pulsando F5 o desde el men "Depurar" - "Iniciar depuracin" podremos ver que nuestra aplicacin Visual Basic .Net de Microsoft Visual Studio 2010 ya accede al servidor PostgreSQL y mostrar los datos de la tabla "factura":

45

Ahora podremos aadir, por ejemplo, un BindingNavigator, del grupo de componentes "Datos":

Dicho componente es una barra de botones con "ltimo", "Anterior", "Siguiente", "Primero", aadir registro, eliminar registro, el registro actual y el nmero de registros. Para enlazar el componente "BindingNavigator" a la tabla "factura" lo seleccionaremos y en la propiedad "BindingSource" seleccionaremos "FacturaBindingSource":

46

Si compilamos la aplicacin pulsando F5 veremos el resultado del componente BindingNavigator y el componente DataGridView:

Desarrollar aplicacin con Visual Basic .Net de Visual Studio 2010 con acceso a PostgreSQL sin usar componentes visuales
Por un lado, en la clase del formulario declararemos los siguientes elementos:
Public Class Form1 'Para la conexin con PostgreSQL sin componentes visuales Public cadenaConexionODBC As String = "DSN=bdajpdsoft;UID=postgres;PWD=0000;" Public conexionBD As New Odbc.OdbcConnection(cadenaConexionODBC) Dim comandoSQL As OdbcCommand = conexionBD.CreateCommand() Public datasetDatosBD As New DataSet Public dataAdaptarDatosDB As New Odbc.OdbcDataAdapter

Aadiremos un botn al formulario, en el evento onClick del botn pondremos el siguiente cdigo:
Private Sub btAccesoPostgreSQL_Click( ByVal sender As System.Object,

47

ByVal e As System.EventArgs) Handles btAccesoPostgreSQL.Click Try conexionBD.Open() MsgBox("Conexin establecida a la base de datos PostgreSQL. ", MsgBoxStyle.Information, "Conexin establecida") 'Ejemplo para crear una tabla en PostgreSQL con Visual Basic y ODBC If MsgBox("Se va a crear una tabla llamada 'cliente' desea continuar?", MsgBoxStyle.YesNo + MsgBoxStyle.Question) = MsgBoxResult.Yes Then comandoSQL.CommandText = "CREATE TABLE cliente (codigo INTEGER, nombre VARCHAR(100))" dataAdaptarDatosDB.SelectCommand = New Odbc.OdbcCommand(comandoSQL.CommandText, conexionBD) dataAdaptarDatosDB.SelectCommand.ExecuteNonQuery() MsgBox("Tabla creada correctamente en PostgreSQL.", MsgBoxStyle.OkOnly + MsgBoxStyle.Information, "Tabla creada") 'Ejemplo para insertar un registro en una tabla PostgreSQL con Visual Basic If MsgBox("Desea insertar un registro de prueba en la tabla 'cliente'?", MsgBoxStyle.Question + MsgBoxStyle.YesNo, "Insertar registro en tabla PostgreSQL") = MsgBoxResult.Yes Then comandoSQL.CommandText = "INSERT INTO cliente (codigo, nombre) values (1, 'Prueba registro')" dataAdaptarDatosDB.InsertCommand = New Odbc.OdbcCommand(comandoSQL.CommandText, conexionBD) dataAdaptarDatosDB.InsertCommand.ExecuteNonQuery() 'Ejemplo de ejecucin de select en PostgreSQL con Visual Basic comandoSQL.CommandText = "select * from cliente" dataAdaptarDatosDB.SelectCommand = New Odbc.OdbcCommand(comandoSQL.CommandText, conexionBD) dataAdaptarDatosDB.Fill(datasetDatosBD) MsgBox("Nmero de registros de la tabla 'cliente': " & _ CStr(datasetDatosBD.Tables(0).Rows.Count), MsgBoxStyle.OkOnly + MsgBoxStyle.Information, "Select ejecutado") End If End If conexionBD.Close() Catch ex As Exception MsgBox("Error en la conexin a la base de datos: " & ex.Message,

48

MsgBoxStyle.Critical) End Try End Sub

En el cdigo anterior mostramos un ejemplo para crear una tabla, un ejemplo para insertar un registro en una tabla y un ejemplo para realizar un select de una tabla:

Fuente: http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=517#.UCkeyFL N7To

49

Potrebbero piacerti anche