LINQ To SQL Classes Sample


Hola, he preparado un pequeño ejemplo muy sencillo, tal vez para aquellos que aún estén aprendiendo LINQ y SQL Server, este ejemplo se basa en como manejar datos con LINQ conectándose a un servidor de base de datos como SQLEXPRESS y a una base de datos de control de Alumnos, si quieren crear la tabla desde cero, aquí les dejo el script:

USE bdTecMina
GO
CREATE TABLE Alumnos
(
    AlumnoID nvarchar(10),
    Nombre     nvarchar(40),
    Semestre nvarchar(3),
    CONSTRAINT "PK_Alumnos" PRIMARY KEY CLUSTERED(AlumnoID),
)

INSERT INTO Alumnos VALUES('05231104','Edison García','7')
INSERT INTO Alumnos VALUES('05231106','Abraham Gomez García','9')
INSERT INTO Alumnos VALUES('05231108','Alejandre Carvajal','7')
INSERT INTO Alumnos VALUES('06231110','Luis Armando','10')

Ahora necesitaremos crear un Procedimiento Almacenado llamado InsertarAlumno:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE dbo.InsertarAlumno
(
    @AlumnoID nchar(5),
    @Nombre      nvarchar(40),
    @Semestre nchar(3)
)
AS
    INSERT INTO Alumnos
    (
        AlumnoID,    
        Nombre,
        Semestre
    )
    VALUES
    (
        @AlumnoID,
        @Nombre,
        @Semestre
    )
GO

Creamos nuestro proyecto Windows Forms, y añadimos un nuevo elemento en el explorador de soluciones (Solution Explorer), y escogemos LINQ TO SQL Classes, pueden colocar cualquier nombre a su datacontext. (dml) a continuación se conectan al servidor de base de datos que tengan instalado, si tienen SQLEXPRESS se conectan y escogen la base de datos bdTecMina o la que hayan creado, y arrastran la Tabla Alumnos al diseñador.

A continuación buscan el Procedimiento Almacenado (Store Procedure) y lo colocan en el espacio que se marca en la figura de abajo.

linqtosqlclasessample01

[Dar clic para agrandar las imágenes]

linqtosqlclasessample02

Seleccionamos a continuación la tabla Alumnos y en sus propiedades seleccionamos Insert.

linqtosqlclasessample03

Seleccionamos el Procedimiento Almacenado que habíamos agregado al diseñador.

linqtosqlclasessample04

Nos vamos a diseñar nuestro formulario, muy simple pero es para hacer las pruebas.

linqtosqlclasessample05

Declaramos nuestro dataContext:

        bdSistemaDataContext db = new bdSistemaDataContext();

Agregamos el siguiente código para el botón de Agregar:

 private void button1_Click(object sender, EventArgs e)
        {
        
            string AlumnoID = txtID.Text;
            string Nombre = txtNombre.Text;
            string Semestre = txtSemestre.Text;
            try
            {
                db.InsertarAlumno(AlumnoID, Nombre, Semestre);
                db.SubmitChanges();
                MessageBox.Show("Se ha agregado correctamente");

            }
            catch (Exception ex)
            {
                MessageBox.Show("Ha ocurrido un error");
            }
            finally
            {
                txtID.Text = "";
                txtNombre.Text = "";
                txtSemestre.Text = "";  

            }          
        }

En donde solo paso los valores de los textBoxs a variables string y de ahi al método del procedimiento almacenado, guardo los cambios y limpio los cuadros de textos.

Después visualizando en el DataGridView el código queda así:

private void button2_Click(object sender, EventArgs e)
        {
            var consulta = from alu in db.Alumnos
                           select alu;
            dataGridView1.Refresh();
            dataGridView1.DataSource = consulta.ToList();
        }

Hago una pequeña consulta en LINQ mostrando todos los elementos de la tabla Alumnos en el dataGridView.

Damos F5 y tenemos lo siguiente:

linqtosqlclasessample06

linqtosqlclasessample07

Descarga el código de este ejemplo

