Tom55 0 Denunciar post Postado Novembro 24, 2011 olá galera.... eu tenho um sisteminha que está abrindo um arquivo xml, lendo nodos especificos(isso é necessário) até ai tudo certo, tenho uma rotina que valida se os dados estão corretos e posteriormente insere no banco. por falta de tempo(precisava ser entregue) fiz de um modo que se a linha estivesse correta, já enviasse para o banco, como não precisava me preocupar com o tempo(já que eu mesmo faço o monitoramento) fiz dessa maneira. só que em um xml de 59mil items(nodos válidos para minha base) notei que ele estava inserindo apenas 39mil. se eu transformo o xml para um xls e faço a importação, ele importa normalmente os 59mil! também notei que ele não tem um padrão, pois ele pega a linha 23590 e não pega a 23591,23592, mas pega a 23593. notei isso ao fazer um teste dentro do meu laço que lê linha a linha! existe alguma explicação lógica para esse fato? Compartilhar este post Link para o post Compartilhar em outros sites
Ivan.Teles 23 Denunciar post Postado Novembro 24, 2011 Cara até onde sei não, mas pode ocorrer o seguinte. Tem servidores onde se um recurso chegar a um pico alto de consumo do servidor, o servidor pode derrubar ou mesmo para o recurso. Compartilhar este post Link para o post Compartilhar em outros sites
Tom55 0 Denunciar post Postado Novembro 25, 2011 O que e mais estranho e que ele nao interrompe. Como eu comentei ele le a linha 25239 e nao le a a 25240, mas le a 25242! Eu to achando que como o xml e muito grande, eu comeco a verificacao/insert antes de ele terminar de carregar, por isso o problema. Existe algum modo de forcar a aplicacao em "espera" ate que uma determinada acao termine? Vou tentar efetuar a importacao via procedure, para ver se resolve! Compartilhar este post Link para o post Compartilhar em outros sites
Rafael Mitsunaka 11 Denunciar post Postado Novembro 25, 2011 Não está dando timeout no seu insert? Compartilhar este post Link para o post Compartilhar em outros sites
Tom55 0 Denunciar post Postado Novembro 28, 2011 Rafael, Não está dando não.... como eu comentei, fiz mais teses e ao que parece ele pula algumas linhas no momento em que está carregando o XML. Fiz o teste carregando o xml para uma data table e coloquei uns if´s no meio para ver ele passar pelo registro que eu queria. e digamos que ele está lá lendo, sem filtro nenhum, ele le +- assim id nome 25340 joao 25341 leila 25345 maria os registros 25342, 25343 e 25344 ele simplismente pula Compartilhar este post Link para o post Compartilhar em outros sites
Tom55 0 Denunciar post Postado Dezembro 1, 2011 mudei um pouco o foco do meu teste e parei de tentar fazer a "via sacra" de verificar os dados... parti para usar o openxml e a procedure sp_xml_preparedocument . até ai tudo certo, testei um exemplo comum e deu certo, porém, quando eu coloco o meu xml(reduzido) ele dá o seguinte erro Erro de análise XML 0xc00ce562 na linha número 1, próximo ao texto XML "<". Msg 6602, Level 16, State 2, Procedure sp_xml_preparedocument, Line 1 A descrição do erro é 'Uma declaração não foi fechada.'. eis o meu XML <COMPRA> <PRODUTO> <DESC>Desodorante</DESC> <PRECO>10</PRECO> </PRODUTO> </COMPRA> e já tentei sem a primeira linha <?xml version='1.0' encoding='ISO-8859-1'?> - Onde tem aspas simples eu mudei para " e também para duas aspas simples '' mas em ambos os testes o resultado foi o mesmo. o xml ai de cima está com nomes trocados apenas para proteção de informação, mas a estrutura é a mesma. mudei a tatica... agora não tenho uma.... hahahaha o open xml é bom, mas eu precisaria passar todo o string para a procedure rodar, pois ele não abre diretamente o xml. só que duvido ele ler um milhão de caracteres... acham que roda? ou tem algum comando que eu possa utilizar para fazer o sistema "congelar" até que o arquivo seja totalmente carregado em memória? Compartilhar este post Link para o post Compartilhar em outros sites
Tom55 0 Denunciar post Postado Dezembro 5, 2011 Consegui resolver 90% dos meus problemas usando xml, resolvi todos do post anterior agora o problema é que o SQL não aceita o formato de data que eu estou enviando e dá erro. quando eu utilizo o mesmo formato, direto no SQL Server ele aceita, mas quando vai a string na programação e passa para a procedure(via código) dá erro. alguma sugestão? Compartilhar este post Link para o post Compartilhar em outros sites
Ivan.Teles 23 Denunciar post Postado Dezembro 5, 2011 Cara isso deve ser problema de globalization, tenta enviar em outro formato mm/dd/aaaa ou mm-dd-aaaa que deve resolver. Compartilhar este post Link para o post Compartilhar em outros sites
Tom55 0 Denunciar post Postado Dezembro 15, 2011 Ivan.... Sigo com o problema fiz o seguinte teste. peguei parte do meu xml e joguei na minha SP <COMPRA> <PRODUTO> <DESC>Desodorante</DESC> <PRECO>10</PRECO> <VALIDADE>12/25/2011</VALIDADE> </PRODUTO> </COMPRA> Usei esse formato de data: MM/dd/yyyy Quando utilizo a SP para importar este XML para a base, ele funciona normalmente e importa os dados. agora, quando executo a SP via codigo, me retorna o erro: "Erro de estouro aritimético ao converter expression no tipo de dados datetime". se eu utilizo o formato para qual o banco está mostrando yyyy-MM-dd acontece o mesmo problema Compartilhar este post Link para o post Compartilhar em outros sites
Ivan.Teles 23 Denunciar post Postado Dezembro 15, 2011 Cara fax o seguinte dentro da SP tenta fazer um convert na data: http://imasters.com.br/artigo/229/sql_server/trabalhando_com_datas_no_sql_server/ Compartilhar este post Link para o post Compartilhar em outros sites
Tom55 0 Denunciar post Postado Dezembro 15, 2011 cara, não é possível realizar um convert dentro de um openxml. ai me dei conta de uma coisa... no meu openXML onde está o campo Data, eu estava marcando ele como datetime VALIDADE datetime 'DTVAL' troquei isso para VALIDADE varchar(10) 'DTVAL' e mandei a data via sistema normal, usando o padrão dd/mm/aaaa e funcionou no ambiente de desenvolvimento, mas no ambiente de produção não rolou ainda, estou fazendo mais uns testes EDITANDO pode marcar como resolvido!!! eu havia esquecido de alterar a procedure em ambiente de produção! achei que tinha rolado... agora o problema é com os nodos.... eu tenho uma série de nodos para importar, mas eles estão em niveis diferentes, ai o openxml não aceita.... alguma idéia? Compartilhar este post Link para o post Compartilhar em outros sites
Tom55 0 Denunciar post Postado Dezembro 15, 2011 o meu problema agora está no nivel dos nodos... alguns registros estão em nodos diferentes, e com isso não consigo ler os mesmos. até consigo ler, mas ele replica o primeiro registro para todos os outros. bom.... consegui resolver, era somente ajuste de como ele estava lendo os nodos... valeu! agora sim podemos marcar como resolvido! hehe Compartilhar este post Link para o post Compartilhar em outros sites