Skip Navigation Links



Translate this page now :



»Programação
»Programação.NET
»Banco de Dados
»Webdesign
»Office
» Certificações Microsoft 4
»Treinamentos4
»Programação 4
»Webdesign«
»Office & User Tips«
»Grupos de UsuĆ”rios
»CĆ©lulas AcadĆŖmicas«
intcontpiada : 118
O Renegado
Você já está cadastrado e participa do grupo de usuários de sua cidade ? Se não, comente o porque.
 
 
FaƧa um pequeno teste com 10 questƵes de VB
.:.
Teste seus conhecimentos em Visual Basic, SQL Server e ASP 3.0 com nossas provas on-line
.:.
Aprimore seus conhecimentos em programaĆ§Ć£o com nosso treinamento on-line de lĆ³gica de programaĆ§Ć£o
.:.
Veja nosso calendƔrio de treinamentos
Gostou da PƔgina?
Então

para um amigo!

Pesquisa personalizada
Pesquisar Dicas:

 







Criando um serviço e importando XML com .NET

O Visual Studio .NET possui muitos novos recursos, possibilitando que realizemos tarefas antes muito difíceis de serem realizadas com VB 6.0

Vamos então fazer uma aplicação de exemplo para demonstrar alguns desses recursos. Em nossa aplicação vamos fiscalizar um determinado diretório (c:\dados, por exemplo), identificando a criação de novos arquivos neste diretório. Ao ser criado um novo arquivo, iremos ler seu conteúdo (que estará em formato XML) para um DataSet e importar seu conteúdo para uma tabela do banco.

A tabela terá a seguinte estrutura :

Nome varchar(40)
cargo varchar(30)

Apenas para o exemplo não importa muito quando campos iremos utilizar, isso não irá alterar a forma de construir o código.

Para começar precisaremos criar uma nova aplicação. Mas não criaremos uma WindowsApplication comum, para garantir que a aplicação possa estar sempre rodando e que possa ser iniciada de imediato quando o sistema iniciar deveremos criar a aplicação como Windows Service, ou seja, um serviço do Windows.

Vamos chamar o serviço de ImportacaoDados. Além de criar o projeto com esse nome devemos alterar o ServiceName da classe Service1 que é criada para nós. Podemos Também alterar o nome da classe, name, para ImportacaoDados, por exemplo. Devemos usar a janela de propriedades, não o código, pois este nome aparece em vários locais do código de inicialização do serviço.

As propriedades da classe ImportacaoDados (que herda as características da classe ServiceBase) possui várias propriedades que determinam os eventos do sistema que o serviço pode tratar. A configuração default já é adequada, com a propriedade CanStop definida como true, indicando que o serviço trata o evento de stop, e a propriedade autolog como true, indicando que o serviço irá automaticamente logar os eventos de stop, start que ocorrerem.

Todo serviço precisa de um instalador, que é criado dentro do mesmo Assembly do serviço. Mas o VB.NET pode inserir o instalador no projeto automaticamente, basta que na janela de propriedades, com a classe ImportacaoDados selecionada, cliquemos na instrução Add Instaler, na parte inferior da janela de propriedades.

Fazendo isso será criado um novo arquivo .VB chamado ProjectInstaller.VB . Neste arquivo são criados os componentes ServiceInstaller1 e ServiceProcessInstaller1. Precisamos configurar esses dois componentes :

No ServiceInstaller1 vamos alterar o starType para Automatic. Isso determina que o serviço deverá ser configurado para se iniciar automaticamente sempre que o Windows se iniciar. É interessante observar que poderíamos também configurar as dependencias do serviço, determinando que para se iniciar o serviço precisará que outros já estejam iniciados. No nosso exemplo, porém, não precisamos configurar isso.

No ServiceProcessInstaller1 deveremos alterar a propriedade Account para LocalSystem, determinando assim que no momento de instalação o serviço deve ser configurado para rodar na LocalSystemAccount, conta local do sistema.

Voltando ao Service1.vb, vamos inserir um componente chamado FileSystemWatcher. Este objeto nos permite fazer uma tarefa que antes era extremamente complexa : Vigiar o sistema de arquivos para identificar alterações em arquivos, deleção, criação de novos arquivos, ou outros eventos no sistema.

Vamos alterar o nome do FileSystemWatcher, chamando-o apenas de FSW. Existem 3 propriedades que determinam quais arquivos serão vigiados : Filter, determina o filtro de arquivos, configurado como "*.*" por default. Path determina o caminho da pasta que será vigiada e NotifyFilter determina os eventos que serão checados.