Saludos, espero este pequeño ejemplo sea de mucha utilidad, nos vemos en otro post con los siguientes métodos.

PD:Si te ha gustado este post, vota por mi blog (mredison.wordpress.com) en http://blogit.ms en la categoría de SQL Server, te lo agradeceré mucho.

Edison Daniel García Chiñas
Microsoft Student Partner | México

SQL Server : Manejo de Proveedores de Acceso a Datos


Hola, la finalidad de este post es conocer la clase DbProviderFactory el cual me sirve para saber con que proveedor estaré trabajando mi capa de acceso a datos, y a demás que contiene varios métodos, para crearconexion, crearcomandos, etc.

Primero que nada, quiero implementar este concepto en un ejemplo sencillo pero muy práctico.

Creamos un nuevo sitio web – Y agregamos los siguientes controles:

ProveedorADO01

Ingresamos el NameSpace

using System.Data.Common;

Este namespace aparece desde ADO.NET 2.0 y tiene muchas funcionalidades.

Despues creamos nuestras primeras variables:

protected void Button1_Click(object sender, EventArgs e)
    {
        try
        {
            string proveedor = TextBox1.Text;
            string cadenaConexion = TextBox2.Text;
            string comando = TextBox3.Text;



        }
        catch (DbException ex)
        {
            Page.Response.Write("Error: "+ ex.Message);
        }
    }

Creo un objeto factory y la conexión.

 //Obtengo el proveedor del textbox y paso a factory el string
            DbProviderFactory factory = DbProviderFactories.GetFactory(proveedor);

            //Creo la conexión segun la cadena que pase en el textbox
            DbConnection miConexion = factory.CreateConnection();
            miConexion.ConnectionString = cadenaConexion;

Creo un adaptador de datos, creo un dataTable, lo lleno y muestro los resultados en un gridview:

 

 //Creo un adaptador de datos
            DbDataAdapter adaptador = factory.CreateDataAdapter();
            adaptador.SelectCommand = miConexion.CreateCommand();
            adaptador.SelectCommand.CommandText = comando;

            //Hago la consulta
            DataTable tabla = new DataTable();
            adaptador.Fill(tabla);

            //Muestro los resultados en un gridview
            GridView1.DataSource = tabla;
            GridView1.DataBind();

Ejecuta la aplicación web. y se tendrá lo siguiente:

ProveedorADO02

En el Proveedor de datos, ya sabemos que podemos poner System.Data.SqlClient si trabajamos con bases de datos SQL Server, OracleClient,Odbc, Oledb, etc.. para otros proveedores de Acceso a Datos.

En la cadena de conexión es la ruta donde esta ubicado mi base de datos en el servidor.

En el comando, como configuramos solamente para un SelectCommand, solo podemos hacer consultas.

Quedaría algo como esto.

ProveedorADO03

Saludos. 

SQLDataReader Ejemplo


Hola, coloco otro ejemplo de manejo de base de datos, que me pidieron

Aquí esta el código

1.- Importo

using.System.Data.SqlClient;

2.- Declaro las siguientes variables

        SqlConnection miConexion;
        string cadenaConexion;
        SqlCommand miComando;
        SqlDataReader miReader;

3.- Me conecto a la base de datos, creo un comando, le coloco la consulta, y genero la lectura, y voy a agregando el resultado a un comoBox.

cadenaConexion = "Data Source=.\\SQLExpress;Initial Catalog=bdstudent;Integrated Security=True;Pooling=False";
            miConexion=new SqlConnection(cadenaConexion);
            miConexion.Open();

            miComando = miConexion.CreateCommand();
            miComando.CommandText = "SELECT * FROM Alumnos";
            miReader = miComando.ExecuteReader();

            while (miReader.Read())
            {
                comboBox1.Items.Add(miReader["Nombre"].ToString());
            }

SQLDATAREADERTUTORIAL_01

