Buscar

Javier's blog

Javier's blog about Software Architecture, Design and Development

Categoría

es-co

Proyecto Web C# para Principiantes en CodePlex

Hola a tod@s,

Debido a la gran aceptación del proyecto didáctico CRM y a los comentarios positivos recibidos en el post original (28 de Noviembre de 2011) he decidido subir el código fuente a http://crmprj.codeplex.com/ en CodePlex para facilitar la participación y sincronización del trabajo en el. A partir de este momento los interesados pueden participar en este desarrollo.

Este proyecto es un ejemplo básico de una aplicación Web en C# y sus propósitos son educativos para que principiantes, aprendices y en general, quienes inician en el desarrollo en C# tengan un punto de partida en sus trabajos académicos o profesionales. Este proyecto es liberado «AS IS».

Saludos,

Javier Andrés Cáceres Alvis

Microsoft Most Valuable Professional -MVP-
Intel Back Belt Software Developer

Login Failed for user: «sa» – C#

Un lector del blog me pregunta el porqué se le presenta una excepción llamada «Login Failed for user: userName» en una aplicación desarrollada con C#. Las propiedades de la conexión en SQL Management Studio y la excepción se muestran en las siguientes imágenes:

Así mismo el lector comenta que ha probado con Integrated Security=True y con el User ID con el cual ha iniciado sesión en Windows pero aún no logra conexión, como se muestra en la siguiente imágen:

Después de revisar las imágenes encontré que en la cadena de conexión no se está utilizando el User ID de la cadena de conexión con el formato: nombreMaquina\nombreUsuario (teniendo en cuenta que la máquina no hace parte de un dominio, en caso que si hiciera parte de un dominio el formato del User ID debería ser: nombreDominio\nombreMaquina). La forma de evitar la excepción es simplemente utilizando el User ID en el formato correcto (nombreMaquina\nombreUsuario).

Aprovecho ésta ocasión para recomendar el repositorio de cadenas de conexión más grande y tradicional en la web, el legendario: http://www.connectionstrings.com/. La importancia de éste sitio es tan grande que me atrevería a decir que la cadena de conexión que no se encuentre allí no existe.

Saludos,

Javier Andrés Cáceres Alvis

Intel Black Belt Software Developer

Microsoft Most Valuable Professional

En Que Casos se Debe Usar un SqlCommand o SqlDataAdapter en C#

[Update 11-Aug-2012:  Si quiere saber mas sobre la arquitectura en la que esta basado el DataSet/DbDataAdapter puede ver el siguiente post: Are Typed DataSets dead? Si quiere saber mas sobre optimizar el llenado de los DataSet sin DbDataAdapter puede visitar el siguiente post: Filling a DataSet with the Data Application Block]

Hola a todos,

Un lector del blog me hace la siguiente pregunta:

en que casos se debe usar un SqlCommand o un SqlDataAdapter;  Solo con el SqlDataAdapter pude hacer una consulta general

Un SqlCommand se utiliza cuando necesitas ejecutar un tipo de sentencia Sql a la base de datos (los tipos pueden ser: Delete, Update, Insert o Select). Por su parte el SqlDataAdapter se utiliza si requieres ejecutar más de un tipo de sentencia Sql o si trabajarás en escenarios desconectados.

Ejemplo de SqlCommand:

        public List Listar()
        {
            SqlConnection con = new SqlConnection(cadenaConexion);
            SqlCommand com = new SqlCommand("LISTAR_CAMPANAS", con);
            com.CommandType = System.Data.CommandType.StoredProcedure;

            con.Open();

            SqlDataReader drCampanas = com.ExecuteReader();
            List listaCampanas = new List();

            while (drCampanas.Read())
            {
                listaCampanas.Add(Cargar(drCampanas));
            }

            drCampanas.Close();
            con.Close();
            return listaCampanas;
        }

Ejemplo de SqlDataAdapter (basado en el ejemplo anterior pero levemente modificado):

 public List Listar()
 {
 SqlConnection con = new SqlConnection(cadenaConexion);
 SqlCommand com = new SqlCommand("LISTAR_CAMPANAS", con);
 com.CommandType = System.Data.CommandType.StoredProcedure;
 SqlDataAdapter da = new SqlDataAdapter(com);
 con.Open();

 SqlDataReader drCampanas = da.SelectCommand.ExecuteReader();
 List listaCampanas = new List();

 while (drCampanas.Read())
 {
 listaCampanas.Add(Cargar(drCampanas));
 }

 drCampanas.Close();
 con.Close();
 return listaCampanas;
 }

