Como sabeis estoy haciendo una agenda electrónica. Para almacenar los contactos tengo una variable id que se autoincrementa en la bdd mi tabla es la siguiente:
Código
CREATE TABLE contactos( id INT IDENTITY NOT NULL, titulo VARCHAR(50), nombre VARCHAR(50) NOT NULL, nombre2 VARCHAR(50), ape1 VARCHAR(50) NOT NULL, ape2 VARCHAR(50), apodo VARCHAR(50) NOT NULL, direccion VARCHAR(150), ciudad VARCHAR(20), provincia VARCHAR(20), cp VARCHAR(10), pais VARCHAR(20), telefono VARCHAR(20), movil VARCHAR(20), fax VARCHAR(20), web VARCHAR(50), twitter VARCHAR(50), facebook VARCHAR(50), direccion2 VARCHAR(150), ciudad2 VARCHAR(20), provincia2 VARCHAR(20), cp2 VARCHAR(10), pais2 VARCHAR(20), organizacion VARCHAR(50), puesto VARCHAR(50), departamento VARCHAR(50), oficina VARCHAR(50), telefono2 VARCHAR(20), fax2 VARCHAR(20), sexo VARCHAR(10), cumple VARCHAR(10), pareja VARCHAR(50), aniversario VARCHAR(10), comentario VARCHAR(1000), imagen Image, PRIMARY KEY (ID) );
Tengo otra tabla para almacenar los emails de los contactos puesto que no se pueden introducir varios en la misma tabla o eso creo y he creado otra tabla de la siguiente manera:
Código
CREATE TABLE email( id_contacto INT NOT NULL, email VARCHAR (100) NOT NULL, PRIMARY KEY (email, id contacto), FOREIGN KEY (id_contacto) REFERENCES contactos (id) ON DELETE CASCADE );
Lo que hago es introducir en una función primero los datos del contacto, sin los mails, y a continuación obtengo el id e introduzco los mail del contacto en el siguiente código:
Código
public override bool Nuevo_Email(string correo) { bool exito = false; //Variable para el ide del contacto int num_id = 0; String sentenciaSql = "SELECT COUNT (*) FROM contactos"; SqlConnection conexion = null; DataTable data_table = null; try { conexion.Open(); data_adapter.Fill(data_table); conexion.Close(); num_id = Convert.ToInt32(data_table.Rows[0][0].ToString()); String query = "insert into email(id_contacto,email) values(" + num_id + ",'" + correo + "')"; conexion.Open(); if ((1 != cmd.ExecuteNonQuery())) { MessageBox.Show("Se ha producido un error al acceder a la fuente de datos", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); exito = false; } else { exito = true; } } catch (SqlException ex) { // MessageBox.Show("No se ha podido guardar en la base de datos", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); exito = false; } finally { if (conexion != null) { if (conexion.State == ConnectionState.Open) { conexion.Close(); } } } return (exito); }
Pero me da siempre el siguiente error:
Código:
ex = {"Instrucción INSERT en conflicto con la restricción FOREIGN KEY \"FK__email__id_contac__164452B1\". El conflicto ha aparecido en la base de datos \"agenda\", tabla \"dbo.contactos\", column 'id'.\r\nSe terminó la instrucción."}
Qué hago mal???
gracias de antemano.