Mucho se habla de que los datasets de por si son lentos y hacen el proceso muy problematico aunque su programacion es relativamente facil, separas todo y con unas pocas lineas(1) haces un insert update o delete, aqui te voy a enseñar como puedes agregarle performance a la hora se hacer Insert y Update Masivos, mira una vez creados tus datasets tipados, tienes que agregar una funcion que salio apartir del framework 2.0 UpdateBatchSize, esta funcion tiene valores, 0 como el maximo permitido por lote 1, si se envian de uno a uno, y >1 la cantidad de lotes a enviar, sencillo no, ahora, si lo haces uno a uno tendras que enviar si haces un insert de 10,000 de registros, tendras que enviarlos 10,000 mil veces y las 10,000 veces llamaras al servidor esto pone un performance desastrozo. Si lo haces igual a =0, el mandara el maximo permitido por tu servidor, si tu servidor aguanta un maximo de 5000 registros , el mandara cada 5000 registros enviara el lote de inserts, esto pone tu servidor a trabajar un poco, pero lo ayudas por otro lado, puedes ponerlo en un default de 1000, que es lo que comunmente se utiliza.
Por ahora todo bien ahora veamos tu codigo.
Antes de hacer tu Update agrega esto.
upco.Adapter.UpdateBatchSize = 1000;
if (da.Adapter.SelectCommand != null)
{
da.Adapter.SelectCommand.CommandTimeout = 0;
}
if (upco.Adapter.UpdateCommand != null)
{
upco.Adapter.UpdateCommand.UpdatedRowSource = UpdateRowSource.None;
upco.Adapter.UpdateCommand.CommandTimeout = 0;
}
if (insco.Adapter.InsertCommand != null)
{
insco.Adapter.InsertCommand.UpdatedRowSource = UpdateRowSource.None;
insco.Adapter.InsertCommand.CommandTimeout = 0;
} upco.Update(ahorasi ejecuta tu update)
Si lo hiciste mal en el tipado te va a reventar con un null en el UpdateRowSource,
Te recomiendo que crees tu metodo en dataset tipado con los comandos FILL y GET solamente no agregues nada mas y en las propiedades del tipado donde estan los SelectCommand, InsertCommand, UpdateCommand, DeleteCommand ahi metes tu codigo para determinado caso, de esta forma cuando pases por aqui va a ser diferente de null.
Lo probé y puse ambos escenarios, el performances va de un 10% a un 20%.En tiempo.