Foros del Web » Programando para Internet » ASPX (.net) »

Select Case String.Empty/Nothing

Estas en el tema de Select Case String.Empty/Nothing en el foro de ASPX (.net) en Foros del Web. Saludos, Tengo un problema, Cuando halla una consulta de un solo Registro quiero diferenciar: Si salió la consulta correcta, si no se encontro el Registro ...
  #1 (permalink)  
Antiguo 10/02/2010, 08:44
Avatar de jsrc1990  
Fecha de Ingreso: enero-2009
Mensajes: 95
Antigüedad: 15 años, 3 meses
Puntos: 0
Pregunta Select Case String.Empty/Nothing

Saludos,

Tengo un problema, Cuando halla una consulta de un solo Registro quiero diferenciar: Si salió la consulta correcta, si no se encontro el Registro ó si hubo un problema de Conexion con el Servidor, para luego mostrar por mensaje, bien.

Me vuelo todo el proceso de Conexion del ExecuteScalar porque los duermo , solo especifico que cuando:

"Valores en el String" = Valores consultados Correctamente
Nothing = No encontro algun Registro
String.Empty = Error en el Servidor

Dim String1 As String

String1 = String.Empty / Nothing

Select Case String1
Case String.Empty
MsgBox("String.Empty")
Case Nothing
MsgBox("Nothing")
Case Else
MsgBox("Correcto")
End Select

Pero resulta que si el String1 contiene ya sea un String.Empty o un Nothing, pasa por cualquiera de los 2 Cases descritos anteriormente, NO HAY DIFERENCIA entre uno y el otro, tambien he provado con "", pero tambien vale lo mismo y no lo hago con Numeros porque en el caso de que cargue algun Numero puede causar problemas de comparacion

Quiero hacerlo Con Select Case ya que el Valor String1 lo Evalua una vez.

Alguien conoce alguna forma de Diferenciar con Select Case si es Nothing o Empty.String?

Gracias de Antemano.

Jsrc1990
  #2 (permalink)  
Antiguo 10/02/2010, 09:23
 
Fecha de Ingreso: mayo-2009
Mensajes: 6
Antigüedad: 15 años
Puntos: 0
Respuesta: Select Case String.Empty/Nothing

Hola,

estuve probando el código rápidamente y es raro que no funcione, pero probe con esto y funciona perfectamente.

Código ASP:
Ver original
  1. Dim string1 As String = String.Empty
  2.  
  3.         If string1 Is String.Empty Then
  4.             Console.WriteLine("String.Empty")
  5.         ElseIf string1 Is Nothing Then
  6.             Console.WriteLine("Nothing")
  7.         Else
  8.             Console.WriteLine("Correcto")
  9.         End If

ya me contará =)

Un saludo.
  #3 (permalink)  
Antiguo 10/02/2010, 09:47
Avatar de jsrc1990  
Fecha de Ingreso: enero-2009
Mensajes: 95
Antigüedad: 15 años, 3 meses
Puntos: 0
Pregunta Respuesta: Select Case String.Empty/Nothing

Hola, gracias por responder , pues si de esa ya la habia provado y si funciona, lo malo es que valida el String1 en todos los elseif y con Select Case solo 1 vez por todos los cases.

Tambien he provado con Case Is = ... y lo mismo, Case Is DBNull.Value no se puede, Case Is = DBNull.Value no lo permite, con VariantType.Empty;VariantType.Null, vbEmpty; vbNull, pero lo malo es que la representacion es en Numeros y si cargara por eje un Consecutivo y se choque con un 0 o un 1 que son las representaciones daria error cuando en realidad no lo es.

Y no se que hacer, estaré destinado a usarlo de esa forma?

Mas ideas?

Jsrc1990
  #4 (permalink)  
Antiguo 10/02/2010, 15:10
 
Fecha de Ingreso: mayo-2009
Mensajes: 6
Antigüedad: 15 años
Puntos: 0
Respuesta: Select Case String.Empty/Nothing

Hola de nuevo,

Yo creo que a lo mejor es un error del compilador y si por ejemplo string1 es nothing al hacer la comprobación directamente le da igual el string.empty y lo convierte siempre a nothing y viceversa.

Y en cuanto a lo de que en el if comprueba todos y en el case solo una vez ¿que mas da?, cuanta diferencia hay 1 microsegundo quizas? y recuros, 1 bit? no se no cuesta nada.

ya me contará como le va en eso.

Un saludo.
  #5 (permalink)  
Antiguo 10/02/2010, 15:26
Avatar de jsrc1990  
Fecha de Ingreso: enero-2009
Mensajes: 95
Antigüedad: 15 años, 3 meses
Puntos: 0
De acuerdo Respuesta: Select Case String.Empty/Nothing

Hola, gracias nuevamente por responder ,

Bueno pues si, será error del compilador que los toma por igual, pero con Select Case me ahorraria no unicamente la Validacion del String1 en cada Elseif, si no que ademas la creacion de un Nuevo objeto en Memoria; String1 ya no existiria!! ya que haria algo asi:

Select Case Conexion1.Consultar_Codigo(TbxCodigo.Text)
Case String.Empty
MsgBox("String.Empty")
Case Nothing
MsgBox("Nothing")
Case Else
MsgBox("Correcto")
End Select

