El parámetro MultipleActiveResultSets dentro de una cadena de conexión permite mantener conjuntos de resultados múltiples. Si este parámetro se establece en false la aplicación debe procesar o cancelar todos los conjuntos de resultados antes de poder ejecutar cualquier otro dentro de esa conexión.
Un error típico cuando se dehabilita este parámetro es el siguiente:
There is already an open DataReader associated with this Command which must be closed first.
En una cadena de conexión MultipleActiveResultSets es un característica que funciona con sqlserver.
Espero que no tengas el siguiente problema con edmx al publicar en Azure.
Primero expongo la situación en la que me encontré:
Empecé a desarrollar un proyecto con Visual Studio 2013 en el que partía de una base de datos SQLServer Azure ya creada. Añadí un elemento de edmx para crearme las entidades de la base de datos así como las vistas y procedimientos almacenados.
En mi equipo local conectaba con esta base de datos y el contexto de Entity Framework también funcionaba correctamente ya que conseguí agregar el origen de datos de una tabla a mi GridView.
Pues bien, cuando terminé mi desarrollo y me decidí por publicarlo en Azure al llegar a cualquier pantalla donde necesitaba acceder a los datos me daba el siguiente error:
…SQLException Invalid Object Name «dbo.NombreTabla»…
Lo que aparentemente dice este error es que no existe la tabla en la base de datos a la cual me conectaba. Esto me parecía increíble porque ni siquiera estaba trabajando con la base de datos local sino que en el momento de la programación atacaba directamente a la base de datos en Azure y… funcionaba y seguí funcionando, con lo que la cadena de conexión debería de ser la misma.
Después de darle muchas vueltas observé que aparte de publicar mediante la opción «Web Deploy» existe la opción de publicar mediante «ftp». Decidí publicar en azure mediante ftp y finalmente conseguí que funcionara.
Aún no sé porque el método «Web Deploy» no funcionaba correctamente pero si alguien sabe o intuye por qué por favor que nos lo comente.
Como todos sabemos el trabajo de un programador no es perfecto y por eso, haciendo caso al refrán, es mejor prevenir que curar. Un buen desarrollador de software tendrá en cuenta crear un log para monitorizar aquellos errores de programación y de cualquier otro tipo que puedan suceder en la aplicacíón que se desarrolla.
Al respecto el programador tiene varias opciones:
Crearse por sí mismo un sistema de control de errores dentro de su aplicación. Si es hábil podrá migrar este sistema a futuros desarrollos.
Utilizar librerías ya implementadas que cubren la funcionalidad de control de errores.
En mi caso yo recomiendo ELMAH (Error Logging Modules and Handlers) que permite crear un sistema automático de guardado de errores y además crear la infraestructura (tablas y procedimientos en base de datos y librerías .Net) para utilizarlas como servicio de logging.
Este post intentará explicar cómo instalar y configurar ELMAH para una aplicación o sitio web en asp.net.
Paso 1. Descargar las librerías de ELMAH.
El primer paso que deberás hacer es descargarte las librerías de ELMAH en tu sitio web asp.net. Esto lo puedes hacer manualmente (en este enlace) o mediante el administrador de paquetes NuGet de Visual Studio (Menú Tools – Library Package Manager – Manage NuGet Packages for Solution…)
En la ventana emergente buscaremos en nuget.org (Online) con la palabra clave ELMAH y lo instalaremos en nuestra aplicación Web.
Una vez instalado veremos que nos ha referenciado algunas librerías nuevas y nos habrá modificado el web.config.
Paso 2. Ejecutar el script de la base de datos.
ELMAH puede utilizar una base de datos sqlserver para guardar los errores que se van generando. El siguiente paso será crear la estructura de la base de datos a través de un script que podremos descargar aquí.
Paso 3. Utilizar la monitorización de errores.
En este punto ya podremos ver una de las ventajas de ELMAH. Utilizaremos la url http://»misitio.com»/elmah.axd para monitorizar los errores por pantalla.
Por ejemplo,
si lanzamos una excepción manualmente en nuestro código…
lo ejecutamos y después de lanzado el error vamos a la url http://»misitio.com»/elmah.axd veremos una pantalla donde aparece lo siguiente:
Es útil, pero en este punto el error no se ha guardado en la base de datos, de hecho si no te interesa guardarlo en un almacenamiento persistente podrás saltarte el paso 2 y los siguientes.
Paso 4. Configurar la base de datos.
Para enlazar ELMAH con la base de datos es necesario indicarle cual es la cadena de conexión. Para ello deberemos ir al web.config y añadir la cadena de conexión dentro de la sección que define la etiqueta <elmah>
Si nos fijamos en la etiqueta errorLog, se le está indicando que para el tipo de módulo sqlerrorlog utilice la cadena de conexión con el nombre «DefaultConnection» que la hemos definido previamente en el web.config.
Si la cadena de conexión es correcta los errores se empezarán a guardar en este punto en la base de datos.
En futuros posts veremos algunas configuraciones extra que podemos utilizar con ELMAH como son el envío de mails, seguridad, etc…
Cómo realizar una instalación de una aplicación nativa en cliente que utilice una base de datos pero sin tener que realizar la instalación completa de sqlserver u oracle por ejemplo que dificultan el despliegue de todo el sistema.
Para solucionar este problema, de momento, he encontrado estas soluciones.
Desplegar una base de datos de tipo SQL Server CE (Compact Edition) junto a la aplicación. Cómo desplegar una Base de datos SQL Server Compact con una aplicación.
Utilizar SQLite. Es una base de datos que se integra en ficheros casi planos y que es fácil de desplegar con una solución en Visual Studio. Existe una librería en .Net (System.Data.SQLite.dll) que permite acceder. También debe funcionar con Entity Framework pero esto todavía no lo he podido comprobar.
Siempre puedes usar un fichero Access para este tipo de despliegues.
Muchas tecnologías avanzan vertiginosamente hacia un futuro que seguramente no podamos ni imaginar. Este mismo futuro no nos permite ni un solo descanso y nos obliga a seguir aprendiendo. En el área del desarrollo y programación web pasa lo mismo.
Cada cierto tiempo los lenguajes de programación como ASP.Net, PHP, silverlight, etc. realizan cambios y mejoras en su framework aumentando, refinando y adaptando su funcionalidad y, al mismo tiempo, dejando poco a poco obsoletas versiones anteriores.
Por eso es recomendable utilizar las últimas tecnologías al servicio de los clientes. Tecnologías Web:
Web 2.0 – jQuery, XHTML, HTML5, AJAX
PHP 5.x
.Net 4.0 y .Net 4.5 – ASP.Net, Silverlight, Web Services, WCF, Entity Framework
Datos y SGDB – SqlServer, Oracle, MySql, Pervasive, ODBC, XML, csv…
Servidores Web – IIS 6, IIS 7 y Apache.
Si lo prefiere para posibles mantenimientos de antiguos sitios web también tengo amplia experiencia en las versiones anteriores de PHP, ASP Clásico, ASP.Net (1.0, 2.0, 3.0 y 3.5) y joomla 1.6