Foros del Web » Programación para mayores de 30 ;) » .NET »

problema con .NET contra MySQL

Estas en el tema de problema con .NET contra MySQL en el foro de .NET en Foros del Web. buenas, os comento. estoy haciendo una aplicación winform en c# contra MySQL y tengo un pequeño problema con los tableAdapter. Cuando me creo el tableAdapter ...
  #1 (permalink)  
Antiguo 17/05/2009, 16:50
 
Fecha de Ingreso: abril-2009
Mensajes: 32
Antigüedad: 15 años
Puntos: 0
problema con .NET contra MySQL

buenas, os comento.
estoy haciendo una aplicación winform en c# contra MySQL y tengo un pequeño problema con los tableAdapter. Cuando me creo el tableAdapter marco la casilla de actualizar la tabla de datos, para que añada la select después de los insert y update. pero sin embargo guardo los cambios y si le vuelvo a dar a configurar, la opcion actualizar tabla de datos aparece desmarcada (cosa q ya se me hace raro). Pero es que no añade los selects, porq cuando ejecuto el programa y lo prueba me da el fallo de la fk cuando intento insertar un registro en un tabla con fk a un registro de otra tabla que acabo de crear.

MySQL no permite las consultas por bloques?? o que está pasando??

gracias de antemano

saludos
  #2 (permalink)  
Antiguo 17/05/2009, 19:31
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: problema con .NET contra MySQL

El problema es más básico y menos complicado de lo que parece: Si te da problemas de FK significa que estás haciendo una de estas cosas mal:
1. Estás intentando poner NULL en un campo definido como FK. Eso no se puede hacer (violación de consistencia de datos).
2. Estás intentando ingresar un valor de FK que no existe en la tabla origen (violación de restricción integridad referencial).
3. Estás intentando ingresar un dato en la tabla secundaria antes de ingresar el valor en la tabla primaria (mismo problema anterior).

En cualquier caso, no es un problema de "consultas en bloque" (sea lo que sea que quieres decir con eso, que no es un concepto de BB.DD.), sino de mal algoritmo de procesos y de conceptos: Cuando declaras una FK no significa que el DBMS va a ingresar en la tabla primaria el valor antes de insertar la tabla secundaria. Significa que va a vigilar que no metas un valor ilegal... que es lo que estás haciendo.
Replantea la secuencia y genera las validaciones ANTES de ingresar los datos en la base.

P.D.: Si hubieses hecho esto contra Oracle o contra DB2 o MSSSQL Server, el resultado sería el mismo, porque las restricciones de las tablas relacionales son también las mismas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 17/05/2009 a las 19:37
  #3 (permalink)  
Antiguo 18/05/2009, 00:43
 
Fecha de Ingreso: abril-2009
Mensajes: 32
Antigüedad: 15 años
Puntos: 0
Respuesta: problema con .NET contra MySQL

hola, con consultas por bloques me refiero a lo de poder marcar la casilla de ctualizar datos, por ejemplo con acces no deja, o eso tengo entendido segun me explicaron en su dia.

en canto a las 3 opciones q comentas, lo q hago es guardar un registro en una tabla y luego de guardarlo creo otro registro en otra tabla q tiene una fk q apunta a la primera, asçi q la çultima no es, es la 2 q tu comentas puesto q al ingresar el primer registro no hace lo de actualizar los datos de la tabla con lo cual el id en el tableAdapter es =1 cuando e la base de datos realmente es 5, si actualizara la tabla de datos, deberçia cambiar el valor del id a 5, y asçi al ingresar el registro en la segunda tabla no fallaria.
  #4 (permalink)  
Antiguo 18/05/2009, 05:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: problema con .NET contra MySQL

Por eso muchas veces los procesos de inserción se manejan dentro de los Store Procedures y no de ADO.
El sistema de ADO es relativamente flexible y bastante amigable, pero en cuanto a bases de datos es absolutamente ineficiente.
Puede parecer una buena idea, pero si quieres implementar ABM contra bases de datos relacionales, olvídate de los CommandBuilders. No son funcionales. Es mejor (aunque requieran más conocimientos de SQL), programar los SqlCommand (en este caso MysqlCommand) en forma directa, de modo de poder controlar mejor estos "pequeños detalles", como el el caso de los ID numéricos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 18/05/2009, 07:01
 
Fecha de Ingreso: abril-2009
Mensajes: 32
Antigüedad: 15 años
Puntos: 0
Respuesta: problema con .NET contra MySQL

ok, gracia por la informacion,. es que es la primea vez q trabajo contra MySQL con .NET y cuando utilizaba eso con SQLServer funcionaba sin problemas.

un saludo!!
  #6 (permalink)  
Antiguo 20/05/2009, 10:02
 
Fecha de Ingreso: abril-2009
Mensajes: 32
Antigüedad: 15 años
Puntos: 0
Respuesta: problema con .NET contra MySQL

buenas!! vuelvo por aquí otra vez poque ya encontré la causa del problema y la solución, así que la posteo por si a alguien le puede servir.

Ya lo he porbado y ya funciona correctamente.
la solución.... he modificado la consulta insert del tableAdapter para añadir la select y recuperar el id, en MySQL hay que utilizar la función last_insert_id() en vez de scope_identity de SQLServer. Con eso ha funcionado a la perfección, al hacer el insert a ha actualizado el valor id al correspondiente a la base de datos y listo.

asi que como conclusion la casilla de actualizar la tabla de datos de ADO.NET cuando estás atacando a una bd MySQL no funciona, hay q modificar las consultas a mano. y tener en cuenta q el parametro id tiene q ser output

muchas gracias por vuestra ayuda!!

saludos!!
  #7 (permalink)  
Antiguo 20/05/2009, 10:31
 
Fecha de Ingreso: abril-2009
Mensajes: 32
Antigüedad: 15 años
Puntos: 0
Respuesta: problema con .NET contra MySQL

buenas!! vuelvo por aquí otra vez poque ya encontré la causa del problema y la solución, así que la posteo por si a alguien le puede servir.

Ya lo he porbado y ya funciona correctamente.
la solución.... he modificado la consulta insert del tableAdapter para añadir la select y recuperar el id, en MySQL hay que utilizar la función last_insert_id() en vez de scope_identity de SQLServer. Con eso ha funcionado a la perfección, al hacer el insert a ha actualizado el valor id al correspondiente a la base de datos y listo.

asi que como conclusion la casilla de actualizar la tabla de datos de ADO.NET cuando estás atacando a una bd MySQL no funciona, hay q modificar las consultas a mano. y tener en cuenta q el parametro id tiene q ser output

muchas gracias por vuestra ayuda!!

saludos!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:07.