y me saltaria la Asignacion y luego la susodicha comprobación, pero bueno..., hecho y pecho me tocara continuar con los Elseif, de todas formas si encuentras o alguien encuentra alguna solucion favor me diga.

Gracias de Verdad.

Jsrc1990
  #6 (permalink)  
Antiguo 10/02/2010, 15:34
 
Fecha de Ingreso: mayo-2009
Mensajes: 6
Antigüedad: 15 años
Puntos: 0
Respuesta: Select Case String.Empty/Nothing

Hola,

Pero intentando ahorrar cuanta memoria repito 5bits? 1kb? no se pero ahora ahorrar eso es perder el tiempo la verdad, ya no es tan necesario ahorrar memoria como antes, ahora la regalan xD asi que no pasa nada por unos cuantos kb.

Un saludo.
  #7 (permalink)  
Antiguo 10/02/2010, 15:37
Avatar de jsrc1990  
Fecha de Ingreso: enero-2009
Mensajes: 95
Antigüedad: 15 años, 3 meses
Puntos: 0
De acuerdo Respuesta: Select Case String.Empty/Nothing

Haha, ok ok, jeje Me molesta tener que crear un String de mas y me llena mas las lineas de Codigo, pero bueno..

Jsrc1990
  #8 (permalink)  
Antiguo 11/02/2010, 02:13
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Select Case String.Empty/Nothing

Sinceramente, creo que la forma más correcta de comprobar si ha habido un problema de conexión es mediante la captura de excepciones. Esto te permitirá saber si ha fallado al abrir la conexión, al ejecutarla o al acceder a un campo.

Por otro lado, ya que ha salido la discusión, un Select Case es más optimo que un If, ya que internamente funciona con una función de Hash y una tabla precalculada que permite saber exactamente a que parte del código a de saltar para ejecutar.

En cuanto a que en el ejemplo con los if's puesto por mortenor
Cita:
Y en cuanto a lo de que en el if comprueba todos y en el case solo una vez ¿que mas da?, cuanta diferencia hay 1 microsegundo quizas? y recuros, 1 bit? no se no cuesta nada.
Eso en su código es falso. No tiene porque comprobar todos los if's, eso solo pasaría en el caso peor, pero independientemente de eso siempre hay que mirar de programar lo mejor posible. Es más eficiente y más limpio el código con select case que con if's anidados. Ya no se trata de "arañar 1 bit" sino de legibilidad del código. Yo, entre programar mal y programar bien, prefiero programar bien :)
__________________
Aviso: No se resuelven dudas por MP!
  #9 (permalink)  
Antiguo 11/02/2010, 12:57
 
Fecha de Ingreso: mayo-2009
Mensajes: 6
Antigüedad: 15 años
Puntos: 0
Respuesta: Select Case String.Empty/Nothing

Hola,

Malenko estoy totalmente de acuerdo con usted, siempre hay que buscar hacer un código optimo, pero yo hice enfasis en lo del espacio porque jsrc1990 parecia que era lo que mas le preocupaba, tener un objeto en memoria.

Además asi sea menos optimo no creo que se pueda hacer con case, de verdad que lo he intentado jeje.

Un saludo ^^
  #10 (permalink)  
Antiguo 11/02/2010, 14:08
Avatar de jsrc1990  
Fecha de Ingreso: enero-2009
Mensajes: 95
Antigüedad: 15 años, 3 meses
Puntos: 0
De acuerdo Respuesta: Select Case String.Empty/Nothing

Saludos,

Y es que no es solo el hecho de tener un objeto más en memoria sino tambien porque como expresé anteriormente:

Cita:
Me molesta tener que crear un String de mas y me llena mas las lineas de Codigo
Me hace el codigo mas cargado ya que hay que agregar mas lineas de codigo dejandolo mas sucio y menos limpio (No muy leible) como expresa makenlo, yo me esfuerzo porque el codigo sea lo mas posiblemente comprendible, pero si la herramienta no da para más, bueno que da, toca seguir adelante con lo que tienes y no echarse a morir como en la vida real.

Ahora bien, si encuentras la solucion, aplicala... y en cuanto a la solución pensando yo, podria reservar una frase que: tenga un nombre extraño la cual nadie registre (Muy poco seguro uno nunca sabe con lo que salen los usuarios ), no se pueda registrar en la Bd mediante un if antes de registrar o con un Check de Sql Server, la cual ya no sea de comparar String.Empty, sino por ejemplo "Error_Servidor":

Código ASP:
Ver original
  1. Select Case Conexion1.Consultar_Usuario(TbxUsuario.Text)
  2. Case Nothing
  3. MsgBox("Nothing")
  4. Case "Error_Servidor"
  5. MsgBox("Error")
  6. Case Else
  7. MsgBox("Correcto")
  8. End Select
__________________________________________________ _____________
Código ASP:
Ver original
  1. .
  2. .
  3. .
  4. Try
  5. SqlConnection1.Open()
  6. Object1 = SqlCommand1.ExecuteScalar()
  7. Catch e As Exception
  8. MsgBox("Error = " + e.Message)
  9. Object1 = "Error_Servidor" 'Ya no String.Empty
  10. Finally
  11. SqlConnection1.Close()
  12. End Try
  13.  
  14. Return Object1

Que os pareceis, que os agregais, cual de las 3 formas pensarian seria la mas optimar para reservar la frase?

Jsrc1990

Etiquetas: case, select, aspx
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:58.