Mostrando entradas con la etiqueta Visual Studio. Mostrar todas las entradas
Mostrando entradas con la etiqueta Visual Studio. Mostrar todas las entradas

jueves, 8 de noviembre de 2012

[Visual Studio] Base de Datos integradas al proyecto

 

Vamos a analizar una situación particular que se produce al integrar las bases de datos, ya sean Ms Access, Sql Compact, Sql Server, o cualquier otra que pueda integrarse al Visual Studio

Cuando se desarrollan aplicaciones de escritorio, WinForm o WPF y a estos proyectos se le agrega una db, puede que las actualizaciones de datos no impacten sobre el archivo que se visualiza en el “Solution Explorer”.

Nota: si bien el ejemplo del articulo estará basado en Sql Compact (.sdf) la solución planteada aplicaría a otras base de datos como ser Ms Access (.mdb, .accdb), Sql Server (.mdf), etc

 

Problema


Cuando un conectionstring se define usando el nombre de la db o |DataDirectory| para especificar la localización del archivo de base de datos, en ambos casos se hace referencia a la carpeta donde se encuentra ejecutándose el .exe

string connstring = "Data Source=|DataDirectory|Contactos.sdf;Persist Security Info=False;";

Al usar este tipo de connection string es bastante común ver desarrollos en donde la db se encuentra integrada al Visual Studio.

clip_image001

Si se está ejecutando desde el Visual Studio la carpeta, por defecto, donde compila y deja los archivos resultantes será el \bin\Debug del proyecto, es allí donde la aplicación espera que se encuentre la base de datos.

No hay que engañarse, los cambios que realicen actualización a la db no serán efectuadas sobre el archivo que se visualiza integrado al VS (el que se visualiza en la imagen anterior), sino que las modificaciones se realizaran sobre la copia que crea el Visual Studio en la carpeta \bin\Debug

clip_image003

Como se observa, el Visual Studio creo una copia de la db en la carpeta donde compila, es por eso que .exe y .mdb están juntos, es más cuando se detenga la ejecución y se inicie nuevamente una nueva copia será efectuada pisando los datos previos.

Por lo tanto, si luego de ejecutar la aplicación desde el VS, la aplicación realizo actualizaciones en los datos, al detenerla y realizar doble click en el archivo de base de datos que está integrado en el “Solution Explorer” para poder trabajarlo desde el “Server Explorer”, no se visualizara ningún cambio.

clip_image004

Al usar el “Show Table Data” no habrá cambios que visualizar

clip_image005

Sera necesario usar la opción

clip_image006

Para poder acceder a al db que se copió en el \bin\Debug y al hacer bloque click en esta y verla en el Server Explorer allí si estarán las actualizaciones realizaras en la ultima ejecución.

clip_image007

Nota: recuerden que al volver a ejecutar desde el Visual Studio la db que se encuentra en la carpeta \bin\Debug será reemplazada por una nueva copia

Esta situación solo se manifiesta si se ejecuta desde el Visual Studio, cuando se lleve el .exe a la pc del usuario esta situación no se presentara, la aplicación se ejecuta directamente sin intermediarios que realice la copia de la db a una carpeta de compilación (apunto a que no esta el Visual Studio en medio creando una carpeta donde ubicar los archivos resultantes necesario para la ejecución).

 

Solución


Si se quiere evitar esta situación y hacer uso de la misma db que esta integrada al proyecto, el primer paso será deshabilitar la copia que realiza el VS, para ello se debería ir a las propiedades del archivo

clip_image008

Y allí cambiar la opción a “Do not copy”

clip_image009

Y luego se deberá modificar el string de conexión indicando la ruta completa el archivo de la db, usar solo el nombre o |DataDirectory| ya no será valido (porque no se copiara el archivo a la carpeta de compilacion)

string connstring = "Data Source=C:\...\Contactos.sdf;Persist Security Info=False;";

 

Conclusión


Si bien esta característica que aporta el Visual Studio al realizar una copia automática del archivo de base de datos a la carpeta de compilación podría ser útil en algunas situaciones, (como ser aquellas donde se espera datos inicializados para realizar pruebas), pero hay otras donde no es útil, por eso existen opciones que se pueden cambiar para deshabilitar esta acción.

Al implementar la solución mencionada logramos referenciar la db que se encuentra integrada al proyecto.

domingo, 28 de octubre de 2012

[Visual Studio] Unir proyectos

 

Introducción


En algunas ocasiones se escribe código en proyectos separados, ya sea para probar algún concepto, se trabajo en equipos diferentes y cada uno creo su ambiente, etc