Código Completo:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace SQLDataReaderExample
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        SqlConnection miConexion;
        string cadenaConexion;
        SqlCommand miComando;
        SqlDataReader miReader;

        private void Form1_Load(object sender, EventArgs e)
        {
            cadenaConexion = "Data Source=.\\SQLExpress;Initial Catalog=bdstudent;Integrated Security=True;Pooling=False";
            miConexion=new SqlConnection(cadenaConexion);
            miConexion.Open();

            miComando = miConexion.CreateCommand();
            miComando.CommandText = "SELECT * FROM Alumnos";
            miReader = miComando.ExecuteReader();

            while (miReader.Read())
            {
                comboBox1.Items.Add(miReader["Nombre"].ToString());   
            }

        }
    }
}

Espero te haya servido amigo, saludos.

Como conectarme a una base de datos con LINQ


Hola, que tal, aqui respondiendo algunas preguntas, de como conectar una base de datos utilizando LINQ, muy facil. Les coloco el siguiente código:

1.- Primero que nada, tienen que importar el NameSpace

using System.Data.Linq;

2.- Creo un dbml

linqtosqlclassesandcsharp01

linqtosqlclassesandcsharp02

3.- Coloco las tablas que ocuparé.

linqtosqlclassesandcsharp03

4.- El dataContext es que el objeto que hara la conexión a la base de datos y me generará las clases dependiendo de las tablas que tenga en mi base de datos, a este proceso se le conoce como LINQ To SQL Classes.

Hago referencia a mi Tabla

miContextoDataContext db = new miContextoDataContext();
Table<Alumno> Alumnos = db.GetTable<Alumno>();

Coloco mi cadena de Conexion dentro del dataContexto y despues genero una tabla de la clase Alumno que así es como se llama mi Tabla dentro de la base de datos.

4.- Por último hago las consultas que yo quiero.

var consulta = from alu in Alumnos
                           select alu;

5.- Coloco la consulta para mostrarlo en un dataGridView

dataGridView1.DataSource = consulta.ToList();

linqtosqlclassesandcsharp

Código Completo:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Data.Linq;

namespace ADONETconLINQ
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

            miContextoDataContext db = new miContextoDataContext();
            Table<Alumno> Alumnos = db.GetTable<Alumno>();

            var consulta = from alu in Alumnos
                           select alu;
            dataGridView1.DataSource = consulta.ToList();

        }
    }
}

Saludos espero te sirva, nos vemos.

Como obtener una lista de directorios con C# y LINQ


Hola me pidieron hacer esta demo en C#, les coloco el código.

Ejemplo en Visual Basic. NET:

http://mredison.wordpress.com/2007/12/22/como-obtener-una-lista-de-directorios-con-linq/

Código en C#:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace Demo1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
        DirectoryInfo directorioInfo=new DirectoryInfo("c:\\");
        DirectoryInfo[] ArrayDeDirectorios = directorioInfo.GetDirectories();
        var miDirectorios = from dir in ArrayDeDirectorios
                            select dir;
        dataGridView1.DataSource = miDirectorios.ToList();

        }
    }
}

linqCSharp01

Saludos.

 

¿Qué es LINQ y para que me sirve?


Se incluye en el Visual Studio 2008, se conoce como LINQ a un Lenguaje Integrado de Consultas o lo que es igual Language Integrated Query , nos va a permitir poder manipular mejor la información dentro de nuestras aplicaciones, se basa en varias funcionalidades, tanto como XML, y Base de datos, como orientado a Objetos.

Veamos un ejemplo

using System;
using System.Linq;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        //Arreglo de nombres

        string[] nombres = { “Edison”, “Daniel”, “Esperanza”,”Juan”,
                          “Benito”, “Armando”, “Diana”, “Jaime”,
                          “Ricardo”, “Ruben”, “Eduardo”,”David”,
                          “Norberto”,”Ernesto”,”Adlemy”,”Felix”,
                          “Carlos”,”Emilio”,”Oscar”};

        Console.Write(“Nombres: “);

        //Imprimo mi arreglo
        foreach (string nom in nombres)
            Console.Write(nom +” “);

        Console.WriteLine();
        Console.WriteLine();

        //Pido el nombre a buscar
        Console.WriteLine(“Ingresa la primera letra a buscar”);
        string busquedaNombre = Console.ReadLine();
        //Implemento una enumeracion de tipo string que va a contener mi consulta
  
        IEnumerable<string > miconsulta = from nombre in nombres
                                    where  nombre.StartsWith(busquedaNombre)
                                    orderby nombre
                                    select nombre.ToUpper();

        Console.WriteLine();

        //Imprimo mi enumeracion
        foreach (string item in miconsulta)
            Console.WriteLine(item);
        Console.ReadLine();
    }
}

 