Em nosso exemplo iremos verificar apenas a criação de arquivos, então podemos alterar notifyFilter para Filename. Iremos também configurar o Path como "C:\dados" e manter o filter da forma que está. Um recurso interessante que devemos utilizar são as Dynamic Properties. Filter e Path são ótimos candidatos a serem configurados como Dynamic Properties. A configuração de Dynamic Properties nos permite vincular uma propriedade de um determinado objeto a uma configuração no manifesto da aplicação. Desta forma podemos manter os valores de filter e path gravados em um arquivo externo, o que fará com que estas propriedades sejam facilmente alteradas mesmo com a aplicação já compilada.

Basta para isso selecionarmos na janela de propriedades o item Dynamic Properties e darmos um nome que será utilizado para a gravação das propriedades Filter e Path. Ao fazermos isso o janela de propriedades passa a sinalizar o fato das propriedades estarem sendo lidas de um arquivo de configuração, enquanto no solution explorer podemos observar que é adicionado o arquivo de configuração, inicialmente com o nome de APP.config.

A propriedade EnableRaisingEvents do FileSystemWatcher funciona como um on/off, determinando se ele estará ou não vigiando o sistema de arquivos e disparando eventos para nos alertar do ocorrido.

Como estamos desenvolvendo um serviço, vamos inicialmente configurar a EnableRaisingEvents como False e vamos habilita-la/desabilita-la no start/stop do serviço. Para isso basta entrarmos no código do service1.vb e começarmos o desenvolvimento, veja :

Protected Overrides Sub OnStart(ByVal args() As String)
' Add code here to start your service. This method should set things
' in motion so your service can do its work.
FSW.EnableRaisingEvents = True
End Sub

Protected Overrides Sub OnStop()
' Add code here to perform any tear-down necessary to stop your service.
FSW.EnableRaisingEvents = False
End Sub


No Service1.vb, deveremos criar um objeto OledbConnection e um objeto OledbCommand que servirão para fazermos a conexão com o banco de dados e atualizarmos os dados no banco. Vamos chama-los de CN e CMD, para ficar mais fácil trabalhar com eles. Precisaremos definir a string de conexão no objeto CN. A string de conexão é outra excelente candidata a se transformar em Dynamic Properties, não apenas neste exemplo mas eu diria que em toda aplicação, desta forma permitindo que a localização do banco de dados possa ser facilmente alterada, apenas corrigindo a string dentro do manifesto da aplicação.

Já no objeto CMD vamos liga-lo com o objeto CN e definir o commandText. Podemos montar o CommandText dinâmicamente através do query Builder, basta termos o cuidado de alterar o tipo da query para insert into e utilizarmos ? nos valores que deverão ser preenchidos por parâmetros.

O objeto OLEDBCOMMAND sempre pergunta, após a montagem da query, se podem redefinir a coleção de parâmetros do Command. Devemos permitir e ele irá criar a definição dos parâmetros nome e cargo para nós. Podemos ver o que foi feito através da coleção parameters, mas não iremos alterar nada.

Chegou a hora então de programarmos o evento Created do FSW, que é disparado sempre que um novo arquivo é criado no diretório que está sendo vigiado. Nosso objetivo é criar um DataSet e carregar para dentro do DataSet os dados do novo arquivo. Veja como fica o inicio deste código :


Private Sub FSW_Created(ByVal sender As Object, ByVal e As System.IO.FileSystemEventArgs) Handles FSW.Created

Dim ds As New DataSet()

ds.ReadXml(e.FullPath)

End Sub

Assim, com apenas duas linhas de código carregamos para um DataSet o conteúdo do novo arquivo. Agora precisamos atualizar o banco. Isso exigiria normalmente que fizessemos um algorítimo como loop para jogarmos os dados no banco executando o Command. Bem, não no .NET. Podemos apenas criar um DataAdapter, liga-lo ao Command e utiliza-lo para atualizar o banco automaticamente. Veja como fica o código :

Private Sub FSW_Created(ByVal sender As Object, ByVal e As System.IO.FileSystemEventArgs) Handles FSW.Created

Dim ds As New DataSet()
Dim da As OleDb.OleDbDataAdapter

ds.ReadXml(e.FullPath)

da = New OleDb.OleDbDataAdapter()
da.InsertCommand = cmd

da.Update(ds, "funcionario")


ds.Dispose()
ds = Nothing
da.Dispose()
da = Nothing
End Sub

Observem que este data adapter nem ao menos possui um selectCommand. Isso não é necessário já que estamos apenas inserindo registros no banco.

