Que Diferencia Hay Entre String y string en C#

Comenzando en el mundo del .NET, en especial en C# (C Sharp) me tope con esta curiosidad. Que diferencia hay entre esto mire la siguiente imagen:

Snap3

Sentí la curiosidad al ver esto, que existe un tipo string y un tipo String. Esto me lo preguntan muy seguido ¿que de diferente hay en declarar una variable con uno o con otro?.

Si lo corriéramos no daría ninguna diferencia los dos me mostrarían la cadena si ningún problema. ¿pero en verdad si son diferentes?; si, esto se debe que uno es un alias así como un apodo del otro. Y no son tipos de datos diferentes  como muchos me lo preguntan.

Si nos vamos  al MSDN, dice mas o menos el tipo “string” es un alias del tipo “String”, y a su vez el alias refleja todas y cada una de las propiedades y métodos de “String”, haciendo que estos dos tipos sean considerados idénticos.

¿Si los dos son idénticos cual es el mas optimo de los dos?, para ver esto hagamos un ejemplo comparando los dos tipos con las operaciones mas comunes o mas habituales que se hacen con una cadena de caracteres (Trim(), ToLower(), ToUpper(), StartsWith(), EndsWith(), Contains(), Insert() y Remove()), haremos un proyecto de tipo consola.

Snap2

Haremos una simple comparación de tiempo de respuesta entre cada una y así veremos si de verdad hay alguna diferencia significativa  entre los dos:

Snap4

Si corremos esto nos daría esto:

Sin título

Como vemos si lo corremos  veríamos que es un poco mas rápido string que el String. Bueno espero que haciendo este ejemplo ahora ya podamos ver que y confirmar que si String es un poco mas lento que el string. Aunque será decisión del programador ver cual utiliza.

Espero que te sirva de algo…

Saber El Nombre De Una Hoja De Excel En C#

En este post explicare como podemos saber los nombres de las hojas de un archivo de Excel. Imaginemos que tengo que cargar los datos de un archivo de Excel, pero necesitamos saber el nombre de una hoja en particular?.

El problema esta en que el usuario quiere ser él, personalmente el que escoja el nombre de la hoja y no que nosotros escojamos la hoja que se verá por defecto.

Veamos como quedaría la solución, primero crearemos un nuevo proyecto. Para esta solución usaremos un proyecto WPF, lo llamaremos WPFExcel.

Snap48

En la ventana que crea por defecto colocaremos un LisBoxt.

Snap49

Y un Botón.

Snap51

Snap52

Hacemos doble clic en el botón.

Snap67

Aquí vamos a programar para ver los nombres de las hojas, pero primero cargaremos una referencia que me permitirá hacer toda la lógica

Snap53

Snap54

Esta referencia al nombre de espacio Microsoft.Office.Interop.Excel, el cual me permitirá interactuar con el archivo de Excel.

Para cargar este espacio de nombres se haría de la siguiente forma:

Snap68

Hoy solo falta cargar este using.

Snap55

Ya cargados los dos using solo falta programar el evento clic del botón. Comenzaremos usando OpenFileDialog para seleccionar el archivo de Excel, de nuestro directorio.

Snap56

Ahora somos capaces de escoger un archivo de cualquier directorio de la pc, por defecto dejaremos el C:\. hoy solo queda obtener los nombres de las hojas del archivo de Excel.

Snap69

Ya que cargamos los nombres de las hojas del archivo de Excel, usaremos un foreach  y recorreremos los nombres y los cargaremos al ListBox1 de uno en uno.

Snap70

Hoy en el evento MouseDoubleClick del ListBox1 solo programaríamos algo como esto:

Snap60

Snap61

ya terminamos hoy creare un archivo de Excel para completar este ejemplo:

Snap59

Tengo cuatro hojas MiHoja1, MiHoja2, MiHoja3,MiHoja4, y con este archivo probare el código que he echo. corremos nuestra aplicación.

Snap62

Snap65

Snap66

Si damos doble clic sobre una hoja la seleccionaríamos y nos la mostraría en el MessageBox el nombre de esa hoja.

Snap71

Como vez si funciona solo faltaría colocar la funcionalidad de que me extraiga la data de la hoja de Excel, en un post posterior tal vez lo hagamos.

Espero te sirva de algo…

El Data Entity Framework (Model First / Database-first)

Model First.

Creando mi primer modelo (Model First); ¿comencemos pensando en las clases?. El model first es la capacidad que tiene el visual estudio de permitir el diseño de las clases que se ocuparan en la lógica de negocios y a partir de ellas crear mi diagrama de base de datos.

En otras palabras no crearemos tablas sino que el Entity se encargara de generarnos las tablas de la base de datos que creemos.