En el ejemplo anterior se muestra como un SqlDataAdapter puede contener a un SqlCommand (llamado «com» en el ejemplo) que representa una sentencia Select; de igual forma, se puede agregar comandos que representen las sentencias Insert, Update y Delete utilizando sus respectivas propiedades:

            SqlCommand dummyCommand = new SqlCommand();
            da.UpdateCommand = dummyCommand;
            da.DeleteCommand = dummyCommand;
            da.InsertCommand = dummyCommand;

Si no necesitas trabajar en escenarios desconectados y si solo necesitas utilizar un comando a la vez, utiliza un SqlCommand, de lo contrario un SqlDataAdapter.

Javier Andrés Cáceres Alvis

Microsoft Most Valuable Professional – MVP
Intel Black Belt Software Developer

No se controló InvalidOperationException – C#

Hola a todos,

Un lector del blog me pregunta sobre una excepción en C# y la comparto para que sea útil a otras personas:

Pregunta: «Un pequeño programa por consola, que permite crear, consultar y borrar. Uso el List<> para almacenar y listar, todo va bien pero al borrar me esta generando esta excepción: He verificado pero no se que pasa?»

Respuesta: no se pueden eliminar colecciones mientras se recorren, según la documentación de MSDN el foreach puede tener resultados inesperados cuando se modifican los elementos: http://msdn.microsoft.com/es-es/library/ttw7t8t6(v=vs.80).aspx

La solución para lo anterior es no utilizar un foreach para modificar, utilizar algo como un for.

Saludos,

Javier Andrés Cáceres Alvis

Microsoft Most Valuable Professional – MVP
Intel Black Belt Software Developer

Ejemplo Básico de Aplicacion ASP.Net C#

Buenos días,