Pronto. Está feito. Isso mesmo. Com Poquissimas linhas de código, praticamente um desenvolvimento todo visual, conseguimos montar uma aplicação que será instalada como serviço do Windows, monitorar os arquivos criados em um diretório, ler o conteúdo destes arquivos e jogar os dados para uma tabela de banco.

O próximo passo é instalar esse serviço. Para isso o framework nos traz um utilitário chamado installutil. Executando no prompt InstallUtil <nome do assembly> este utilitário dispara o instalador que criamos em nosso assembly e o instalador por sua vez se encarrega de fazer as configurações do serviço na máquina.

Você agora só precisa agora ter cuidado com a montagem do arquivo XML, pois o dataSet é um pouco temperamental na leitura deste arquivo. Veja um exemplo de como ele fica :

<cadfunc>
<funcionario>
<nome>Joao</nome>
<cargo>faxineiro</cargo>
</funcionario>
</cadfunc>

Observe a forma como os dados estão montados : Nome e cargo estão colados a suas respectivas tags. Veja um exemplo do que sereia uma montagem ERRADA :

<cadfunc>
<funcionario>
<nome>
Joao
</nome>
<cargo>
faxineiro
</cargo>
</funcionario>
</cadfunc>


Você pode pensar a principio que não existe nada errado neste XML e, realmente, ele é um XML válido. Mas se olhar mais atentamente poderá observar que dentro do campo nome e dentro do campo cargo temos 2 CR (Enter, código ASC=13). Isso será lido como parte dos dados e inserido como informação nestes campos, dentro do banco de dados. Desta forma devemos tomar cuidado com o que inserimos nas tags de dados do XML.

Tendo esse cuidado, você poderá montar vários arquivos e joga-los, um por um, no diretório que está sendo vigiado por sua aplicação. Poderá observar como a aplicação lê o conteúdo do XML e executa o insert na base de dados.

Dennes Torres
MCSD,MCSE,MCDBA





Envie seus comentįrios sobre este artigo

Nome :

E-mail :

Comentários :


Avise-me quando houverem novos comentįrios nesta pįgina

Veja abaixo os comentários já enviados :

Nome : Rafael da Silva Carvalho E-Mail : rafael@rtsolucoes.com
Boa Noite Dennes,

Achei bem interessante este artigo é exatamente o que estou precisando, mas não estou conseguindo executar, está ocorrendo o erro "InvalidOperationException" no momento de eu dar um update no DataAdapter, estou utilizando o SqlServerCe ( Palm )

Segue abaixo o meu código, creio que o erro seja na query que está no CMD ou estou esquecendo de alguma coisa.

Gostaria muito da sua ajuda se possível. Muito Obrigado Rafael

Public Function preencher_BD() As String

Try

Dim newDS As New DataSet
Dim da As SqlCeDataAdapter
Dim cmd As New SqlCeCommand

cmd.CommandText = "INSERT INTO carro (cod_carro,num_carro,placa,ano,modelo) VALUES (?,?,?,?,?)"

'Lê o arquivo XML
newDS.ReadXml("Program Files\SISCONV\CARRO.xml")

'Define uma tabela no DataSet
da = New SqlCeDataAdapter
da.InsertCommand = cmd
da.Update(newDS, "carro")

Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Function

Nome : Marcio Severo E-Mail : mlsevero@ig.com.br
Rafael,
estou exatamente com o mesmo erro que você, também estou tentando popular um banco sqlserverce no PocketPC. Por acaso você conseguiu resolvê-lo?

Dennes, dá uma ajuda pra gente... :S

