OdbcCommandBuilder

¿Alguien sabe alguna página o articulo completo donde pueda ver la teoría la practica y la aplicación de esta clase? Encuentro información muy ambigua que no me dice mucho: Tengo el siguiente código:
            OdbcConnection Conexion = new ('Cadena de Conexion');
            OdbcDataAdapter Data = new OdbcDataAdapter('SELECT * FROM Tabla1 WHERE Clve = ' + variable,Conexion);
            OdbcCommandBuilder Builder = new OdbcCommandBuilder(Data);
            Data.DeleteCommand = new OdbcCommand(Builder.GetDeleteCommand(true).CommandText);
            Data.InsertCommand = new OdbcCommand(Builder.GetInsertCommand(true).CommandText);
            Data.UpdateCommand = new OdbcCommand(Builder.GetUpdateCommand(true).CommandText);
            Data. Update('Tabla'); // Le digo de que tabla quiero que tome los datos para modificar la BD
Me arroja un error en el método GetDeleteCommand(true) del OdbcCommandBuilder, el erro es:
"La generación SQL dinámica para DeleteCommand no es compatible con SelectCommand, que no devuelve ninguna información sobre columnas clave."
Como prueba cambie de orden la delcaracion de los comandos del Dataadapter y me di cuenta que me da error para el DeleteCommand y el UpdateCommand, Para el Insertcommmand no me arroja error.
No estoy muy familiarizado con esta clase y supongo que el error es algo obvio pero no se como puedo hacerlo funcionar.
Agradezco alguna breve explicación o un articulo completo de donde aprender.

1 Respuesta

Respuesta
1
Te paso este link:
http://msdn.microsoft.com/es-es/library/system.data.odbc.odbccommandbuilder.aspx
Lo importante aquí es la nota del articulo, intenta quitar el * por los nombres de las columnas, así el objeto OdbcCommand tendrá claro que columnas son las clave para crear las consultas de update y delete.
Hola, intente ponerle el nombre de cada campo en la instrucción SQL, también intente usar el método refreshshema() del odbccommandbuilder antes de generar los comandos y nada, me sigue arrojando el mismo error para el comando delete y update.
No tendrás alguna otra fuente donde muestre un ejemplo no tan ambiguo o alguna explicación para esta situación
Gracias de antemano
Saludos
Pues si tienes razón hay pocos ejemplos acerca de esto. A ver, en el código que me mandaste no veo el método Fill para llenar la tabla:
OdbcConnection Conexion = new ('Cadena de Conexion');
 OdbcDataAdapter Data = new OdbcDataAdapter('SELECT * FROM Tabla1 WHERE Clve = ' + variable,Conexion);
//agregar estas dos lineas de codigo.
DataSet ds = new DataSet();
Data.Fill(ds, "Tabla");
OdbcCommandBuilder Builder = new OdbcCommandBuilder(Data);
Data.DeleteCommand = new OdbcCommand(Builder.GetDeleteCommand(true).CommandText);
Data.InsertCommand = new OdbcCommand(Builder.GetInsertCommand(true).CommandText);
Data.UpdateCommand = new OdbcCommand(Builder.GetUpdateCommand(true).CommandText);
Data. Update('Tabla'); // Le digo de que tabla quiero que tome los datos para modificar la BD
otra duda tienes en tu tabla declarada una llave primaria? esto es escencial para que el OdbcCommandBuilder pueda construir las sentencias de update y delete.
En la página 40 del siguiente link viene un ejemplo, ademas que trae un ejemplo para cada tema que trata sobre ado.net.
http://www.scribd.com/doc/4581253/Dot-NET-Concepts-prakash
Hola, no puse la tabla para no poner código innecesario en el post, pero la tabla si lña tenia bien declarada, sabes que lo que era era la clave primaria de la tabla mysql, la tabla no tenia llave primaria y por eso me arrojaba ese error, al agregarle una llave primaria funciono el código quedando simplemente así:
OdbcConnection Conexion = new ('Cadena de Conexion');
 OdbcDataAdapter Data = new OdbcDataAdapter('SELECT * FROM Tabla1 WHERE Clve = ' + variable,Conexion);
OdbcCommandBuilder Builder = new OdbcCommandBuilder(Data);
Data. Update('Tabla'); // Le digo de que tabla quiero que tome los datos para modificar la BD
Funciona bien pero, yo no quiero tener una llave primaria en esa tabla, otra cosa es que en la tabla tenia "foreign keys", y el commandbuilder no hace los comandos cuando existen estas llaves, en resumen tuve que modificar mi tabla para poder usar el commandbuilder, y no me gusta esa idea je je, la otra es parametrizar los comandos update, ¿delete e insert yo mismo no?.
¿Sabes de algún tutorial donde pueda aprender a parametrizar manualmente? ¿O tengo otra opción?
Muchas gracias
No entiendo el por que no utilizar llave primaria en tu tabla, ya que esas son de mucha utilidad para evitar duplicar información y para mejorar la performance de tu Bd.
Te paso este link para el uso de parámetros
http://msdn.microsoft.com/es-es/library/yy6y35y8.aspx
Que aunque están para sql server solo cambiarías la conexión a MySql.
No uso llave primaria por que la tabla en cuestión es tabla hija, y se llena con la información de otras tablas más otros datos, esta tabla es como mi tabla de configuración.
Sea como sea independientemente de si uso llave primaria o no(usarla no me afecta pero si seria un campo en la tabla inútil), si necesito las foreign keys que proporciona innodb, entonces si tendré que hacer la parametriacion manualmente.
Muchas Gracias por las Aclaraciones

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas