SQL que encuentra coincidencias de un string sin usar LIKE en un .XSD de ASP.NET 2

Estoy usando .NET 2. Tengo mi archivo .XSD (Data Layer) y mi Business Logic.

El caso es que en el .XSD estoy poniendo esta consulta:

SELECT * from tabla where nombre LIKE ?

Yo quería encontrar cualquier campo que contuviera el string solicitado, es decir, si alguien buscaba “pa”, la sentencia debía regresar valores como “paco”, “palabra”, “pais”, etc. Pero con el LIKE solamente regresaba el valor si la coincidencia era exacta.

Otros intentos que hice fueron:

SELECT * from tabla where nombre LIKE '%?%'

SELECT * from tabla where nombre LIKE %?%

SELECT * from tabla where nombre LIKE %?%

Ninguno sirve porque al parecer al definir la sentencia SQL en el archivo .XSD, el signo de interrogación no puede tener ningún comodín.

Entonces busqué alguna función que pudiera ayudarme, y al final lo logré. La sentencia debe quedar así:

SELECT * from tabla where (INSTR(nombre,?) > 0)

INSTR(str,substr) devuelve la posición de la primera ocurrencia de substring en la cadena de texto str.

Así que si devuelve un número mayor a cero, significa que lo encontró.

Ahora bien, siendo más estrictos, lo que yo quería era que encontrara el principio de la palabra. Es decir, si alguien buscaba por “yo” debería encontrar “yolanda”, pero no “pelayo”. Entonces necesitaba algo que le indicara que buscara solamente al principio del campo.

Así es como lo logré:

SELECT * from tabla where nombre REGEXP CONCAT('^',?)

expr REGEXP pat realiza una búsqueda de expresiones regulares en la cadena expr usando el modelo pat.

CONCAT(cad1, cad2, ...) une cadenas de texto.

Es decir que al ejecutarse:
SELECT * from tabla where nombre REGEXP CONCAT('^','yo')

Se convierte en:
SELECT * from tabla where nombre REGEXP '^yo'

Como sabes, el símbolo ^ en expresiones regulares, significa el inicio de una palabra.

El signo ‘?’ es por si estás utilizando MySQL.

Si utilizas SQL Server, cambia el ‘?’ por ‘@Nombre’ o cualquiera que sea el nombre de tu parámetro.

Para mayor información:
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html

Archivo .bat para apagar un servidor Windows desde otra PC en la misma red

Si usas un servidor local seguramente tienes la pura caja, sin monitor ni teclado. Cuando trabajas en el servidor lo haces usando Escritorio Remoto (Remote Desktop). Si es así, te gustará este tip para apagar tu servidor haciendo doble clic en un archivo .bat desde cualquier PC en tu red local.

Simplemente abre un bloc de notas y teclea lo siguiente:

shutdown /s /m servidor

Guarda el archivo como apagar.bat. Listo, ahora dale doble clic y tu servidor se apagará.

Nota: Debes estar autenticado en el servidor. Es decir, conéctate al servidor tecleando servidor en el explorador de windows y proporciona tu nombre de usuario y contraseña.

Si ejecutaste el archivo apagar.bat e inmediatamente después te das cuenta de que no lo querías apagar, debes ejecutar el siguiente comando para abortar el apagado:

shutdown /a /m servidor

Solamente funciona si lo haces en 30 segundos o menos después de haber enviado el primer comando.

Igual que antes, puedes teclear esto en un archivo y llamarlo abortar.bat para tenerlo a la mano en caso de que te arrepientas.

Crea una tercera sesión de Escritorio Remoto (Remote Desktop)

Cuando intentas conectarte a tu servidor con Escritorio Remoto (Remote Desktop) obtienes el siguiente error:

Servicios de Terminal Server ha sobrepasado el número máximo de conexiones permitidas. El sistema no puede iniciar su sesión en (1B8E). Vuelva a intentarlo o consulte a su administrador del sistema.