[]s Marcio
Nome : PVGEfUBldyJJVkgGmX E-Mail : dinchen@bedrex.de
Disons que pour le moment je n'en ai vremnait pas besoin, que mon classic me suffit en fait tre8s bien (je me suis un peu se9dentarise9 quoi ) et qu'un jour of9 l'autre ce sera un iPhone, meame si le touch a pour lui un design vremnait top avec ses bords sombres moins bling bling et sa finesse de folie
Nome : 1 E-Mail : -1'
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
1
Nome : 1 E-Mail : 1
1
Nome : jordan shoes E-Mail : kdhapffc@gmail.com
document_srl=
Nome : converse shoes E-Mail : tpusbs@gmail.com
plus/guest
Nome : Michal E-Mail : michalproffitt@gmail.com
When is sales for bauer hockey jerseys? Find site: cheap authentic nike nfl jerseys china
Nome : Judi E-Mail : support@genericpharmacydrug.com
1wTW6I https://www.genericpharmacydrug.com
Nome : 8 Ball Pool Hack E-Mail : zugkgudkhhe@gmail.com
I have to thank you for the efforts you have put in writing this website. I'm hoping to view the same high-grade blog posts by you later on as well. In truth, your creative writing abilities has inspired me to get my very own site now ;)
8 Ball Pool Hack https://is.gd/avksk6
Nome : snaphack E-Mail : lzqfbmfgfnt@gmail.com
Whats up! I just would like to give an enormous thumbs up for the nice information you have got right here on this post. I might be coming back to your weblog for more soon.
snaphack https://chatroll.com/profile/samirixsgg
Nome : how to hack someones snapchat E-Mail : ttrzntw@gmail.com
This web site is really a walk-by means of for the entire info you wished about this and didn't know who to ask. Glimpse here, and you'll undoubtedly discover it.
how to hack someones snapchat https://wiki-book.win/index.php?title=Concealed_Techniques_To_Make_Snapchat_Infinitely_Better
Nome : how to hack someones snapchat E-Mail : vhkvwe@gmail.com
Your house is valueble for me. Thanks!.
how to hack someones snapchat https://hotel-wiki.win/index.php?title=Surprise_Tricks_To_Make_Snapchat_Infinitely_Better
Nome : cheap authentic jerseys from china E-Mail : pszjbtcpt@gmail.com
A person necessarily assist to make seriously articles I'd state. postcheap nike nfl jerseysThat is the first time I frequented your website page and so far? I surprised with the research you made to make this particular publish extraordinary. Excellent activity!
cheap authentic jerseys from china https://legacy.deeroaks.com/
Nome : new nfl jerseys E-Mail : rajavhb@gmail.com
Attractive section of content. I just stumbled upon your website and in accession capital to assert that I get in fact enjoyed account we supply cheap nfl jerseys your blog posts. Anyway Il be subscribing to your feeds and even I achievement you access consistently quickly.
new nfl jerseys https://legacy.deeroaks.com/
Nome : jersey dress nfl E-Mail : qawthlb@gmail.com
I do agree with all the ideas you've presented in your postcheap nfl jerseys china. They are really convincing and will definitely work. Still, the posts are very short for starters. Could you please extend them a bit from next time? Thanks for the post.
jersey dress nfl https://legacy.deeroaks.com/
Nome : where can you get cheap nfl jerseys E-Mail : abtkwlevanm@gmail.com
Il right away postcheap jerseys snatch your rss as I can't find your email subscription link or newsletter service. Do you've any? Kindly permit me recognize so that I could subscribe. Thanks.
where can you get cheap nfl jerseys https://legacy.deeroaks.com/
Nome : cheap jerseys wholesale online E-Mail : dttexdo@gmail.com
relationships with other bloggers. Check out this extremely well-written trackback tutorial Permalink,we supply cheap nfl jerseys.
cheap jerseys wholesale online https://legacy.deeroaks.com/
Nome : nfl jersey shirts E-Mail : lgxhzvg@gmail.com
I believe this is one of the most significant info for me. And i'm happy reading your article. However want to commentary on few general issues, The site taste is wonderful,post the articles is truly great D.Just right process, cheers
nfl jersey shirts https://legacy.deeroaks.com/
Nome : cheap nfl uniforms E-Mail : ihbjsshgg@gmail.com
As a side note, the more we can use trackbacks, pingbacks, and backlinks to spread the love and our message, the better.we supply cheap nfl jerseys I encourage you to figure out how to use these tools as they can really make our words online much more effective and heard.
cheap nfl uniforms https://legacy.deeroaks.com/
Nome : authentic nfl jerseys for sale E-Mail : buhtaib@gmail.com
Hello there, just became aware of your blog through Google, postand found that it's really informative cheap nfl jerseys. I gonna watch out for brussels. Il be grateful if you continue this in future. Numerous people will be benefited from your writing. Cheers!
authentic nfl jerseys for sale https://legacy.deeroaks.com/
Nome : cheap jerseys free shipping E-Mail : ltupte@gmail.com
Somebody essentially assist to make critically posts I would state. postThis is the very first time I frequented your web page and thus far? I amazed with the analysis you made to create this actual put up amazing. Excellent activity!
cheap jerseys free shipping https://legacy.deeroaks.com/
Nome : cheap football jerseys wholesale E-Mail : oteckw@gmail.com
We are a group of volunteers and starting a new scheme in our community. Your website offered us with valuable information to work on cheap nfl jerseys china. You've done a formidable job and our entire community will be thankful to you.
cheap football jerseys wholesale https://legacy.deeroaks.com/
Nome : wholesale jersey websites E-Mail : ksheszyoq@gmail.com
Since I didn't really understand how this works,we supply cheap nfl jerseys I did some searching and found an outstanding WordPress Trackback Tutorial that explains much of what I was finding confusing.
wholesale jersey websites https://legacy.deeroaks.com/
Nome : cheap nike nfl authentic jerseys E-Mail : ppjnvj@gmail.com
Thank you for the auspicious writeup. It actually was a entertainment account it. Glance advanced to more brought agreeable from you! However, how can we keep up a correspondence?
cheap nike nfl authentic jerseys https://legacy.deeroaks.com/
Nome : cheap authentic jerseys from china E-Mail : elbegxzyi@gmail.com
I think that is among the most significant information for me. And i'm glad studying your article. However wanna commentary on few general issues, The web site taste is perfect,postwholesale nfl jerseys the articles is actually excellent D.Just right activity, cheers
cheap authentic jerseys from china https://legacy.deeroaks.com/
Nome : where to buy cheap nfl clothing E-Mail : fyjnqklie@gmail.com
Discover what's the deal with ingbacks? According to Wikipedia, WP supports automatic pingbacks where all the links in a published article can be pinged when the article is published?we supply cheap nfl jerseys That explains why I get messages about new comments? when posting an edit that cross-references another post of my own. Info on trackbacks and pingbacks in WP here.
where to buy cheap nfl clothing https://legacy.deeroaks.com/
Nome : jersey on sale cheap E-Mail : ghuawwd@gmail.com
I do agree with all of the ideas you've presented in your postcheap nfl jerseys china. They are really convincing and will certainly work. Still, the posts are very short for starters. Could you please extend them a bit from next time? Thanks for the post.
jersey on sale cheap https://legacy.deeroaks.com/
Nome : inexpensive nfl gear E-Mail : bpybsypqx@gmail.com
I feel that is among the so much significant information for me. And i'm glad studying your article. But want to statement on some normal things, The site style is perfect,post the articles is truly nice D.Good process, cheers
inexpensive nfl gear https://legacy.deeroaks.com/
Nome : inexpensive nfl gear E-Mail : kfokkhz@gmail.com
Thanks for another wonderful article. Where else could anyone get that type of information in such an ideal way of writing? I have a presentation next week, and I am on the look for such information.
inexpensive nfl gear https://legacy.deeroaks.com/
Nome : jerseys online E-Mail : lhmuxwjrvh@gmail.com
Somebody essentially assist to make severely articles I might state. postThis is the first time I frequented your website page and thus far? I amazed with the research you made to make this particular put up extraordinary. Magnificent job!
jerseys online https://legacy.deeroaks.com/
Nome : where to find cheap nfl jerseys E-Mail : qonwiaquxn@gmail.com
Pretty nice post. I just stumbled upon your blog and wished to say that cheap nfl jerseys china I've truly enjoyed surfing around your blog posts. In any case I will be subscribing to your feed and I hope you write again very soon!postcheap nike nfl jerseys.
where to find cheap nfl jerseys https://legacy.deeroaks.com/
Nome : cheap jersey website E-Mail : azyecavoir@gmail.com
relationships with other bloggers. Check out this extremely well-written trackback tutorial Permalink,we supply cheap nfl jerseys.
cheap jersey website https://legacy.deeroaks.com/
Nome : 21 jersey E-Mail : jjjvurxiksg@gmail.com
I feel that is among the such a lot important info for me. And i'm satisfied reading your article. But want to observation on few basic issues, The website taste is great,postcheap nike nfl jerseys the articles is in point of fact great D.Excellent process, cheers
21 jersey https://legacy.deeroaks.com/
Nome : eric decker broncos jersey E-Mail : uzplsjy@gmail.com
Pretty nice post. I just stumbled upon your weblog and wanted to say that cheap nfl jerseys china I've really enjoyed surfing around your blog posts. In any case I will be subscribing to your feed and I hope you write again soon!post.
eric decker broncos jersey https://legacy.deeroaks.com/

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Conheça mais sobre o nosso site :

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::



Quer saber mais?
Faça um curso na Búfalo Informática, Treinamento e Consultoria e
Prepare-se para o Mercado!
Veja o que a Búfalo tem para você.

ļæ½ BĆŗfalo InformĆ”tica, Treinamento e Consultoria - Rua Ɓlvaro Alvim, 37 Sala 920 - CinelĆ¢ndia - Rio de Janeiro / RJ
Tel.: (21)2262-1368 (21) 9240-5134 (21) 9240-7281 e-Mail:
contato@bufaloinfo.com.br