Bases de Datos > MS Access
Interactuar con claves primaria c#
saitohfin:
Buenas, tengo un problema y es que no entiendo muy bien como va a entender el access la sentencias SQL que le meto y luego como tratarlas. El caso que tengo entre manos es que he creado una BD de Access y he declarado una variable ID como primaria en una Tabla y en otra lo mismo pero que aparte será
clave ajena de la anterior.
Me gustaría saber a la hora de Insertar datos si tengo que especificar la ID(clave primaria) o si la rellenará el ACCESS por su cuenta. Os enseñó mí situación para que podais comprender.
T_DATOS{ Id CP INTEGER, Estudios VARCHAR, ...} T_FORMULARIO{Id CP && Clave Ajena INTEGER, C1 INTEGER, ...}
Código: (no pongo todo el código para simplificar y no marear)
Crear BASE DE DATOS: en principio esto esta bien, como he dicho falta mucho código, solo presento digamos la partes críticas
/***********************************************************************************/
cat.Create(con)
Conectar();
conexion.Open();
t = "CREATE TABLE DATOS(Id NUMBER(6) PRIMARY KEY, Edad NUMBER(2), Estudios VARCHAR(20) FOREIGN KEY (Estudios)Reference ESTUDIOS,)";
comando = new OleDbCommand(t, conexion);
t = "CREATE TABLE FORMULARIO(Id NUMBER(6) FOREIGN KEY (Id) REFERENCE DATOS ON UPDATE CASCADE ON DELETE CASCADE, C1 NUMBER(1))";
conexion.Close();
/**********************************************************************************/
INSERTAR: Mí duda esta en esta parte de código
/**********************************************************************************/
String t = "INSERT INTO DATOS VALUES(@" + d.getId() + ",@" + d.getEdad() +")";
comand = new OleDbCommand(t, conexion);
t = "INSERT INTO FORMULARIO VALUES(@"+f.getId();
for (int i = 0; i <= 14; i++) t += f.getRespuesta(i) + ",";
t += f.getRespuestastring(14) + "," + f.getRespuestastring(15) + ")";
conexion.Open();
comand = new OleDbCommand(t, conexion);
conexion.Close();
/**********************************************************************************/
En este caso que tengo que hacer, introducir el id manualmente, o no presentarlo y lo pone el access solo??
Muchas gracias por vuestra atención
gerloxxx:
cuando el id es autonumerico, access lo pone solo, luego lo pedes recuperar con un query, algo asi como:
--- Código: SQL --- SELECT LAST(campo_clave) FROM tabla si no es autonumerico tu tendrias que recuperar el ultimo para pasarselo como id (SELECT MAX(CAMPO) + 1 AS TOTAL FROM TABLA), para luego insertarlo en la otra tabla y crear la relacion
saludos
saitohfin:
Ok muchas gracias, ahora tengo un problema haber si le podeis echar un vistazo, se trata de que cuando intento insertar me dice que no existe la tabla Estudios, cuando inserto lo hago con parámetros y tal. Mí código al crear es este:
public void Crear_BD_Opeas(String ruta)
ADOX.Catalog cat = new ADOX.Catalog();
String con = "Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data Source=" + ruta+ "Jet OLEDB:Engine Type=5";
cat.Create(con);
String t = "CREATE TABLE ESTUDIOS(Estudios VARCHAR(20) PRIMARY KEY, Bloque NUMBER(2) NOT NULL)";
Conectar();
conexion.Open();
OleDbCommand comando = new OleDbCommand(t, conexion);
comando.ExecuteNonQuery();
conexion.Close();
}
He quitado los try{ catch{
Muchas gracias.
saitohfin:
Después de debuggear he visto que el problema lo tengo en el CREATE TABLE, pero no sé donde, alguna idea de donde puede estar el problema?? Muchas Gracias!!
gerloxxx:
Debe ser algo asi:
--- Código: SQL --- CREATE TABLE ESTUDIOS( Estudios TEXT(20) PRIMARY KEY, Bloque NUMBER NOT NULL)
Navegación
[#] Página Siguiente
Ir a la versión completa