Crear una tabla con una Llave Foranea dentro de un DataSet

Comencemos, como siempre abrimos nuestro VS y creamos un proyecto de C#, le ponemos el nombre que queramos y nos vamos directo al código.

En el código procedemos a crear un dataset, y dos tablas, una se llamara video y otra se llamara categoría; la tabla video tiene los campos idVideo, Titulo e idCat_Categoria y la tabla categoría posee los campos idCat y Descripción, todo lo dejaremos así:

public void crearCampos()
{
bdl = new DataSet("bdl");
video = new DataTable("Video");
categoria = new DataTable("Categoria");
//--------------- Campos Tabla Video -----------------
video.Columns.Add("idVideo", typeof(int));
video.Columns.Add("Titulo", typeof(string));
video.Columns.Add("idCat_Categoria", typeof(int));
//--------------- Campos Tabla Categoria -----------------
categoria.Columns.Add("idCat", typeof(int));
categoria.Columns.Add("Descripcion", typeof(string));
}
Luego procedemos a crear la restricción para la llave foránea a través del objeto ForeignKeyConstraint , este objeto de ocupa de mantener la restriccion que existe para las llaves foraneas, y lo creamos de la siguiente manera:

ForeignKeyConstraint fk = new ForeignKeyConstraint(categoria.Columns[0], video.Columns[2]);
Analizando el codigo observamos que al constructor del objeto le pasamos como primer parametro la columna asociada a la llave foranea en la tabla padre y como segundo parametro le pasamos de igual modo la columna asociada a la llave, pero esta vez de la tabla hija, seguida a la linea agregamos a la tabla video la llave foranea de la siguiente manera:
video.Constraints.Add(fk);

Ahora creamos la interface del usuario que contendra un tabControl, dos datagridView, dos botones, cinco textboxs y 5 labels y lo dejamos de la siguiente manera:

Ahora en el evento asociado al boton agregar categoria ponemos las siguiente linea:

categoria.Rows.Add(new object[] {int.Parse(textBox1.Text), textBox2.Text });
Y al evento del boton agregar video ponemos lo siguiente:
try
{
video.Rows.Add(new object[] { int.Parse(textBox3.Text), textBox4.Text, int.Parse(textBox5.Text) });
}
catch (DataException ex)
{
MessageBox.Show(ex.Message, "Error al agregar una fila", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

Como podemos observa todo el codigo esta dentro de un bloque try- catch que en caso de que se viole la restriccion de la llave foranea, nos mostrara un mesaje de error por pantalla, para comprobar esto agregamos datos primero en la tabla categoria, luego procedemos a agregar datos a la tabla video, repetando la restriccion de la llave foranea y despues de hacer esto ponemos a prueba nuestro programita agregando un video que no cumple con la restriccion de la llave foranea y nos tendria que salta la siguiente pantalla:
Bueno me despido esperando que les sirva este post, bye.

1 comentarios:

Holas Gus, GEnial el Blog, XD, hay bastantes cosas interesantes :D, segui colocando cosas buenas XD

Rafael

Reply

Publicar un comentario