Páginas

segunda-feira, 7 de maio de 2012

Bulk Inserts em C#

Existem duas formas de se fazer um bulk insert em C#
A forma com o SQL classico e a forma com o linq.
Nesse exemplo existe tbm a necessidade de se apagar os registros anteriores para se inserir registros novos.
Eu pessoalmente acredito que a forma de deleção com o linq poderia ser melhorada, ja que para se deletar diversos registros de uma unica vez, fica necessaria um select e um loop com delete de objeto por objeto de registro, enquanto no sql tradicional basta apenas um unico delete ficando o resto do processamento dele para o proprio banco de dados (se alguem souber de alguma forma melhor de se fazer isso sem o loop fique a vontade para dizer).
 Como se ve nos codigos:

Com Linq:
int CodUsuario = Convert.ToInt32(Formulario["CodUsuario"]);

var Deleta = from ObjDeleta in BD.tblAlvo where ObjDeleta.CodUsuario == CodUsuario select ObjDeleta;
            foreach (var del in Deleta)
            {
                BD.tblAlvo.DeleteObject(del);
            }
            BD.SaveChanges();

Com Sql normal
DB.ExecuteStoreCommand("delete from tblAlvo where CodUsuario= " + CodUsuario + "");

Já na inserção nao existe nenhuma grande novidade, exceto que com o linq me pareceu muito mais seguro devido as regras inseridas no entities, enquanto no sql normal a inserção fica vulneravel ao sql injection

Nesse sistema foi inserido um drag'n'drop na tela que o usuario tem acesso para modificar os direitos de acesso para usuarios, que altera um hiddem atraves de jquery, criando uma array Ex. 1,4,7,9,10

com Linq
            int CodUsuario = Convert.ToInt32(Formulario["CodUsuario"]);
            Array Menu = Formulario["MenuEspecial"].Split(',');

            foreach (var item in Menu)
            {
                var Menus = new tblAlvo();
                Menus.CodUsuario = CodUsuario;
                Menus.Menu_Cod = Convert.ToInt32(item);
                BD.tblAlvo.AddObject(Menus);
                BD.SaveChanges();
            }

com Sql Normal

int CodUsuario = Convert.ToInt32(Formulario["CodUsuario"]); 
Array Menu = Formulario["MenuEspecial"].Split(',');

            foreach (var item in Menu)
            {
                 DB.ExecuteStoreCommand("insert into tblAlvo (CodUsuario, Menu_Cod (values "+CodUsuario+","+ item +");
            }

Embora com menos codificação no modo SQL, o mesmo fica mais exposto a ataques de inserções maliciosas.
Espero ter ajudado
Ate mais...

Nenhum comentário:

Postar um comentário