lunes 13 de diciembre de 2010

Obtener el máximo valor numérico de una columna tipo texto o varchar con NHibernate

El problema de obtener el máximo valor numérico de una columna varchar o texto utilizando NHibernate con SQL Server aparece cuando hay valores que no se pueden convertir con cast o convert.

Suponiendo la siguiente consulta:

SELECT max(cast(ban_codigo as INT)) FROM Banco

Siendo ban_codigo un varchar(10)

y donde tenemos los siguientes valores para dicha columna:

0000000003
0000000004
0000000055
0000000232
0000000233
0000000234
b1
b2
b3
b4

al ejecutar la consulta obtenemos:

Mens. 245, Nivel 16, Estado 1, Línea 1
Error de conversión al convertir el valor varchar 'b1' al tipo de datos int.


Para solucionar esto podemos utilizar la función isnumeric(valor) de SQL server de la siguiente manera:

SELECT max(cast(ban_codigo as INT)) FROM Banco
where isnumeric(ban_codigo) = 1

al ejecutar la consulta obtenemos:

234
Ahora bien, la función isnumeric(valor) no es soportada directamente en el dialecto MsSql2008Dialect de NHibernate, por lo cual debemos adicionar una restricción Eq que contenga como IProjection una Proyección de tipo SqlFunction que contenga una nueva StandardSQLFunction.

Projections.SqlFunction(new StandardSQLFunction("isnumeric", NHibernateUtil.String), NHibernateUtil.Boolean, Projections.Property("Nombre de Columna"))


Ej:


int maximo = (int)session.CreateCriteria(
                    typeof(Banco).ToString()).Add(
                        Restrictions.Eq(
                            Projections.SqlFunction(
                                new StandardSQLFunction("isnumeric", NHibernateUtil.String),
                                NHibernateUtil.Boolean, Projections.Property("Codigo")),
                                1))
                    .SetProjection(
                        Projections.Max(
                            Projections.Cast(
                                NHibernateUtil.Int32,
                                Projections.Property("Codigo")
                                )
                            )
                        )
                    .UniqueResult();

jueves 5 de agosto de 2010

Accediendo al servidor de desarrollo de ASP.NET (ASP.NET Development server) en forma remota.

Una de las cosas que hace tan sencilla la depuración a ASP.NET es el servidor de desarrollo de ASP.NET (ASP.NET Development server). Con este servidor se puede probar y depurar el código de ASP.NET en Visual Studio simplemente pulsando F5.

Como es sabido, cuando se depura ASP.NET en su escritorio, el navegador accede a su sitio de desarrollo ASP.NET mediante una referencia URL localhost y un puerto específico para la instancia del servidor de desarrollo de ASP.NET. Algo como esto ...

http://localhost:3804/MyWebSite/Default.aspx

Si tienes un iPhone, iPod Touch, Windows Mobile, dispositivo BlackBerry o simplemente queres probrar desde otra máquina en la red local o Wi-Fi, lo razonable sería poder acceder a su sitio de desarrollo mediante el uso de la misma dirección URL reemplazando localhost por la dirección IP o el nombre de la PC. Suponiendo que la dirección IP de la maquina donde estas es: 192.169.1.100, la dirección se parecería a esto ...

http://192.168.1.100:3804/MyWebSite/Default.aspx

Desafortunadamente, el navegador de su dispositivo indica que el sitio no puede ser alcanzado.

La cuestión es que por razones de seguridad, el servidor de desarrollo de ASP.NET no acepta las conexiones emitidas por otros equipos.

Entonces, ¿cuál es la solución? ... Hacerle creer a el servidor de desarrollo de ASP.NET que la conexión desde el dispositivo está ocurriendo en la pc local.

Esto se hace fácilmente con cualquier tipo de software de reenvío de puerto. Este es un software que se ejecuta en la pc local que acepta las conexiones HTTP en un puerto y luego reenvía todo lo recibido en ese puerto a otro puerto.

Hay cualquier cantidad de aplicaciones que hacen esto. El que yo uso, es en realidad un herramienta antigua que he usado durante años a partir del Microsoft SOAP Toolkit 3.0, el llamado "Trace Utility". Se puede descargar la utilidad desde aquí (es gratuita). Si ya se dispone de una herramienta de red que soporta el reenvío de puertos, utilícela.

Si se decide usar el Trace Utility del SOAP Toolkit, al instalar el SOAP Toolkit, solo se debe seleccionar la característica: “Debugging Utilities” . El resto de los caracteristicas del instalador se utilizan para el desarrollo SOAP basado en COM que no es relevante para lo que estamos haciendo.

En el caso de utilizar el Trace Utility del SOAP Toolkit, todo lo se que necesita hacer para habilitar el reenvío de puerto es:

Iniciar la utilidad

Seleccionar:  File - Formatted Trace

Pregutará el puerto de escucha (Local Port) y hacia donde lo redirige (destination host/port)

El puerto de escucha (local port) por defecto es el 8080, el que en la mayoría de los casos se puede dejar así.

El host de destino por defecto es localhost, el que también lo podemos dejar como está, pero recomiendo poner 127.0.0.1 ya que en Windows 7 hay veces que localhost no funciona bien.

En el puerto de destino debemos poner el puerto específico para la instancia del servidor de desarrollo de ASP.NET ej: 3804

Hacer click OK.

Con esto, ahora se tiene la redirección de puertos en su lugar.

Ahora en su dispositivo, introduzca la dirección URL utilizando su número de ip local (o nombre de la pc)más el puerto 8080, de esta manera.

http://192.168.1.100:8080/MyWebSite/Default.aspx

Ahora se podrá ingresar bien desde su iPhone, iPod Touch, Windows Mobile, BlackBerry o cualquier otro dispositivo.

El funcionamiento es muy simple... el dispositivo se conecta a la utilidad y la utilidad se conecta al servidor ASP.NET. Debido a que la utilidad se ejecuta en su pc, el servidor ASP.NET acepta la conexión normalmente.

Espero que les resulte tan útil como a mi


fuente: http://www.pluralsight-training.net/community/blogs/jimw/archive/2009/09/03/accessing-the-visual-studio-asp-net-development-server-from-iphone.aspx

lunes 24 de agosto de 2009

Problema con Microsoft Visual Studio web authoring component o Componente de creación web de Microsoft al intentar instalar visual studio

Solución:

Se debe desinstalar el componente InfoPath MUI 2007 que viene con Office 2007 y es una versión beta.

Procedimiento:

Ir a INICIO > EJECUTAR y escribir:

msiexec /x {30120000-0044-0C0A-0000-0000000FF1CE}

Aceptar.

Listo, puedes instalar Visual Studio 2008.

Error al intentar correr una aplicación ASP.NET en Windows Vista o 7

Al intentar correr una aplicación ASP.Net en el servidor de desarrollo, en el navegador nos aparece un mensaje advirtiendo que no se puede encontrar la página.

Generalmente este error se da en Windows Vista y 7.

Solución:

Ejecutar un editor de texto (notepad o algún otro) en modo administrador y editar el archivo C:\Windows\System32\Drivers\Etc\hosts (sin extensión) y remover la siguiente línea:

::1 localhost

Guardar el los cambios e intentar nuevamente correr la aplicación.