Crearemos un proyecto nuevo, de tipo biblioteca de clases lo llamaremos ModelFirst:

Snap1

Agregaremos un nuevo elemento:

Snap2

Y ocuparemos este elemento:

Snap3

Nos aparecerá esta ventana de dialogo y con este asistente haremos nuestro primer modelo; escogeremos el modelo vacío recordemos que estamos pensando en clases y no en tablas:

Snap4

Nos aparcera la siguiente ventana donde podremos diseñar nuestro modelo que ocuparemos para crear nuestras tablas que nos servirán en la base de datos:

Snap5

Como se puede ver nos carga las referencias que necesitamos y en el cuadro de herramientas aparecen los elementos interactuar con nuestras clases. Primero tendremos que hacer una base de datos donde guardar nuestras clases, que se convertirán en tablas de la base de datos. Esta no contendrá nada:

Snap6

Snap7

Como se puede ver no contiene ninguna tabla sino que nuestras clases se convertirán en ellas:

Imaginemos que tenemos que llevar el control de los profesores de una escuela asignándoles las alúas donde impartirán sus clases; tendremos que crear dos clases una donde estarán los datos del profesor y otra donde estarna los datos del aula. comencemos creado la clase de profesor, haciendo clic derecho:

Snap8

crearemos una entidad nueva usando este asistente:

Snap9

El nombre de la entidad será profesor, su conjunto de entidades  será profesor este me servirá para saber las propiedades de navegación, por defecto me dejara en el nombre de la propiedad el Id de la misma clase y por ultimo solo hay que decirle que de tipo Int64.

Snap10

Para agregar otra propiedad solo damos clic derecho sobre la clase profesor:

Snap11

Snap12

Y así todas las propiedades que tenga esta clase:

Snap13

Para aula aremos exactamente lo mismo, y nos quedara así.

Snap40

Ya creadas nuestras clase solo queda asignar la relación entre ambas clases para ello en la caja de herramientas de EF aparece la herramienta para hacer esto:

Snap41

Para generar la relación entre las dos tablas solo hay que hacer esto:

Snap35

Hacemos clic en la tabla profesor lo arrastramos y soltamos en aula:

Snap36

Snap37

Como se ve en esta conversión a objeto relacional, no aparecen las llaves foráneas en cada objeto; por que esa parte del mapeo lo debe hacer el ORM. Ya creados nuestras clases solo falta hacer o crear nuestras tablas en la base de datos para eso hacemos clic derecho sobre cualquier área en blanco del modelo.

Snap38

Seleccionamos la opción “generar base de datos desde modelo”, nos aparecerá esta ventana.

Snap20

Tendremos que crear una conexión a la base de datos que creamos anteriormente.

Snap21 

Snap22

Snap23

Snap24

Snap25

En este punto si le damos finalizar nos creara un script para crear nuestras tablas a partir del modelo:

Snap26

Copiamos y creamos una consulta en nuestra base de datos para pegar esto:

Snap28

Snap29

Snap30

Si corremos esta consulta nos creara nuestras tablas en la base de datos.

Snap31

Si vemos el diagrama de clases, nos aparecería esto:

Snap39

Como podemos ver en el diagrama de base de datos si se generaron las llaves foráneas de forma automática.  Esto  se da por que cuando se pasa de lo relacional a los objetos en nuestra base de datos se conoce la equivalencia de ambos.

La solución queda de esta forma en el visual estudio:

Snap27

Database-first

Como hemos visto podemos crear las clases y luego las tablas a partir de ellas pero que pasa si queremos hacerlo al revés, tenemos nuestra base de datos y las tablas ya echas.

Imaginemos que queremos crear nuestro modelo a partir de una base de datos. Crearemos un proyecto nuevo y como ya tenemos una base de datos que creamos anteriormente esa es la que ocuparemos. Lo llamaremos Databasefirst:

Snap42

Agregaremos un nuevo elemento.

Snap2

De este tipo:

Snap3

Snap47

Hasta aquí es igual al que hicimos anteriormente solo que escogeremos la primera opción esto nos abrirá la siguiente ventana de dialogo.

Snap44

Como ya habíamos echo una conexión a esta base de datos nos tiene que aparecer la conexión sino tendríamos que hacerla de nuevo.

Damos siguiente y nos aparecería esto:

Snap45

Seleccionamos las tablas y quitamos el cheque de “Incluir columnas de clave externa en el modelo”, esto evitara que se incluyan las llaves foráneas de la base de datos.

Le damos finalizar y nos creara el modelo a partir de una base de datos ya existente. que daría así:

Snap46

Como podemos ver son dos formas de comenzar a trabajar con el Data Entity Framework.

Espero que te sirva de algo…