En inglés:
The terminal server has exceeded the maximum number of allowed connections. The system cannot log you on (1B8E). Please try again or consult your system administrator.

La razón es que el servidor solamente acepta 2 sesiones remotas, ya sea activas o desconectadas. Es decir, abriste dos sesiones y las dejaste abiertas (simplemente cerraste las conexiones cerrando la ventana de Escritorio Remoto en vez de hacer clic en Inicio -> Cerrar sesión).

Afortunadamente puedes crear una tercera sesión ejecutando este comando desde una ventana de MS-DOS:

c:>mstsc /v:ip_del_servidor /console

Esto te permitirá conectarte a la sesión de consola de tu servidor, y una vez dentro te recomiendo matar las sesiones que se quedaron activas.

Por cierto, si piensas reiniciar tu servidor, la manera más confiable de hacerlo es desde la sesión de consola.

Como enviar mensajes de correo electrónico con System.Net.Mail

Para enviar mails con ASP.NET 2 necesitas utilizar System.Net.Mail.

Antes que nada, no olvides importar la librería:

  1. Imports System.Net.Mail

Para enviar el e-mail la sintaxis es la siguiente:

  1. Dim mail As New MailMessage()
  2. 'Para enviar mensaje en HTML
  3. mail.IsBodyHtml = True
  4.  
  5. 'A quien se le envia
  6. mail.To.Add("destinatario@ejemplo.com")
  7. mail.To.Add("OtroDestinatario@ejemplo.com")
  8. 'Con copia para
  9. mail.CC.Add("Copia@ejemplo.com")
  10. 'Con copia oculta
  11. mail.Bcc.Add("CopiaOculta@ejemplo.com")
  12. 'De parte de quien
  13. mail.From = New MailAddress("DeParteDeQuien@ejemplo.com", "Juan Pérez")
  14.  
  15. 'Si necesitas agregar una direccion de respuesta distinta
  16. mail.ReplyTo = New MailAddress("AQuienResponder@ejemplo.com", "Elisa Romero")
  17. 'Asunto
  18. mail.Subject = "Hola amigos"
  19. 'Cuerpo
  20. mail.Body = "<b>Hola, como están</b> todos?"
  21.  
  22. 'Por si necesitas aniadir archivos adjuntos
  23. mail.Attachments.Add(New Attachment("c:archivo1.jpg"))
  24. mail.Attachments.Add(New Attachment("c:archivo2.jpg"))
  25.  
  26. Dim smtp As New SmtpClient("127.0.0.1")  'La direccion IP del servidor SMTP
  27. 'Si deseas autenticacion usa la siguiente linea
  28. smtp.Credentials = New Net.NetworkCredential("login", "password")
  29. 'Listo, envia el mail
  30. smtp.Send(mail)

Crea tu propio validador (CustomValidator)

Para implementar tu propia lógica en un validador utiliza un CustomValidator.

En la página aspx agrega la propiedad OnServerValidate al validador y dale como valor el nombre de una función que tú mismo escribirás.

  1. <asp:customvalidator id="CustomValidator1" runat="server" CssClass="validador" Display="Dynamic" ErrorMessage="Debe seleccionar al menos un grupo" OnServerValidate="validaGrupos"></asp:customvalidator>

En el archivo aspx.vb (o en la porción de código de servidor de tu archivo aspx) implementa la función, como se muestra a continuación. Si tu lógica indica que el dato es aceptado, establece args.IsValid a true, y si no, a false.

  1. Sub validaGrupos(ByVal sender As Object, ByVal args As ServerValidateEventArgs)
  2.    Dim vacio As Boolean
  3.    vacio = True
  4.    Dim elemento As ListItem
  5.    For Each elemento In Grupos.Items
  6.       If elemento.Selected = True Then
  7.           vacio = False
  8.       End If
  9.    Next
  10.    args.IsValid = Not vacio
  11. End Sub