none
Problemas obteniendo los comandos desde el SqlCeCommandBuilder RRS feed

  • Pregunta

  •  

    Hola, como estan?

     

    Tengo un problema generando los comandos desde el SqlCeCommandBuilder. El problema es cuando obtengo el UpdateCommand y el DeleteCommand. Cuando llamo el metodo GetUpdateCommand o GetDeleteCommand, el commandText que viene en estos comandos no es el apropiado. Lo que pasa es que en la clausula Where del commandText, esta viniendo todos los parametros y yo solo necesito las claves primarias para llevar a cabo una eliminacion o una actualizacion.

     

    Yo estoy utilizando Microsoft SQL Server 2005 Compact Edition. Por ejemplo, a continuacion proporciono la especificacion de una tabla para reproducir este comportamiento:

     

    CREATE TABLE Table1 (

    Column1 nvarchar(2) NOT NULL,

    Column2 nvarchar(10) NOT NULL,

    Column3 nvarchar(30) NOT NULL

    )

    ;

     

    ALTER TABLE Table1 ADD CONSTRAINT PK_Table1

    PRIMARY KEY (Column1, Column2)

    ;

     

    Este es el codigo que yo estoy empleando:

     

    string commandText = "Select Column1, Column2, Column3 From Table1";

    SqlCeDataAdapter da = new SqlCeDataAdapter(commandText, m_dbCon);

    SqlCeCommandBuilder cmdBuilder = new SqlCeCommandBuilder(da);

    da.InsertCommand = cmdBuilder.GetInsertCommand();

    da.DeleteCommand = cmdBuilder.GetDeleteCommand();

    da.UpdateCommand = cmdBuilder.GetUpdateCommand();

     

    y por ejemplo, este es el commandText del UpdateCommand obtenido desde el SqlCeCommandBuilder:

    UPDATE [Table1] SET [Column1] = @p1, [Column2] = @p2, [Column3 ] = @p3 WHERE (([Column1] = @p4) AND ([Column2] = @p5) AND ([Column3 ] = @p6))

     

    Como ustedes pueden ver, la clausula where tiene todos los parametros y yo tan solo necesito las llaves primarias.

     

    Aprecio mucho su ayuda...

    martes, 11 de diciembre de 2007 4:15

Respuestas

  • Hola,

    Ya encontre como solucionar este problema, simplemente se agrega la linea de código resaltada en el código de abajo antes de generar los comandos.

     

    SqlCeCommandBuilder cmdBuilder = new SqlCeCommandBuilder(da);

    // Se agrega esta linea de código para que en la clausula WHERE

    // solo se filtre por llaves primarias

    cmdBuilder.ConflictOption = ConflictOption.OverwriteChanges;

    //Se generan los comandos

    da.InsertCommand = cmdBuilder.GetInsertCommand();

    da.DeleteCommand = cmdBuilder.GetDeleteCommand();

    da.UpdateCommand = cmdBuilder.GetUpdateCommand();

     

    Saludos...

    domingo, 18 de mayo de 2008 21:25

Todas las respuestas

  • Hola,

     

    Efectivamente SqlCeCommandBuilder (y todas las clases que heredan de DbCommandBuilder) son una ayuda para la generación de comandos, sin embargo, en ningún caso implica que sea el método más eficiente.

     

    Probablemente en el foro de acceso te puedan profundizar más en el tema pero con SqlCeCommandBuilder poco más se puede hacer,,,,

     

    espero habertelo aclarado,,

     

    saludos

    martes, 11 de diciembre de 2007 14:46
    Moderador
  • Hola Jose,

     

    Muchas Gracias por tu respuesta, pondre este post en el foro de acceso a datos.

     

    Saludos...

    martes, 11 de diciembre de 2007 16:27
  • Hola,

    Ya encontre como solucionar este problema, simplemente se agrega la linea de código resaltada en el código de abajo antes de generar los comandos.

     

    SqlCeCommandBuilder cmdBuilder = new SqlCeCommandBuilder(da);

    // Se agrega esta linea de código para que en la clausula WHERE

    // solo se filtre por llaves primarias

    cmdBuilder.ConflictOption = ConflictOption.OverwriteChanges;

    //Se generan los comandos

    da.InsertCommand = cmdBuilder.GetInsertCommand();

    da.DeleteCommand = cmdBuilder.GetDeleteCommand();

    da.UpdateCommand = cmdBuilder.GetUpdateCommand();

     

    Saludos...

    domingo, 18 de mayo de 2008 21:25