Y el Resultado sería:

image

URL: http://msdn2.microsoft.com/en-us/netframework/aa904594.aspx

Suma Matrices en C#


Que tal les proporciono el código en C# para la suma de matrices cuadradas de NxN, el cual consiste en pasos simples, tengo 3 datagridviews los cuales en primer lugar les asigno columnas y filas segun el tamaño que le asignes a la matriz por default, asi como dos botones los cuales uno es para calcular el tamaño de la matriz y rellenar en primer lugar los valores aleatorios dentro del grid, y el segundo boton para si queremos modificar los valores de nuestros grids, podamos volver a sumar, y tener la matriz resultante.

Código en C#:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Button1_Click(object sender, EventArgs e)
        {
            dataGridView1.Columns.Clear();
            dataGridView2.Columns.Clear();
            dataGridView3.Columns.Clear();

            int tam =int.Parse(textBox1.Text);
            int i=0;
            while(i<tam)
            {
               DataGridViewColumn columna=new DataGridViewColumn(new DataGridViewTextBoxCell());
               columna.Name = i.ToString();
               columna.HeaderText = i.ToString();
                columna.Width=25;
                this.dataGridView1.Columns.Add(columna);

                DataGridViewColumn  columna2=new DataGridViewColumn(new DataGridViewTextBoxCell());
                columna2.Name=i.ToString();
                columna2.HeaderText = i.ToString();
                columna2.Width=25;
                this.dataGridView2.Columns.Add(columna2);
                DataGridViewColumn  columna3=new DataGridViewColumn(new DataGridViewTextBoxCell());
                columna3.Name = i.ToString();
                columna3.HeaderText = i.ToString();
                columna3.Width=25;
                this.dataGridView3.Columns.Add(columna3);
                i ++;
            }

            int [,] _matriz1 = new int[tam,tam];
            int [,] _matriz2 = new int[tam,tam];
            int [,] _matriz3 = new int[tam,tam];

            dataGridView1.Rows.Add(tam);
            dataGridView2.Rows.Add(tam);
            dataGridView3.Rows.Add(tam);
            Random r=new Random();
            for(int f=0;f<tam;f++)
            {
                for(int c=0;c<tam;c++)
                {
                    _matriz1[f, c] = r.Next(10);
                    _matriz2[f, c] = r.Next(10);
                        _matriz3[f,c] = _matriz1[f,c] + _matriz2[f,c];
                         dataGridView1[f,c].Value=_matriz1[f,c];
                         dataGridView2[f,c].Value=_matriz2[f,c];
                         dataGridView3[f,c].Value=_matriz3[f,c];
                }
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            int tam = int.Parse(textBox1.Text);

            int[,] _matriz1 = new int[tam, tam];
            int[,] _matriz2 = new int[tam, tam];
            int[,] _matriz3 = new int[tam, tam];

            for (int f = 0; f < tam; f++)
            {
                for (int c = 0; c < tam; c++)
                {
                    _matriz1[f, c] = int.Parse(dataGridView1[f, c].Value.ToString());
                    _matriz2[f, c] = int.Parse(dataGridView2[f, c].Value.ToString());
                    _matriz3[f, c] = _matriz1[f, c] + _matriz2[f, c];
                    dataGridView3.CurrentCell = dataGridView3[f, c];
                    dataGridView3.CurrentCell.Value = _matriz3[f, c];
                }
            }
        }
    }
}

Espero les pueda servir de algo este código, Saludos..

Follow

Get every new post delivered to your Inbox.

Join 128 other followers