[Update 19/06/2012: El script de creacion de los objetos de base de datos es agregado al proyecto en codeplex por sugerencia de luiquroj: http://crmprj.codeplex.com/SourceControl/changeset/changes/14914]

[Update 04/06.2012: Este proyecto ha sido subido a http://crmprj.codeplex.com/ para mejorar la experiencia de descarga]

Muchas personas me escriben comentando que necesitan aprender a hacer una aplicación Web ASP.Net, por tal motivo he querido compartir en forma «AS IS» una aplicación muy simple ASP.Net C# en la cual se puede apreciar como consultar y modificar los registros de una base de datos. El código está aquí:

Código Fuente http://tinyurl.com/6n8wy9y

Backup de base de datos http://tinyurl.com/6n8wy9y

La aplicación es básica pero sirve para practicar (y por ningún motivo liberar en producción) y apreciar conceptos interesantes como el estilo arquitectónico de separación en N-Capas, el uso de Generics, etc.

El código está escrito en Visual Studio 2008 pero se puede abrir sin problemas en Visual Studio 2010 y al backup de la base de datos se debe hacer restore con SQL Server 2008.

Saludos y cualquier pregunta por favor dejar el comentario,

Javier Andrés Cáceres Alvis

Microsoft Most Valuable Professional – MVP
Intel Black Belt Software Developer

SQL Server CE Windows Phone 7 Licensing

Este post es la respuesta a ésta pregunta de un lector del blog:

Hey, muy buen e interesante tutorial!
Me llamo XXX y soy de Lima, Perú, y el motivo por el cual te escribo es para hacerte una consulta:
Yo he desarrollado una aplicación utilizando SQL Server CE, pero, para probarla en mi teléfono, necesito algún tipo de licencia? Por lo que veo, eso que escribiste: “No sobra recordar que CE está basado en un archivo local con extensión *.sdf y que éste archivo para WP7 se guarda en el IsolatedStorage que tiene la aplicación.” me hace pensar que no. Además, todos los teléfonos con Mango pueden soportar aplicaciones que estén utilizando SQL Server CE o necesitan de algo más?
Podrías darme mayor información, por favor?
Muchas gracias por tu respuesta, la necesito para un trabajo de la universidad, también.

La respuesta corta es: No. La respuesta larga según Scott Gu:

SQL CE can be used for development scenarios, testing scenarios, and light production usage scenarios. With the SQL CE 4 release we’ve done the engineering work to ensure that SQL CE won’t crash or deadlock when used in a multi-threaded server scenario (like ASP.NET). This is a big change from previous releases of SQL CE – which were designed for client-only scenarios and which explicitly blocked running in web-server environments. Starting with SQL CE 4 you can use it in a web-server as well.

There are no license restrictions with SQL CE. It is also totally free.

Javier Andrés Cáceres Alvis

Microsoft Most Valuable Professional – MVP
Intel Black Belt Software Developer

Diferencias entre Estilo/Táctica/Patrón Arquitectónico en C#

Dependiendo de la fuente consultada existirán muchas o pocas diferencias entre las respuestas (debido a que la Arquitectura de Software se encuentra en un proceso de maduración y consolidación). La diferencia es simple: no hay diferencias.
Cada autor ha elegido llamar la división inicial de un sistema a su gusto y es por tal motivo que existen un sin número de términos para referirse a lo mismo. Veamos un poco: En el libro “Software Architecture In Practice” se llama táticas a estrategias conocidas que resuelven problemas comunes relacionados con los requerimientos no funcionales de un sistema, por ejemplo, en cuanto a la calidad sistémica Modificabilidad, una táctica común es Posponer el Binding Time de los objetos a través de “Runtime Registration”, “Configuration Files”, “Polimorfismo” y “Component Replacement”, entre otros.

Por otro lado, en “Pattern Oriented Software Architecture”, el autor llama “Reflection” a un patrón Arquitectónico Distribuído Adaptable, el cuál no es más que una forma de introducir cambios en el comportamiento y estructura de un sistema. Y finalmente un estilo es un conjunto de principios utilizados para construir un sistema.
Lo vieron? cada autor llama a lo mismo de forma diferente, sin embargo podemos concluir que en esencia los estilos, tácticas y patrones arquitectónicos responden con soluciones probadas a los requerimientos no funcionales de un sistema.

Javier Andrés Cáceres Alvis

Microsoft Most Valuable Professional – MVP
Intel Black Belt Software Developer

Sesiones sobre Arquitectura en C#

El pase de diapositivas requiere JavaScript.

Durante las siguientes fechas a las 7.00 AM estaré presentando sesiones y clases sobre Arquitectura/Diseño de Software con C# en la Universidad San Buenaventura – Bogotá (entrada libre):

  • 27 de Agosto
  • 10 de Septiembre
  • 24 de Septiembre
  • 08 de Octubre
  • 22 de octubre
  • 29 de Octubre
  • 05 de Noviembre
  • 12 de Noviembre
  • 19 de Noviembre
  • 26 de Noviembre
  • 03 de Diciembre

Durante éstas sesiones los asistentes aprenden a diseñar software utilizando estilos, patrones y tácticas que resuelven escenarios de atributos de calidad comunes.

Javier Andrés Cáceres Alvis

Microsoft Most Valuable Professional – MVP
Intel Black Belt Software Developer

Lo Mejor de Windows Phone Mango para los desarrolladores C#

El pasado 23 de Agosto presenté en Microsoft Colombia una sesión sobre las novedades que Windows Phone Mango trae para los desarrolladores C#. En esta sesión me enfoqué en mostrar las características que desde mi punto de vista son las más importantes para los desarrolladores del mundo real; dichas características son:

  • Agentes: mucho se ha hablado sobre el soporte de multitasking en los móviles y WP7 no es la excepción. Pues bien, en esta plataforma la forma de implementarlo es a través de agentes que permiten hacer polling, estos agentes permitirán hacer tareas en background. Ojo: no confundir los agentes con multithreading.
  • Tiles secundarios: antes solo podíamos tener un tile por aplicación en los hubs de WP7, pero ahora podemos tener tiles secundarios personalizados (con imágenes y URI’s diferentes).
  • Control sobre el dispositivo: esta versión de Windows Phone permite acceder a información del hardware detallada, la cual es útil para determinar por ejemplo si un dispositivo tiene el sensor gyro.
  • Control sobre la Cámara: ahora podemos acceder al live feeding (frame a frame) de la cámara, con lo cual facilita el desarrollo de aplicaciones de realidad aumentada.

Les comparto los slides que mostré en la charla: «12-OverviewMango» http://tinyurl.com/43t69mk

Existen más características, como por ejemplo las notificaciones Push locales, sin embargo creo que son éstas las verdaderas funcionalidades del dispositivo que nos permitirán construir otro tipo de aplicaciones que antes eran imposibles.

Saludos,

Javier Andrés Cáceres Alvis
Microsoft MVP – Windows Phone

Crea un blog o un sitio web gratuitos con WordPress.com.

Subir ↑