pero en todos estos casos al final se requiere unir bajo una única solución todo lo confeccionado, existen diferentes formas de lograrlo pero creo que lo que explicare es la mas simple.

Usaremos un ejemplo sencillo para demostrar como unir proyectos, además de evaluar que consideraciones hay que tener en el proceso.

Se han creado dos aplicaciones del tipo Windows Application, pero tengan en cuenta que esto mismo aplica a cualquier otro tipo de proyecto.

Por un lado tendremos un proyecto con un único form definido como MDI Container, este será la base al cual se agregara lo proveniente de otros desarrollos

image

Por el otro lado se desarrolla un forma simple que accede a una db local usando dataset tipado

image

La idea es mover el Form1, el dataset tipado y la base de datos de WinApp2 a WinApp1

 

Mover archivos entre proyecto


Lo primero que hay que conocer serán los archivos ha mover entre proyectos, esto parece ser una tarea simple pero por lo general un ítem puede estar compuesto por otros ítems que los complementan

Por ejemplo un formulario se compone de 3 archivos, el .cs (seria el formulario en si mismo), el .Designer.cs (donde se definen los controles que se agregan en tiempo diseño) y un .resx (define los textos he imágenes según la cultura). Lo mismo sucede con el dataset tipado, compuesto por el .xsd, .Designer.cs, .xsc y .xss

En proyecto escritos con C# visualizar estos archivos es simple ya que el Solución Explorer brinda la posibilidad directa de expandir los archivos relacionados

image

Pero esto no sucede en VB.NET, por defecto el Solution Explorer no los muestra

image

para poder ver los archivos relacionados a un ítem hay que habilitarlo usando la opción “Show All Items”

image

Ahora que sabemos que archivos se requieren mover de un proyecto a otro haremos uso del Windows Explorer, se podrá acceder a la carpeta de forma directa usando

SNAGHTML15b51af

Se deberán seleccionar todos los archivos implicados para cada ítem

SNAGHTML15d877e

y se moverán a la carpeta del proyecto destino, el cual ya tenia el form principal

SNAGHTML15f17f9

 

Incluir archivo al proyecto


Una vez que tenemos los archivos ubicados en la estructura de carpeta del proyecto destino volvemos al Visual Studio para incluir estos archivos, para poder lograrlo será necesario volver los archivos visibles usando la opción “Show All Items”

image

como se observa en la imagen los archivos que se han copiado a la carpeta están visibles pero con un icono de color blanco, lo que indica que están fuera del proyecto, en realidad están en la carpeta (dentro de la estructura) pero no incluidos al proyecto

Para incluirlos solo bastara usar la opción “Include In Project”

image

lo cual no solo agregara el .cs sino también los archivos relacionados, solo será cuestión de aplicar esto al resto de los archivos para concluir con la integración

 

Algunas consideraciones


Luego de incluir los archivos puede que la tarea no termine allí, sino que hay que adecuar el código

Normalmente cuando se desarrolla bajo un proyecto se definen namespaces, el formulario que se ha incluido sigue conservando el nombre que se uso en el proyecto anterior

image

es por eso que será necesario revisar el código de los ítems incluidos para adaptarlos de forma correcta al nuevo proyecto, y en algunos casos no alcanzara con ir al código del form, sino también se deberá cambiar dentro del Designer.cs o sus archivos relacionados

SNAGHTML1aedbc6

Con respecto a los dataset puede que sea necesario ejecutar la opción que vuelve a regenerar el código en base a la metadata

image

esto adecua el código generado para que se adapte de forma automática al nuevo namespace

 

Conclusión


Los pasos para unir proyecto no son difíciles de aplicar, solo es cuestión de conocer las opciones y que archivos mover de un proyecto a otro.

Si bien aquí solo tratamos algunos tipos de archivos la misma técnica se puede aplicar a cualquier otro que se este utilizando.

sábado, 12 de diciembre de 2009

Visual Studio – Referencia Custom Control en los Proyectos

 

El siguiente video tiene por objetivo mostrar los pasos para poder hacer uso de un control desarrollado desde otro proyecto.

En este caso solo se contara con la dll, la cual será incluida a una carpeta dentro de la estructura de la solución y será desde allí que se referenciara tanto desde el proyecto como desde la toolbox del Visual Studio para poder luego ser arrastrada al formulario y tenerla disponible en modo visual.

Este video mostrara los pasos para poder hacer uso de la dll y al mismo tiempo conservarla dentro de la estructura de desarrollo, para que ante una eventual necesidad de mover de carpeta el desarrollo no se pierdan las referencias.


El video se encuentra en formato flash y podrá ser reproducido ejecutando el archivo .html que se encuentra dentro del zip.