Você está na página 1de 67

Sumrio

Edio 18 Nmero 18 Ano 04 2010 EDITORES Alexandre Tarifa Diego Nogare Emerson Facunte Sergio Gonalves Fernanda Sallai REVISO Sara Barbosa Fabrcio Sanchez Erick Lopes EDITORAO E DIAGRAMAO Adriano Almeida Fabiano Rodrigues COLABORADORES Alliston Carlos Antonio Lucas Finotti Pereira Anderson Castro Everton Jos Benedicto Fabrcio Sanchez Fabrcio Frana Lima Fernando Gonalves talo Chesley Leandro Alves Santos

04 :. Quanto tempo levaria para descobrir uma database corrompida?


Por: Fabrcio Frana Lima

9 :. Introduo ao Windows Phone 7 Series


Por: Anderson Castro

17 :. Autenticando usurios em ASP .NET Web Forms


Por: Fernando Gonalves

23 :. Visual Studio LightSwitch bom, mas preciso entend-lo!


Por: Fabrcio Sanchez

29 :. Entity Framework: Trabalhando com Model First


Por: talo Chesley

Fale com Editor


muito importante para a equipe saber a sua opinio sobre a revista, caso tenha alguma critica, sugesto, ou elogio entre em contato. Caso tenha interesse em publicar um artigo na revista envie o ttulo e um resumo do tema em formato Word.
revista@codificando.net

35 :. SQL Server Integration Services (SSIS)


Por: Everton Jos Benedicto

43 :. O novo Visual Studio LightSwitch


Por: Alliston Carlos

47 :. Gerando Grficos com Silverlight, WCF e LINQ


Por: Antonio Lucas Finotti Pereira

Produzido por:

59 :. Reutilizando Cdigo Nativo no .NET


Por: Leandro Alves Santos

www.codificando.net

03:. Editorial

66:. Close ( )

Edio 18 Nmero 18 Ano 04 2010

Editorial
Ol leitores da revista Codificando.Net e-Magazine, nesse editorial no poderei detalhar sobre os artigos que compem a revista, pois tenho muitos comunicados importantes a fazer. Encerro nessa edio de nmero 18 minha passagem pela revista. com imenso prazer e satisfao que fao parte dessa equipe desde a sua edio de nmero 9 e sou editora desde a edio de nmero 15. Foi 1 ano e 8 meses de pura dedicao e alegria para transmitir a vocs, leitores, contedo de qualidade. Agradeo a toda a equipe da revista Codificando.Net e-Magazine que seguiu ao meu lado fazendo dessa uma referncia para muitos profissionais da rea. Alm do meu desligamento da revista com pesar que falo do desligamento de mais 3 profissionais, so eles os diagramadores Adriano Almeida e Fabiano Rodrigues e o revisor Fabrcio Sanchez. Agradeo a eles por todo o empenho e dedicao que tiveram revista e desejo todo sucesso do mundo para todos. Mas muita calma pessoal, pois, tenho 2 comunicados muito bons para fazer. Um deles a entrada do Erick Lopes como revisor da revista e a do novo editor Cleber Dantas. Profissionais esses, que tenho certeza, faro o melhor de si para dar continuidade ao trabalho que j vem sendo elaborado na revista e para o crescimento da mesma. Podemos dizer que se fecha um ciclo e comea se outro. Fernanda Sallai
"Encerrando ciclos. No por causa do orgulho, por incapacidade, ou por soberba, mas porque simplesmente aquilo j no se encaixa mais na sua vida." (Fernando Pessoa)

Cleber Dantas

Erick Lopes

EDITORIAL

e-magazine

Quanto tempo levaria para descobrir uma database corrompida?


Por: Fabrcio Frana Lima

Alguns de vocs devem estar neste momento com um peso na conscincia por no terem uma resposta para esta simples pergunta. Lembraram que j leram em algum artigo na internet uma pessoa falando sobre um comando chamado DBCC CHECKDB que verifica se uma database est corrompida, mas mesmo assim no fizeram nada no seu banco de dados. Outros sabem mais ou menos o tempo que levariam para descobrir uma corrupo, pois realizam esse procedimento manualmente quando possuem um tempo livre e se lembram de executar. Entretanto, tambm tenho certeza que existem vrias pessoas que j possuem uma rotina que checa a consistncia de seu banco de dados e sabem exatamente o tempo que levaria para descobrir se existe uma database corrompida no seu ambiente. Parabns para estas pessoas. Acredito que todos vocs j ouviram falar no comando DBCC CHECKDB presente no SQL Server. Este comando checa a consistncia de todos os objetos de uma base de dados examinando sua estrutura fsica e lgica a fim de identificar se existe alguma corrupo nesta base. Geralmente, as pessoas s procuram conhecer esse comando quando encontram algum problema de corrupo no seu ambiente atravs de uma

mensagem de erro. Por exemplo, quando um usurio faz uma leitura de um dado corrompido em alguma tabela. Entretanto, uma corrupo deve ser encontrada antes do usurio, para que seja possvel resolv-la o mais rpido possvel e esse problema no chegar ao usurio final. Voc que responsvel por alguma base de dados, sendo um Administrador de Banco de Dados ou um Desenvolvedor que cuida da base de dados de seus prprios sistemas, deve criar um procedimento para realizar a procura por dados corrompidos ou inconsistentes em todas as suas bases de dados com a menor freqncia que seu ambiente permitir. Mas Fabrcio, eu tenho uma tima rotina de backup, onde armazeno o backup de todas as minhas databases nos ltimos 10 dias, ento caso algum me relate um erro de algum dado corrompido, basta eu restaurar um backup para resolver o meu problema, certo? Nem sempre. Imagine que voc descubra uma corrupo de uma database duas semanas depois dela ter ocorrido. Na sua tima rotina de backup, voc guardou 10 dias de backup com dados
Out / Nov - 2010

Codificando.net e-magazine
|

www.codificando.net

Quanto tempo levaria para descobrir uma database corrompida?

e-magazine

corrompidos. Voc no tem uma base de dados limpa para realizar a recuperao dos seus dados, o que pode ocasionar uma perda de dados valiosos dependendo do tipo de corrupo gerada. Pense em como voc chegaria para o seu chefe e diria que perdeu dados de umas das tabelas mais importantes do seu ambiente e no tem como recuperlos. Espero que ningum tenha que passar por essa experincia. Em meu ambiente, possuo um job dirio que chama uma Stored Procedure que executa o comando DBCC CHECKDB para todas as minhas databases e todos os dias recebo um relatrio com o resultado da execuo desse comando. Demonstrarei em seguida como fao esse acompanhamento em meu ambiente, de modo que voc tambm possa utiliz-lo. Claro, que cada ambiente tem suas particularidades que podem tornar mais difcil o desenvolvimento dessa rotina, tais como: possuir uma janela de tempo para a execuo, recursos de hardware disponveis, databases com tamanhos muito grandes e espao disponvel no disco que armazena a database Tempdb. Mostrarei como fao no meu ambiente para que sirva de parmetro na criao de sua prpria rotina, contudo, devem ser realizadas adequaes e testes necessrios para a implantao em seu ambiente. Inicialmente, criei uma Stored Procedure que realiza o comando DBCC CHECKDB das databases do meu servidor. A Listagem 1 apresenta o cdigo para realizar esta tarefa:

CREATE PROCEDURE dbo.stpCHECKDB_Databases AS BEGIN DECLARE @Databases TABLE( Id_Database INT IDENTITY (1,1), Nm_Database VARCHAR(50)) DECLARE @Total INT, @Loop INT, @Nm_Database VARCHAR(50) /* Caso no deseje fazer o check de alguma database basta retir-la na clusula WHERE*/ INSERT INTO @Databases (Nm_Database) SELECT Name from Master.dbo.Sysdatabases WHERE Name not in ('Tempdb')

SELECT @Total = max(Id_Database) FROM @Databases SET @Loop = 1 WHILE (@Loop <= @Total) BEGIN SELECT @Nm_Database = Nm_Database FROM @Databases WHERE Id_Database = @Loop DBCC CHECKDB(@Nm_Database) WITH NO_INFOMSGS SET @Loop = @Loop + 1 END END
Listagem 1 - Utilizao da opo NO_INFOMSGS.

Codificando.net e-magazine
|

Na Listagem 1, pode-se notar a utilizao da opo NO_INFOMSGS para reduzir o resultado desse comando e retornar apenas as informaes essenciais para identificar possveis erros. Tambm possvel identificar que a database Tempdb ignorada. Caso voc no queira que esse procedimento seja executado para outras databases, basta adicion-las na clusula IN juntamente com a Tempdb. Alm de no ter necessidade de rodar um CHECKDB para o Tempdb, tambm pode existir alguma database no

www.codificando.net

Out / Nov - 2010

Quanto tempo levaria para descobrir uma database corrompida?

e-magazine

seu ambiente que seja restaurada ou clonada em outro servidor. Nesse caso, no necessrio fazer essa verificao mais de uma vez para a mesma database. O prximo passo identificar uma janela no seu ambiente onde exista menos concorrncia por recursos do servidor e agendar a execuo da procedure stpCHECKDB_Databases. Depois de identificado o melhor horrio de execuo, basta criar um job com a periodicidade que voc definiu para chamar essa procedure. possvel visualizar o OUTPUT da execuo do comando DBCC CHECKDB de trs maneiras: Na prpria conexo que executa o comando manualmente, como por exemplo, no Management Studio. No Log do SQL Server. No Microsoft Windows application event log.

-- Seleciona o nmero de arquivos. INSERT INTO #logF EXEC sp_enumerrorlogs DECLARE @TSQL NVARCHAR(2000) DECLARE @lC INT SELECT @lC = MIN(ArchiveNumber) FROM #logF --Loop para realizar a leitura de todo o log. WHILE @lC IS NOT NULL BEGIN INSERT INTO #TempLog EXEC sp_readerrorlog @lC SELECT @lC = MIN(ArchiveNumber) FROM #logF WHERE ArchiveNumber > @lC END
Listagem 2 - Query que faz a leitura dos Logs e armazena em uma tabela NO_INFOMSGS.

Eu utilizo o Log do SQL Server para buscar as informaes da execuo do comando DBCC CHECKDB em minha base de dados e retorno essas informaes para uma planilha que recebo diariamente atravs de um pacote do Integration Services. A Listagem 2, faz a leitura dos arquivos de Log do SQL Server e armazena o resultado em uma tabela temporria:
CREATE TABLE #TempLog ( LogDate DATETIME, ProcessInfo NVARCHAR(50), [Text] NVARCHAR(MAX)) CREATE TABLE #logF ( ArchiveNumber LogDate LogSize

Recuperado todo o contedo do log do SQL Server, com a Listagem 3 filtramos esse resultado para visualizarmos apenas as informaes referentes execuo do comando DBCC CHECKDB. Deve-se filtrar a query atravs da coluna Logdate de acordo com o horrio agendado para a execuo dessa rotina. No exemplo da listagem 3, retornado todas as execues realizadas no dia anterior.

Codificando.net e-magazine

SELECT LogDate, substring(Text,charindex ('found',Text), charindex('Elapsed Time',Text) charindex('found',Text)) Possiveis_Erros, Text Texto_Completo FROM #TempLog WHERE Logdate >= cast(floor(cast(getdate ()-1 as float)) as datetime) and logdate < cast(floor(cast (getdate() as float)) as datetime) and Text like '%CHECKDB%' ORDER BY LogDate
Listagem 3 - Filtrando os resultados.

INT, DATETIME, INT )

Esta query retorna a data de execuo do comando, uma substring do texto do log apenas com a informao de possveis

www.codificando.net

Out / Nov - 2010

Quanto tempo levaria para descobrir uma database corrompida?

e-magazine

erros para facilitar a visualizao e o texto completo gerado no log do Sql Server (figura 1).

Logo, antes de criar um procedimento para fazer um DBCC CHECKDB em todas as suas databases, voc deve realizar um teste com apenas uma base em uma janela de pouca utilizao do banco de dados para identificar o tempo dessa execuo. Com isso, voc ter a ideia de quantas databases voc pode verificar por dia para criar a sua rotina. Cabe salientar, que tambm possvel acompanhar o progresso da execuo desse comando na dmv sys.dm_exec_requests. Na Listagem 4, a coluna Percent_Complete retorna o percentual de execuo de um comando DBCC que est sendo executado no banco de dados:
SELECT Percent_Complete,* FROM sys.dm_exec_requests WHERE Command LIKE '%DBCC%'
Listagem 4 - Retornando o percentual de execuo.

Figura 1: Resultado do log com as execues do comando DBCC

Para que vocs possam visualizar como seria o resultado desta query no caso da existncia de uma database corrompida, baixei no blog do Paul Randal um exemplo de uma database corrompida e chamei de DBCorrompida1. Em seguida rodei o comando DBCC CHECKDB e o resultado gerado no log do Sql Server pode ser visto na figura 2:

Figura 2 - Resultado do log de uma database corrompida.

O tempo de execuo do comando DBCC CHECKDB depende de uma srie de fatores, tais como: Tamanho da Database. Recursos fsicos disponveis no servidor: Memria, I/O, disco e CPU. Concorrncia de Memria, I/O, CPU e de updates que estejam sendo realizados na base de dados que est sendo checada. Velocidade do disco onde o Temdb fica armazenado.

Caso voc possua uma base de dados muito grande, para reduzir o tempo de execuo desse procedimento, voc pode utilizar a opo WITH PHYSICAL_ONLY, que realiza apenas uma verificao da integridade fsica da sua database. Todavia, ainda necessria uma verificao completa dessa base com uma menor frequncia. No meu ambiente de trabalho, como j disse anteriormente, recebo essa informao em uma planilha juntamente com outras informaes do meu banco de dados, o famoso CheckList dirio que todo DBA deve realizar. Como foi preciso ler todo o arquivo de log do SQL Server para identificar a execuo do comando DBCC CHECKDB, tambm temos todas as outras informaes geradas no Log do

Codificando.net e-magazine
|

www.codificando.net

Out / Nov - 2010

Quanto tempo levaria para descobrir uma database corrompida?

e-magazine

SQL Server disponveis. Com isso, inclu mais uma aba na planilha com todas essas informaes do Log, obtendo um controle muito maior de tudo o que acontece diariamente no meu banco de dados. Respondendo a pergunta inicial desse artigo, no meu ambiente eu demoro apenas um dia para descobrir se uma database est corrompida. E voc, demoraria quanto tempo? Espero que possa ter te ajudado h diminuir esse tempo.

Fabrcio Frana Lima Bacharel em Cincia da Computao pela Universidade Federal do Espirito Santo, trabalha com SQL Server desde 2006, possui os ttulos MCP, MCTS e MCITP Database Administrator em SQL Server e tambm mantm um blog sobre SQL Server: http://fabriciodba.spaces.live.com

Codificando.net e-magazine
|

www.codificando.net

Out / Nov - 2010

e-magazine

Introduo ao Windows Phone 7 Series

Por: Anderson Castro

Hardware Relevado na Espanha em 15/02 Mobile World Congress o Windows Phone 7 Series o novo sistema operacional da Microsoft para dispositivos mveis que promete balanar o mercado.

Caractersticas Touch (4 ou mais pontos de contato com a tela). Sensores: A-GPS, Acelermetro, Bssola. Cmera: 5 megas pixels ou superior. GPU: DirectX 9

Resoluo Padro: 800x480 (figura 2)

800 Codificando.net e-magazine

Figura 1 - Hardware.

Todos os aparelhos Windows Phone 7 tero trs botes: Start, com o cone do Windows, para acesso inicial. Search com servios de buscas Bing. Back, para voltar tela anterior.

480
Figura 2 - Resoluo Padro.

www.codificando.net

Out / Nov - 2010

Introduo ao Windows Phone 7 Series

e-magazine

Interface Os servios e aplicativos foram organizados em cinco centrais (Hubs): People Pictures Docs Music & Vdeo Games

Figura 4 - Hub-office.

Hub-People Responsvel por informaes dos seus contatos inclusive nas redes sociais, update de fotos e mensagens das redes (figura 3).

Hub-Pictures Nesse hub voc tem acesso a sua galeria de imagens, fotos podendo interagir com as redes sociais (figura 5).

Figura 5 - Hub-pictures.

Codificando.net e-magazine

HubGames
Figura 3 - Hub-people.

Hub-Office Nesse hub voc ter acesso ao pacote Office e integrao com SharePoint, conforme figura 4.

Acesso ao Xbox Live com todas suas informaes (figura 6).

Figura 6 - Hub-games.

www.codificando.net

Out / Nov - 2010

10

Introduo ao Windows Phone 7 Series

e-magazine

Hub-Music + Video Para quem j usurio do Zune percebera que ele esta presente em seu telefone incluindo todas as funes sociais da rede do Zune conforme figura 7.

System Notification Volume

Figura 7 - Hub-music & vdeo.

Sua interface inovadora e inspiradora com o codnome de Metro a interface do WP7 promete uma experincia totalmente nova ao usurio (figuras 8 e 9).

Figura 9 - Interface.

Ciclo de vida A base de desenvolvimento dos aplicativos para WP7 ser o Silverlight, e para desenvolver no ser preciso uma verso especifica ser simplesmente Silverlight.

Codificando.net e-magazine

Figura 8 - Metro-Nova interface do WP7.

Inicialmente vamos entender como funciona o ciclo de vida de uma aplicao para WP7 (figura 10).

Direct3D Start Ex- App Page

Figura 10 - Ciclo de vida.

www.codificando.net

Out / Nov - 2010

11

Introduo ao Windows Phone 7 Series

e-magazine

Em relao instalao e distribuio da aplicao no Windows Phone 7 ela s poder ser feita via MarketPlace da Microsoft que atualmente funciona da seguinte forma, voc faz um cadastro e paga-se em torno de R$ 215,00 por ano para ter seus aplicativos disponveis aos usurios , bem similar a AppleStore. A Microsoft disse que ser publicado os critrios para desenvolvedores WP7. Arquitetura

Desenvolvimento Quando falamos em desenvolvimento para Windows Phone podemos fazer diversas aplicaes usando Silverlight, e podemos criar jogos usando XNA. Vamos dar os primeiros passos no desenvolvimento de uma aplicao para WP7. Voc vai precisar: Kit de desenvolvimento para o Windows Phone 7:

- Visual Studio 2010 Express for Windows phone - Windows Phone Emulator - Silverlight 4 Tools For Visual Studio - XNA Game Studio 4.0 - Microsoft Expression Blend for Windows Phone Link para Download: http://migre.me/1o49p (Windows Phone Developer Tools RTW)
Figura 11 - Arquitetura do Windows Phone.

Usando o Visual Studio 2010 vamos iniciar um novo projeto. Vamos criar um projeto do tipo Silverlight for Windows PhoneWindows Phone Application e vamos cham-lo de nosso conhecido HelloWorld, perceba que tambm podemos criar um projeto do tipo XNA para jogos no Windows Phone, Panorama e Pivot Application veja na figura 13.

Codificando.net e-magazine

Figura 12 - Framework.

www.codificando.net

Out / Nov - 2010

12

Introduo ao Windows Phone 7 Series

e-magazine

Figura 13 - Novo Projeto.

Na listagem 1 podemos ver a estrutura default de nossa aplicao (XAML). Ele contem dois TextBlock o primeiro contendo o nome da aplicao e o segundo o titulo da pagina. Em seguida um grid onde iremos colocar os elementos de nossa aplicao (listagem 1).

Figura 14 - Modo Design.

Vamos adicionar ao nosso grid um Button e um TextBlock, veja a figura 15.

Codificando.net e-magazine

Listagem 1 - XAML.

Fique a vontade para alterar no nome de sua aplicao e o ttulo da pgina. Agora vamos ver no modo Design (figura 14).

Figura 15 - Interface da aplicao.

Vamos trabalhar no evento click de nosso Button. Adicione o texto Hello World ao nosso TextBlock dentro do evento click.

www.codificando.net

Out / Nov - 2010

13

Introduo ao Windows Phone 7 Series

e-magazine

Veja que no construtor de nossa pgina temos o SupportedOrientations e nesse ponto que vamos definir que nossa aplicao poder ser visualizada em modo retrato ou paisagem usando o acelermetro do hardware (listagem 2).

Nessa verso RTW lanada dia 15-09 temos a opo de criar um aplicativo do tipo Windows Phone Panorama Application (figura 18).

Figura 18 - Tipos de Projeto. Listagem 2 - MainPage.cs.

Vamos iniciar um projeto Panomara Application (figura 19). Vamos compilar nossa aplicao e ver o emulador do WP7, conforme figuras 16 e 17.

Codificando.net e-magazine

Figura 19 - Aplicao em modo design.

Figura 16 - Menu Windows Phone.

Veja a estrutura criada nesse tipo de projeto (figura 20).

Figura 17 - Aplicao funcionando.

Figura 20 - Estrutura do Panorama Application.

www.codificando.net

Out / Nov - 2010

14

Introduo ao Windows Phone 7 Series

e-magazine


Figura 21 - Aplicao funcionando com trs painis .

Windows Phone e XNA Game Studio Outro ponto forte do WP7 ser a sua capacidade de rodar jogos de forma fantstica alm de sua integrao com a LIVE. possvel criar jogos para WP7 usando XNA Game Studio 4. Em agosto foi liberada uma lista dos jogos para WP7. 3D Brick Breaker Revolution" (Digital Chocolate) "Age of Zombies" (Halfbrick) "Armor Valley" (Protg Games) "Asphalt 5" (Gameloft) "Assassins Creed" (Gameloft) "Bejeweled LIVE" (PopCap) "Bloons TD" (Digital Goldfish) "Brain Challenge" (Gameloft) "Bubble Town 2" (i-Play) "Butterfly" (Press Start Studio) "CarneyVale Showtime" (MGS) "Castlevania" (Konami Digital Entertainment) "Crackdown 2: Project Sun-

burst" (MGS) "De Blob Revolution" (THQ) "Deal or No Deal 2010" (i-Play) "Earthworm Jim" (Gameloft) "Fast & Furious 7" (i-Play) "Fight Game Rivals" (Rough Cookie) "Finger Physics" (Mobliss Inc.) "Flight Control" (Namco Bandai) "Flowerz" (Carbonated Games) "Frogger" (Konami Digital Entertainment) "Fruit Ninja" (Halfbrick) "Game Chest-Board" (MGS) "Game Chest-Card" (MGS) "Game Chest-Logic" (MGS) "Game Chest-Solitaire" (MGS) "GeoDefense" (Critical Thought) "Ghostscape" (Psionic) "Glow Artisan" (Powerhead Games) "Glyder 2" (Glu Mobile) "Guitar Hero 5" (Glu Mobile) "Halo Waypoint" (MGS) "Hexic Rush" (Carbonated Games) "I Dig It" (InMotion) "iBlast Moki" (Godzilab) "ilomilo" (MGS) "Implode XL" (IUGO) "Iquarium" (Infinite Dreams) "Jet Car Stunts" (True Axis) "Lets Golf 2" (Gameloft) "Little Wheel" (One click dog) "Loondon" (Flip N Tale) "Max and the Magic Marker" (PressPlay) "Mini Squadron" (Supermono Limited) "More Brain Exercise" (Namco Bandai) "O.M.G." (Arkedo) "Puzzle Quest 2" (Namco Bandai) "Real Soccer 2" (Gameloft) "The Revenants" (Chaotic Moon) "Rise of Glory" (Revo Solutions)
Out / Nov - 2010

Codificando.net e-magazine
|

www.codificando.net

15

Introduo ao Windows Phone 7 Series

e-magazine

Dica J que o assunto Mobile conhea o Microsoft Tag. Use o Microsoft Tag em seu celular e descubra.( http://tag.microsoft.com )
Figura 22 - Exemplo de jogo no Windows Phone 7.

Basta baixar o Tag-Reader e tirar um foto da figura 23.

Consideraes Esta uma pequena amostra do que esta por vir at o fim desse ano. importante estarmos preparados para esse grande salto que a Microsoft esta dando na tecnologia mvel . O mercado de dispositivos mveis esta crescendo cada dia mais, abrindo oportunidades para desenvolvedores, seja ele de aplicativos ou de games. Empresas como LG,Samsumg,HTC j esto dando as caras com seus aparelhos. Windows Phone 7 Series j nasce grande, preparado para as redes sociais, games, multimdia portanto a hora essa. Espero que tenham gostado do artigo e at a prxima. Links: http://developer.windowsphone.com/ http://windowsteamblog.com/ windows_phone/b/windowsphone/ http://winphoneblog.com.br www.codificando.net www.silverlight.net www.portalsilverlight.com.br www.desenvolvendoparaweb.net

Figura 23 - Tag-Reader.

Anderson Castro Graduado em Anlise e Desenvolvimento de Software atua no mercado de tecnologia a mais de trs anos com foco na plataforma .Net, desenvolvedor em C# Windows Forms, Asp.net e Silverlight. Atualmente aprofundando seus conhecimentos em WPF, WCF e Silverlight. Escrevo e participo atualmente nas seguintes comunidades e blogs: www.codificando.net www.portalsilverlight.com.br www.desenvolvendoparaweb.net

Codificando.net e-magazine
|

www.codificando.net

Out / Nov - 2010

16

e-magazine

Autenticando usurios em ASP .NET Web Forms


Por: Fernando Gonalves

Tenho visto muitas perguntas sobre como podemos implementar a autenticao em ASP.NET sem a utilizao dos controles da Toolbox Login. Por esse motivo resolvi escrever este artigo onde demonstrarei como simples criar o processo de autenticao de usurios em uma aplicao ASP.NET com pouqussimas linhas de cdigo. Como de costume o primeiro passo abrir o Visual Studio. Vou utilizar o Visual Studio 2010, mas fique a vontade para utilizar qualquer outra verso, pois o cdigo ser exatamente o mesmo. Com o Visual Studio aberto clique em File | New | Project e selecione Visual C# | Web conforme figura 1:

Na caixa Name coloque o nome do projeto. No meu caso estou chamando o projeto de AutenticandoUsuarios. Com o projeto criado vamos expandir a guia Solution Explorer. Clique com o boto direito no nome do projeto e selecione Add | New Item (figura 2).

Codificando.net e-magazine

Figura 2 New Item.

Na janela que se abre, adicione um Web Form com o nome de Login.aspx (figura 3).
Figura 1 New Project.

www.codificando.net

Out / Nov - 2010

17

Autenticando usurios em ASP .NET Web Forms

e-magazine

Nota: Se voc estiver utilizando outra verso do Visual Studio pode existir uma pequena diferena entre os arquivos. Vamos definir que o arquivo Default.aspx o arquivo padro da nossa aplicao, ou seja, sempre que o usurio acessar o nosso site ele ser redirecionado para a tela Default.aspx. Para isso, clique com o boto direito no arquivo Default.aspx e selecione a opo Set As Start Page (figura 6).

Figura 3 Incluindo arquivo Login.aspx.

Repita o mesmo processo e adicione mais um Web Form com o nome de Default.aspx (figura 4).

Codificando.net e-magazine

Figura 4 Incluindo arquivo Default.aspx.

Nesse momento seu projeto deve ter uma estrutura muito parecida com a figura 5:

Figura 6 Definindo pgina inicial.

Figura 5 Estrutura do projeto.

www.codificando.net

Out / Nov - 2010

18

Autenticando usurios em ASP .NET Web Forms

e-magazine

D um duplo clique sobre o arquivo Default.aspx e digite o cdigo da listagem 1:

At este ponto no h nenhuma novidade para quem j esta familiarizado com o ASP.Net. Vamos agora informar a nossa aplicao que qualquer tela do sistema s poder ser acessada se anteriormente o usurio tiver sido autenticado. Para isso, pare a execuo da aplicao e clique duas vezes sobre o arquivo Web.config.

Listagem 1 - Definindo o contedo da pgina

D um duplo clique sobre o arquivo Login.aspx e adicione o cdigo da listagem 2:

Com o arquivo Web.config aberto adicione a tag <authentication> conforme a listagem 3:

Listagem 3 Formas de autenticao permitidas para aplicao.

Listagem 2 Definindo o contedo da pgina Login.aspx.

Reparem que dentro da tag Authentication temos o campo mode que aceita somente os valores exibidos na imagem acima. Vamos as definies de cada um dos possveis modos de autenticao aceitos pelo ASP.Net. Forms: Permite que voc customize uma janela onde voc dever implementar a sua lgica de validao para autenticar um determinado usurio. Utilizaremos este modelo em nosso exemplo. None: Identifica que todos os usurios podero acessar a sua aplicao. Por exemplo,

Codificando.net e-magazine

Agora vamos executar a aplicao e veremos que a janela Default.aspx ser exibida conforme figura 7.

Figura 7 Visualizao do contedo da pgina Default.aspx.

www.codificando.net

Out / Nov - 2010

19

Autenticando usurios em ASP .NET Web Forms

e-magazine

um site de notcias onde todos podem navegar sem a necessidade de efetuar uma autenticao. Passport: Com este modo possvel integrarmos nossa aplicao com a tela padro da Microsoft de forma que a validao ser feita atravs do Live ID da Microsoft e receberemos apenas um token de autenticao, porm no temos acesso ao e -mail e senha utilizados para logar no Live ID. Windows: Permite que sua aplicao identifique as credenciais do usurio logado no Windows (mquina local do cliente) e as utilize para logar na aplicao. Desta forma possvel que o usurio acesse sua aplicao, porm sem a necessidade de ter de informar seu usurio e senha novamente. Para o nosso exemplo vou utilizar o modo Forms. Agora dentro da tag Authentication vamos adicionar a tag forms conforme a listagem 4:

res que definimos na listagem 4. name: Nome do cookie que ser utilizado pelo ASP.NET para armazenar as informaes do usurio logado. loginUrl: Nome da pgina que contm a lgica que controlar a autenticao dos usurios do site. defaultUrl: Nome da pgina inicial da sua aplicao timeout: Tempo em minutos que o cookie persistido. Se voc ficar mais tempo do que o aqui definido sem interao com a aplicao, voc ser redirecionado novamente para a tela definida no parmetro loginUrl. path: Identificador de qual diretrio da aplicao deve receber a proteo quanto ao acesso sem a devida autenticao. Aps o fechamento da tag authentication, vamos adicionar o cdigo da listagem 5.

Codificando.net e-magazine

Listagem 4 Configurando a forma de autenticao da aplicao.

Listagem 5 Configurando a autorizao de acesso a aplicao.

Vamos s definies de cada um dos valo-

www.codificando.net

Out / Nov - 2010

20

Autenticando usurios em ASP .NET Web Forms

e-magazine

Com o cdigo (listagem 5) estamos negando o acesso a qualquer pgina da nossa aplicao aos usurios no autenticados. Sempre que o ASP.NET identificar que o usurio no esta autenticado, o ASP.NET utilizar os parmetros definidos dentro tag authentication para redirecionar o usurio a pgina definida como pgina responsvel pela autenticao dos usurios. No nosso exemplo, a pgina responsvel pela autenticao a pagina Login.aspx. Vamos executar a nossa aplicao para verificarmos o que acontece. Vejam que ao invs de abrir a janela Default.aspx, a janela aberta foi a janela Login.aspx. Porm reparem no contedo da url que foi montado no browser (figura 8).

cdigo responsvel por autenticar o nosso usurio na aplicao. Para isso devemos voltar ao designer da janela Login.aspx e vamos adicionar um controle Button (listagem 6).

Listagem 6 Incluso do controle Button na janela de Login.

No evento Click do controle Button vamos implementar o cdigo da listagem 7:

Codificando.net e-magazine

Figura 8 Redirecionamento para a janela de Login de forma automtica.

Listagem 7 Implementao do evento click do controle Button.

Conforme podemos ver, o ASP.NET nos redirecionou para a janela Login.aspx, mas identificando que aps a validao com sucesso, devemos ser redirecionados para a janela Default.aspx. Agora nos resta apenas implementar o

Se neste momento executarmos novamente nossa aplicao, seremos redirecionados para tela de login. Porm se clicarmos no boto Efetuar o login seremos redirecionados para a janela Default.aspx de forma automtica.

www.codificando.net

Out / Nov - 2010

21

Autenticando usurios em ASP .NET Web Forms

e-magazine

Conforme visto o processo de controle de autenticao do ASP.NET muito simples e fcil de utilizarmos em nossas aplicaes. Agora utilize sua criatividade e divirta-se com o exemplo mostrado. O projeto completo pode ser baixado atravs do link:
http://cid-391089d9c0e72ec7.office.live.com/self.aspx/ Artigos/AutenticandoUsuarios.zip

Fernando Gonalves Graduado em Sistemas de informao pela Universidade Ibirapuera (UNIB) em So Paulo. Trabalha com desenvolvimento de aplicaes a 8 anos, nos ltimos 4 com a tecnologia .Net (ASP.Net, Windows Mobile e C#). Moderador/ Colaborador da comunidade Desenvolvendo para Web e o mantm o blog: http://www.fernandodev.com/blog

Codificando.net e-magazine
|

www.codificando.net

Out / Nov - 2010

22

e-magazine

Visual Studio LightSwitch bom, mas preciso entend-lo!


Por: Fabrcio Sanchez

Recentemente a Microsoft liberou a verso Beta 1 do Visual Studio LightSwitch para a comunidade. Entretanto, j vinha acompanhando discusses acaloradas em alguns fruns e demais sites da comunidade tcnica sobre o produto. As discusses giravam em torno da seguinte pergunta: Qual a utilidade de uma ferramenta Next > Next > Finish para construo de aplicativos? Na verdade, a desconfiana com o Visual Studio LightSwitch vem de dois fatos muito comuns nas comunidades tcnicas: Avaliar com base em opinies de terceiros (sem nunca ter aberto ao menos o LightSwitch), ou seja, se a pessoa X falou que ruim, pego a opinio dela como base e j formo a minha opinio. No entender o foco do produto (este mais comum). Abri o LightSwitch, mas no gostei dele como ferramenta de desenvolvimento. Novamente, preciso entender o foco do produto.

Neste artigo pretendo complementar o artigo do Mrcio. Alguns fatos importantes Antes da parte prtica com o LightSwitch, preciso mencionar alguns fatos mencionados no artigo do Marcio. O LightSwitch uma ferramenta diferente do Visual Studio tradicional, outro produto. uma IDE para desenvolvimento de aplicaes mais simples, com o foco voltado para profissionais que no necessariamente sejam profissionais de desenvolvimento. Uma das formas de trabalho a criao de uma nova entidade dentro do LightSwitch e com base nela criar as telas de insero, excluso, etc. Neste artigo, apresentarei como possvel criar uma aplicao utilizando uma base de dados j existente. O download do Visual Studio LightSwitch Beta 1 est disponvel gratuitamente no http://www.microsoft.com/visualstudio/enus/lightswitch. O Visual Studio LightSwitch foi lanado na verso Beta 1 (para testes), ou seja, algumas das caractersticas do produto que apresento neste artigo podem ter

Codificando.net e-magazine

Mrcio Fabio Althmann escreveu um excelente artigo sobre o LightSwitch para o portal Meio Bit abordando sobre o quesito foco, acesse o link: http://meiobit.com/73145/visual-studiolightswitch-comece-a-desenvolver-agora/.

www.codificando.net

Out / Nov - 2010

23

Visual Studio LightSwitch bom, mas preciso entend-lo!

e-magazine

seu comportamento alterado ou serem removidas nas verses posteriores. Como uma verso Beta, importante que voc envie seu feedback para a equipe de produto da Microsoft para que o produto possa continuar em constante melhoria. Uma caracterstica do LightSwitch que me agradou bastante e que j faz meno ao sucesso do produto o fato de o mesmo gerar a App tanto para rodar na web como no desktop. Em ambos os casos, a App gerada em Silverlight, o que mostra mais uma vez a consolidao desta ltima. Implementando uma aplicao com base em uma fonte de dados j existente. Usaremos neste artigo, a base Northwind da Microsoft para criar um aplicativo simples utilizando os recursos do LightSwitch. Aps instalar o Visual Studio LightSwitch siga os seguintes passos: Abra o Visual Studio 2010. Vamos criar um novo projeto (File > New > Project) Note que na janela que se abre, do lado esquerdo, um novo tem aparece LightSwitch. Selecione este tem, a linguagem, o local onde ser salvo o projeto, o nome da Solution e clique em OK .

Figura 1 - Tela de escolha do tipo do projeto.

Muito bem. Voc acabou de criar um projeto do tipo LightSwitch. Se tudo correu bem no processo descrito anteriormente, voc deve estar visualizando uma tela semelhante conforme Figura 2.

Figura 2 - Tela de abertura do projeto LightSwitch.

Codificando.net e-magazine

Uma das caractersticas do LightSwitch que me agradam o fato de ser intuitivo, haja vista o pblico que o mesmo pretende alcanar. Existem duas formas bsicas para se criar um aplicativo com o LightSwitch: Criar suas tabelas e, a partir dela ir montando as telas de busca, insero, etc., Utilizar uma fonte de dados prexistente.

A Figura 1 exibe onde o procedimento descrito deve ser aplicado.

www.codificando.net

Out / Nov - 2010

24

Visual Studio LightSwitch bom, mas preciso entend-lo!

e-magazine

Como o Mrcio j cobriu em seu artigo o trabalho com a primeira opo, neste artigo cobriremos a segunda opo. Para isso, clique na opo Attach to external database, a figura 3 apresenta esta janela e suas opes.

Figura 4 - Configurao da conexo com a Database.

Figura 3 - Opes disponveis para selecionar uma fonte de dados.

Na verso Beta 1, o LightSwitch disponibiliza trs opes para anexar fonte de dados. Database, SharePoint e WCF RIA Service. No entraremos em maiores detalhes sobre cada uma das opes, mas, em linhas gerais, a opo Database faz meno a bancos de dados fsicos (neste artigo utilizaremos esta opo), a opo SharePoint faz meno aos fluxos de dados disponibilizados nos portais de colaborao da empresa e, finalmente, WCF RIA Service faz meno conectividade com algum servio disponibilizado como fonte de dados. Selecione a opo Database e clique em Next. A Figura 4 apresenta a tela que se abrir ao prosseguir.

Como mencionado anteriormente, iremos utilizar a base de dados Northwind implementada em SQL Server, portanto, no campo Datasource no alteraremos o tipo, muito embora seja possvel. No campo Server Name definimos o nome do servidor do banco de dados, portanto, fornea o nome do servidor que pretende se conectar. Na opo Logon on the server marque a opo que se adequa melhor ao seu cenrio. Em meu caso, marco a opo Use SQL Server Authentication para utilizar o usurio do BD para autenticar. Na caixa Connect to a database, selecione o banco com o qual ir trabalhar e clique em OK. Ao clicar em OK a conexo com a base ser realizada e a tela apresentada na Figura 5 ser exibida.

Codificando.net e-magazine
|

www.codificando.net

Out / Nov - 2010

25

Visual Studio LightSwitch bom, mas preciso entend-lo!

e-magazine

Figura 5 - Selecionando as informaes do BD Northwind que iremos trabalhar.

Note na Figura 5 que estamos selecionando apenas a opo Tables. No estamos interessados neste artigo em trabalhar com as Views. Aps selecionar Tables e nomear o Data Source, basta clicar em Finish. Se tudo correu bem, voc dever estar visualizando uma tela semelhante Figura 6.

Figura 7 - Solution Explorer aps a adio da base de dados.

Muito bem. J possumos todos os requisitos necessrios para construirmos nossos aplicativos no Visual Studio LightSwitch. Para exemplificarmos, vamos construir duas telas e execut-las. A primeira tela ser a de Insero de Produtos e a segunda ser a de Pesquisa de Produtos.

Codificando.net e-magazine

Figura 6 - Tela apresentada aps anexar o BD.

interessante observar tambm a Solution Explorer do projeto, a Solution Explorer deve estar parecida com a Figura 7.

Na Solution Explorer, d um duplo clique sobre a entidade Products. Na janela que se abre, no menu de atividades da janela, clique no boto com a opo Screen. Na janela que se abre, selecione a opo New Data Screen. Nomeie sua tela no campo Screen Name e em seguida, no campo abaixo Screen Data, selecione a entidade do banco de dados com a qual a tela se relacionar e enviar os dados. A Figura 8 apresenta este processo.

www.codificando.net

Out / Nov - 2010

26

Visual Studio LightSwitch bom, mas preciso entend-lo!

e-magazine

pressionando F5. Se tudo correu bem, voc dever estar visualizando uma tela semelhante Figura 9.

Figura 8 - Criando a tela de insero dos dados.

Os aspectos importantes da Figura 8 so: O que define se a tela ser de Insero, Busca, Grid Editvel, Lista de Valores, etc, a escolha do template. Ao selecionar o template, uma imagem ilustrativa do que ser construdo pelo LightSwitch apresentada a direita. A nomeao da tela para o sistema, para isso use o campo Screen Name. informar para o LightSwitch a entidade com a qual a tela se relacionar. No caso, como criaremos uma tela de insero de produtos, selecionamos a entidade Produtcts1.
Figura 9 - Tela de Insero de Produtos.

Eis que a mgia acontece. Uma tela de insero de produtos com aspecto profissional em Silverlight, uma aplicao com o conceito Out-Of-Browser gerada. E a pergunta aqui ? Quantas linhas de cdigo foram escritas para isso? Nenhuma, muito embora haja a possibilidade de personalizar os cdigos gerados pelo LightSwitch.

Codificando.net e-magazine

Ao clicar em OK uma nova janela se abre, com algumas opes estranhas primeira vista. O artigo do Mrcio explica como o LightSwitch gerencia a interface das telas. Para ns aqui, basta saber que a tela foi criada com sucesso com base na tabela de produtos. Para confirmar esta informao, compile sua aplicao

Um aspecto a ser notado na Figura 9 o de que os nomes dos campos esto em Ingls, ou seja, da forma como esto na base de dados. Voc pode estar se perguntando: No possvel customizar? Sim, possvel e extremamente fcil realizar esta tarefa. Assim como possvel adicionar novos campos, aes e comportamentos. Mas isso assunto para um artigo futuro. Vamos ento criao de uma tela de pesquisa de produtos. O procedimento rigorosamente o mesmo do apresentado na

www.codificando.net

Out / Nov - 2010

27

Visual Studio LightSwitch bom, mas preciso entend-lo!

e-magazine

figura 8, mas a diferena est na escolha do template. O template correto a ser escolhido aqui Search Data, conforme apresenta a figura 10.

para que o valor retornado seja apresentado no GridView. Concluso O que podemos concluir aps uma rpida utilizao do LightSwitch que, para aquilo que ele se prope a fazer (construir aplicativos de pequeno porte por profissionais que no tenham tanta experincia com o desenvolvimento de softwares de forma rpida) ele timo. Outro aspecto importante a ser notado e que, em minha opinio tende para o sucesso da ferramenta, o fato de o LightSwitch gerar deploy da aplicao tanto para Web quanto para ambientes Desktop. Evidentemente, o Visual Studio LightSwitch no veio para substituir ou sobrepor o mercado do Visual Studio tradicional. No h nem como falar nestes termos. Aplicaes escalveis e com nvel de complexidade mdio para cima no sero contempladas pelo LightSwitch. Fabrcio Sanchez
Possui graduao em Cincia da Computao pela UNORP - Centro Universitrio do Norte Paulista (2005). Obteve ttulo de mestre junto a USP (Universidade de So Paulo) no Programa Interunidades Bioengenharia campus So Carlos. Atualmente aluno de doutorado e pesquisador na mesma instituio e departamento. membro regular do SpeechLab (Laboratrio de Processamento de udio e Voz) localizado no Instituto de Fsica de So Carlos. Atua na rea de processamento digital de udio e voz, especialmente baseado em wavelets aplicadas insero e extrao de watermarks em sinais de udio e fala, anlise cepstral de sinais de fala e desenvolvimento de ferramentas computacionais aplicadas ao processamento digital de sinais. Atua como desenvolvedor web na Unio Central Brasileira da IASD com C# e ASP.NET desde 2007. fundador e administrador da comunidade .NET Interior.

Figura 10 - Criando a tela de Busca de Produtos.

Perfeito. Se tudo correu bem, ao compilar sua aplicao voc dever estar visualizando uma tela semelhante a Figura 11.

Codificando.net e-magazine

Figura 11 - Execuo da tela de Busca de Produtos.

O aspecto mais importante a se notar na Figura 11 o fato de, uma nova opo ser adicionada no menu esquerda. A opo BuscaProdutos. Ao clicar nesta opo, a tela de busca de produtos apresentada. Basta digitar um valor no campo de busca

www.codificando.net

Out / Nov - 2010

28

e-magazine

Entity Framework: Trabalhando com Model First


Por: talo Chesley

Neste artigo vamos falar sobre o Entity Framework 4, que foi lanado junto com o .NET FRAMEWORK 4 e, apesar de ser sua segunda verso, leva esse nome para acompanhar o framework. Essa verso do Entity contm recursos que a diferenciam de sua primeira verso, entre eles esto a possibilidade de se trabalhar com POCO(Plain Old CLR Objetc Bom e Velho Objeto da CLR), trabalhar apenas com cdigo (Code Only) no dependendo mais de um arquivo EDMX para fazer o mapeamento das entidades e, dentre outros, conta agora com Lazy Loading, (que abordaremos neste artigo). Teremos como Interface de Usurio o ASP.NET WebForms, mas no vou entrar em detalhes da interface porque no o foco do artigo. Iniciando ento nossa implementao, abra o Visual Studio 2010, v at o Menu File > New > Project e selecione a opo ASP.NET Web Application, como apresentado na figura 1. Feito isso, o Visual Studio criar um novo projeto com um template WebForms, e a sua Solution j dever ter em sua estrutura, Master Page, e etc., como voc pode visualizar na figura 2.

Figura 1 - Selecionando o tipo de projeto que ser utilizado.

Codificando.net e-magazine
|

Figura 2 - Template do Web Forms gerado pelo Visual Studio 2010.

Vamos criar agora o nosso arquivo EDMX para comearmos a trabalhar, efetivamente, com o Entity Framework. Para tanto, clique com o boto direito no Projeto, Add > New Item, e se abrir a tela
Out / Nov - 2010

www.codificando.net

29

Entity Framework: Trabalhando com Model First

e-magazine

semelhante da Figura 3, bastando selecionar Data e o ADO.NET Entity Framework Data Model.

Figura 3 - Optando pelo Entity Framework, para acesso aos dados.

Figura 4 - Configurando uma entidade.

Temos agora em nossa Solution, um arquivo na extenso edmx, com o qual criaremos o nosso Modelo Conceitual de forma bastante prtica e simples. Depois de selecion-lo e clicar em ADD, voc poder optar por Empty Model ou Generate from DataBase, respectivamente, criar um Modelo vazio, ou cri-lo a partir de um banco de dados. Como no temos nosso banco de dados, vamos optar pelo Empty Model e clicar em Finish. Clique duas vezes sobre o EDMX e ele se abrir. Clique com o boto direito no Modelo, v em ADD > Entity e se abrir uma janela semelhante da figura 4 para que voc opte por algumas caractersticas iniciais da sua entidade: Qual ser o nome da Classe criada (Entity Name), o nome da tabela no banco (Entity Set) e se deseja criar uma propriedade chave (Create key property) e o seu nome (Property Name) e tipo (Property Type).

Vamos trabalhar com um cadastro de Bandas e msicas dessas bandas, como exemplo. J temos a nossa entidade banda, com seu ID. Agora, clicando com o boto direito sobre a entidade, em ADD > Scalar Property, voc pode adicionar uma Propriedade e definir tamanho, tipo e vrias outras caractersticas atravs do Menu propriedades do lado direito, no Visual Studio. Com as entidades criadas temos o nosso modelo conceitual semelhante figura 5.

Codificando.net e-magazine
|

Figura 5 - Modelo conceitual sem associao.

www.codificando.net

Out / Nov - 2010

30

Entity Framework: Trabalhando com Model First

e-magazine

timo, mas como voc deve ter imaginado, falta algo: A ligao entre as duas entidades, para isso, utilizaremos Association onde poderemos optar por associaes 1 pra 1, 1 para N e N para N, de forma bastante simples, como vou demonstrar a seguir.Clicando sobre a Entidade msica, ADD -> Association, se abrir uma janela semelhante da figura 6 onde poderemos fazer configuraes, conforme nossa regra. Uma mesma Banda pode ter vrias msicas, logo, faremos a configurao desta forma, que bastante intuitiva.

Agora, clicando com o boto direito no Modelo Conceitual e selecionando a opo Generate DataBase from Model poderemos criar o Script do Banco de Dados e rod-lo criando o Banco de Dados com as mesmas associaes que fizemos no Modelo Conceitual, como podemos ver nas figura 8, 9 e 10, inclusive a string de conexo criada no nosso Web.config, sem que tenhamos que coloc-la manualmente.

Figura 8 - Gerando o banco de dados atravs do Entity Framework.

Codificando.net e-magazine

Figura 6 - Configurando uma associao.

Agora sim, temos o nosso modelo conceitual prontinho, com a associao, como podemos ver na figura 7.

Figura 7 - Modelo conceitual com a Associao.

Figura 9 - Executando script de criao do Banco de Dados a partir do Visual Studio 2010.

www.codificando.net

Out / Nov - 2010

31

Entity Framework: Trabalhando com Model First

e-magazine

Bandas objBandas = context.Banda.Where(p => p.ID == CodBanda).Single(); context.DeleteObject(objBandas); context.SaveChanges(); }


Figura 10 - Diagrama de Entidade de Relacionamento do Banco gerado pelo Entity.

Bom, agora j temos o nosso Projeto web criado, o modelo conceitual e o banco de dados, vamos a codificao. Criaremos duas pginas, a saber: Musicas.aspx e Bandas.aspx. O CRUD com o Entity Framework bastante simples, e se resume em alguns poucos mtodos, como podemos ver na Listagem 1.
private ModeloConceitualContainer context = new ModeloConceitualContainer(); public void Incluir(string NomeBanda) { Bandas objBanda = new Bandas() { NomeBanda = NomeBanda }; context.AddToBanda(objBanda); context.SaveChanges(); } public void Alterar(int CodBanda, string NomeBanda) { Bandas objBandas = context.Banda.Where(p => p.ID == CodBanda).Single(); objBandas.NomeBanda = NomeBanda; context.SaveChanges(); } public void Excluir(int CodBanda) {

public IQueryable<Bandas> RetornaTodasBandas() { return from l in context.Banda select l; } public Bandas RetornaUmaBanda(int CodBanda) { return context.Banda.Where(p => p.ID == CodBanda).SingleOrDefault(); }
Listagem 1 - Mtodos.

Primeiramente, instanciamos o contexto do Entity Framework, no nosso caso, denominado ModeloConceitualContainer. ele quem conhece todos os mapeamentos e implementa as classes referentes s entidades do banco, logo, ele quem vai ser relacionar com o banco diretamente.

Codificando.net e-magazine
|

Incluir: Neste mtodo, passamos como parmetro o nome da banda e na implementao, preenchemos a propriedade NomeBanda com o contedo passado no parmetro. Logo depois, atravs do mtodo AddToBanda passando o objeto anteriormente preenchido como parmetro, adicionamos este objeto ao contexto, e chamamos o mtodo Savechanges, que ser responsvel por fazer o commit destes dados no banco de dados. Alterar: Este mtodo recebe como parmetro o cdigo da banda que ser alterada e o nome que esta banda receber.

www.codificando.net

Out / Nov - 2010

32

Entity Framework: Trabalhando com Model First

e-magazine

Baseado nessas informaes, buscamos esse dado no contexto atravs de uma expresso lambda, passamos a alterao desejada e chamamos o mtodo SaveChanges. O contexto se encarregar de aplicar as alteraes no banco.Note que buscamos este dado no contexto, logo, ele j estava attachado no contexto, ou seja, era conhecido por ele. Se voc estiver tralhando com um objeto no attachado no contexto e quiser persisti-lo no banco de dados, ser necessrio fazer o attach no contexto. Excluir: Este mtodo responsvel por excluir um dado, logo, ele apenas recebe a chave primria da entidade que ir excluir. Na primeira linha do mtodo, buscamos este dado, depois invocamos o mtodo DeleteObject do contexto, passando-o como parmetro e em seguida o mtodo SaveChanges para dar o commit das alteraes no banco de dados. RetornaTodasBandas: Este mtodo tem como retorno uma coleo de todas as banda no banco de dados. O retorno padro de expresses LINQ IQueryable, neste mtodo estamos retornando o resultado da consulta, diretamente. RetornaUmaBanda: Este mtodo retorna um objeto do tipo banda, atravs do seu cdigo que passado como parmetro. Para a interao com a entidade Musicas, temos mtodos bastante semelhantes ao das Bandas, como voc pode conferir na Listagem 2.

public void Incluir(string NomeMusica, int CodBanda) { Musicas objMusica = new Musicas() { NomeMusica = NomeMusica, BandasID = CodBanda }; context.AddToMusica(objMusica); context.SaveChanges(); } public void Alterar(int CodMusica, string NomeMusica, int CodBanda) { Musicas objMusica = context.Musica.Where(p => p.ID == CodMusica).SingleOrDefault(); objMusica.NomeMusica = NomeMusica; objMusica.BandasID = CodBanda; context.SaveChanges(); } public void Excluir(int CodMusica) { Musicas objMusica = context.Musica.Where(p => p.ID == CodMusica).SingleOrDefault(); context.DeleteObject(objMusica); context.SaveChanges(); } public IQueryable RetornarTodasAsMusicas() { return from l in context.Musica select l; } public Musicas RetornarUmaMusica(int Codmusica) { return context.Musica.Where(p => p.ID == Codmusica).SingleOrDefault(); }

Codificando.net e-magazine

Listagem 2 - Mtodos.

www.codificando.net

Out / Nov - 2010

33

Entity Framework: Trabalhando com Model First

e-magazine

Pode-se ver nas figuras 11, 12, 13 e 14 algumas pginas utilizando o acesso a dados como Entity Framework.

Figura 14 - Msica depois de cadastrada e buscada pelo Entity Framework.

Concluso
Figura 11 - Cadastrando uma Banda.

Tivemos a oportunidade de entender como simples o trabalho com persistncia e recuperao de informaes de um banco de dados relacional utilizando o Entity Framework. No prximo artigo falaremos sobre POCO (Plain Old CLR Objects) utilizando Entity Framework, que foi um dos recursos mais esperados nesta verso do Entity Framework.

Codificando.net e-magazine

Um forte abrao e at a prxima.


Figura 12 - Banda cadastrada e buscada do banco de dados, com o Entity Framework.

talo Chesley
Graduando em Anlise e Desenvolvimento de Sistemas, pela Universidade Vale do Rio Doce. J integrou equipes de suporte de sistemas em Delphi. Atualmente trabalha com Desenvolvimento de Sistemas em ASP.NET, Windows Forms e WPF e compe a equipe de desenvolvimento da UNIVALE. Mantm o blog: http://italochesleytech.wordpress.com. Participa ativamente de Comunidades de Desenvolvimento.

Figura 13 - Cadastrando uma msica.

www.codificando.net

Out / Nov - 2010

34

e-magazine

SQL Server Integration Services (SSIS)

Por: Everton Jos Benedicto

SQL Server Integration Services (SSIS) uma ferramenta que usamos para executar operaes de ETL, ou seja, extrao, transformao e carga de dados. Embora o processamento ETL seja comum em Data Warehouse (DW), o SSIS no de forma limitada a apenas DW, por exemplo, quando voc cria um plano de manuteno usando SQL Server Management Studio (SSMS) um pacote SSIS criado. Em um nvel alto, o SSIS fornece a capacidade para: Recuperar dados a partir praticamente qualquer fonte. de

(DTS), que estava disponvel com o SQL Server 7.0 e SQL Server 2000. SSIS baseia-se nas capacidades introduzidas com DTS. Neste artigo, vamos passar por uma srie de temas que voc precisa entender para ter sucesso em construir um pacote SSIS. Nosso esquema de alto nvel a seguinte: Criar pacotes SSIS no SQL Server Management Studio (SSMS) Implantando pacotes SSIS Execuo de pacotes SSIS

Codificando.net e-magazine

Realizar vrias transformaes nos dados, por exemplo, converter um tipo para outro, converter para maisculas ou minsculas, executar clculos, etc. Carregar dados praticamente em qualquer fonte.

Criao de pacotes do SSIS no SQL Server Management Studio (SSMS - Pacotes bsicos) SQL Server Management Studio (SSMS), contm um Assistente de Importar e Exportar (Import e Export Wizard) as tarefas que voc pode usar para copiar dados de uma fonte de dados para outro. Voc pode escolher entre uma variedade de fontes e tipos de fonte de dados de destino, selecione as tabelas para copiar ou especificar sua prpria

Definir um workflow.

A primeira verso do SSIS foi lanada com o SQL Server 2005. SSIS uma substituio para o Data Transformation Services

www.codificando.net

Out / Nov - 2010

35

SQL Server Integration Services (SSIS)

e-magazine

consulta para extrair dados e salvar seu trabalho como um pacote SSIS. Usando o Assistente de Importao e Exportao um bom ponto de partida para a aprendizagem sobre os pacotes do SSIS. Voc pode executar o pacote SSIS como gerado, agend-lo para ser executado em um momento posterior, ou fazer as alteraes necessrias para atender s suas necessidades. Maneira simples de exportar dados do SQL Server (Assistente de Exportao) SQL Server Management Studio (SSMS) fornece a tarefa Export Wizard, que pode ser usado para copiar dados de uma fonte de dados para outro. Voc pode escolher entre uma variedade de fontes e tipos de fonte de dados de destino, selecionando as tabelas para copiar ou especificar sua prpria consulta para extrair dados e salvar seu trabalho como um pacote SSIS. Nesta seo, vamos percorrer o Assistente de Exportao e exportar dados de um banco de dados SQL Server para uma planilha do Excel. Para comear SSMS execute-o clicando no SQL Server Management Studio em Iniciar\Todos os Programas\Microsoft SQL Server. Ao abrir o SSMS voc ter que se conectar no banco, conecte com o Database Engine. No exemplo, eu uso o banco de Dados AdventureWorks que voc pode baixar no site http://sqlserversamples.codeplex.com/ releases/view/4000. Localize o banco de dados AdventureWorks no SSMS Object Explorer, se o Object Explorer no visvel, clique no

menu Exibir, em seguida, clique em

Ob-

Figura 1 - Conectando-se ao banco de dados AdventureWorks.

ject Explorer conforme figura 1. Aps feita a conexo com o banco de dados AdventureWorks, clicar com o boto direito do mouse no banco de dados AdventureWorks no Object Explorer, selecione Tarefas (Tasks), em seguida, exportar dados (Export Data...) a partir do menu de contexto para iniciar o Assistente de Exportao. Clique em Avanar na janela de Bem-Vindo que se abrir. Vamos percorrer o assistente passo-a-passo. Na caixa de dilogo Data Source, voc especifica a fonte de seus dados. Uma vez que estamos executando o assistente de exportao, os campos da caixa de dilogo so exibidos com os valores j preenchidos, conforme mostrado abaixo (com base no banco de dados que estamos utilizando para iniciar o assistente de Exportao) conforme figura 2.

Codificando.net e-magazine
|

www.codificando.net

Out / Nov - 2010

36

SQL Server Integration Services (SSIS)

e-magazine

Clique em Avanar (Next) para ir para a caixa de dilogo que especifica a tabela ou uma query para os dados. Nesta caixa de dilogo, permite que voc escolha se deseja exportar dados selecionando tabelas e/ou exibies da fonte de dados ou especificar uma consulta para extrair dados. Selecione Copiar dados de uma ou mais tabelas ou exibies (Copy data from one or more tables or views) como mostrado na figura 4.

Figura 2 - Caixa de dilogo Data Source.

Clique em Avanar (Next) para escolher o destino dos dados. Na tela de dilogo de Destino, voc especifica o destino da fonte de dados. H muito poucas opes disponveis para os destinos, a introduo adicional varia de acordo com a fonte de dados de destino escolhido. Para o nosso exemplo vamos exportar os dados para o Excel, em seguida, usar essa planilha Excel como a fonte da manifestao do assistente de importao mais para frente. Preencha a caixa de dilogo conforme figura 3.

Figura 4 - Assistente (Wizard) de Importao e

Clique em Avanar (Next) para ir para a caixa de dialogo que voc selecionar as tabelas ou Exibies (Views). Na caixa de dilogo permite que voc selecione as tabelas e exibies (Views) que voc deseja exportar. Para a nossa demonstrao vamos selecionar a tabela Person.ContactType conforme demonstrado na figura 5.

Codificando.net e-magazine

Figura 3 - Tela de dilogo de destino dos dados.

Figura 5 - Tela do assistente (Wizard) para selecionar tabelas e vises que sero Exportadas.

www.codificando.net

Out / Nov - 2010

37

SQL Server Integration Services (SSIS)

e-magazine

Voc pode clicar no boto Preview para visualizar as primeiras 100 linhas de dados na fonte de dados como mostrado na figura 6.

aparecer outra caixa de dilogo clique em OK (figura 8).

Figura 8 - Caixa de dilogo para nvel de proteo do pacote.

Figura 6 - Tela de Preview dos dados.

Clique em OK e depois em Avanar (Next) para continuar o processo. Na caixa de dilogo, oferece opes para executar a operao de exportao e criar um pacote SSIS e guard-lo para o SQL Server ou o sistema de arquivos como mostrado na figura 7.

Se voc optar por salvar a sua operao de exportao como um pacote SSIS no dilogo anterior. Preencha a caixa de dilogo como mostrado na figura 9.

Codificando.net e-magazine

Figura 9 - Caixa de dilogo aberta aps selecionar a opo para salvar o pacote SSIS.

Clique em avanar para ir para a caixa de dilogo de finalizao do assistente (figura 10).
Figura 7 - Caixa de dilogo para salvar o pacote SSIS.

Para os nossos propsitos, vamos salvar o pacote SSIS para que possamos v-lo posteriormente neste artigo. Clique em Avanar para prosseguir para a caixa de dilogo Salvar Pacote SSIS, antes disso
Figura 10 - Tela de concluso do Assistente.

www.codificando.net

Out / Nov - 2010

38

SQL Server Integration Services (SSIS)

e-magazine

Clique em Concluir (Finish) para executar o pacote SSIS. Voc pode abrir a planilha do Excel e visualizar a tabela que foi exportado. Uma parte da planilha do Excel mostrada na figura 11.

Figura 12 - Conectando-se ao banco de dados AdventureWorks.

Figura 11 - Planilha com os dados exportados.

Boto direito do mouse no banco de dados Teste no Object Explorer, selecione Tarefas (Tasks) e, em seguida importar dados (Import Data...) a partir do menu de contexto para iniciar o Assistente de Importao. Clique em Avanar para avanar alm do dilogo Bem-vindo (se indicado). Na caixa de dilogo voc especifica a fonte de seus dados. Preencha a caixa de dilogo como mostrado abaixo para especificar uma planilha Excel como a fonte de dados na figura 13.

Maneira simples para importar dados no SQL Server (Assistente de Importao) SQL Server Management Studio (SSMS), prev a importao tarefa Wizard, que pode ser usado para copiar dados de uma fonte de dados para outro. Voc pode escolher entre uma variedade de fontes e tipos de fonte de dados de destino, selecione as tabelas para copiar ou especificar sua prpria consulta para extrair dados e salvar seu trabalho como um pacote SSIS. Iremos percorrer o Assistente de Importao e importar dados de uma planilha do Excel em uma tabela em um banco de dados SQL Server. Localize o banco de dados Teste no SSMS Object Explorer (criar o banco de dados se necessrio) veja na figura 12.

Codificando.net e-magazine
|

Figura 13 - Assistente (Wizard) para Importar dados.

Clique em avanar (Next) para ir para a caixa de dilogo de Destino. Na caixa de www.codificando.net
Out / Nov - 2010

39

SQL Server Integration Services (SSIS)

e-magazine

dilogo de Destino voc especifica o destino da fonte de dados para os dados que voc est importando. Uma vez que estamos executando o assistente de importao, a janela ser exibida com os valores j preenchidos, conforme mostrado abaixo (com base no banco de dados que voc clicou com o boto direito do mouse para iniciar o assistente de importao) veja na figura 14.

Figura 15 - Tela do Assistente (Wizard) para selecionar tabelas ou query's que sero copiadas.

Clique em Avanar (Next) para ir para a caixa de dilogo de seleo de tabelas ou exibies (Views). Selecionar origem e Exibies (Views) que voc deseja importar. Para a nossa demonstrao vamos selecionar a tabela ContactType conforme demonstrado na figura 16.

Figura 14 - Tela do Assistente (Wizard) para selecionar o destino dos dados.

Codificando.net e-magazine

Clique em avanar (Next) para ir para a tela de especificao de tabela ou consultas. Na caixa de dilogo voc escolha se deseja importar dados, selecionando tabelas e / ou exibies (Views) da fonte de dados ou especificar uma consulta para extrair dados. Selecione Copiar dados de uma ou mais tabelas ou exibies (Copy data from one or more tables or views) como mostrado na figura 15.

Figura 16 - Tela do assistente (Wizard) para selecionar tabelas e vises que sero Importadas.

Voc pode clicar no boto Preview para visualizar as primeiras 100 linhas de dados na fonte de dados como mostrado na figura 17.

www.codificando.net

Out / Nov - 2010

40

SQL Server Integration Services (SSIS)

e-magazine

Na Caixa de Dialogo Preencha a caixa de dilogo como mostrado na figura 20.

Figura 17: Tela de Preview dos dados.

Clique em OK e depois em Avanar (Next) para ir para a tela de Salvar e Executar Pacote. Na Caixa de dilogo oferece opes para executar a operao de importao e criar um pacote SSIS e guard-lo para o SQL Server ou o sistema de arquivos como mostrado na figura 18.

Figura 20 - Tela de Finalizao do Assistente (Wizard) de Importao.

Clique em Avanar (Next) para concluirmos o assistente. Clique em Concluir para executar o pacote SSIS. Voc pode abrir a tabela importada no SSMS e visualiz-lo. Todos os registros da tabela so mostrados na figura 21.

Codificando.net e-magazine

Figura 18 - Caixa de dilogo para salvar o pacote SSIS.

Clique em avanar (Next) e em seguida em OK na tela da figura 19.


Figura 21 - Tela de conexo com o banco de dados, mostrando que a importao foi realizada com sucesso.

Figura 19 - Caixa de dilogo para nvel de proteo do pacote.

www.codificando.net

Out / Nov - 2010

41

SQL Server Integration Services (SSIS)

e-magazine

Everton Jos Benedicto Possui conhecimentos em SQL Server 2000 e 2005, Oracle 11g,C, C++, C#, Java, FastReport e Reporting Services. Trabalha como DBA Junior e com desenvolvimento de aplicaes em C#.

Codificando.net e-magazine
|

www.codificando.net

Out / Nov - 2010

42

e-magazine

O novo Visual Studio LightSwitch


Por: Alliston Carlos

Todo bom desenvolvedor .Net sabe usar com maestria a ferramenta de todo dia, o Visual Studio. Todos concordam que esta uma IDE poderosa, que nos economiza vrias horas em um projeto crtico, e que a ferramenta no nos deixa na mo. Sabe-se tambm, que existem vrias verses do Visual Studio, tais como Professional, Ultimate e Express, cada uma se adequando s necessidades de um profissional, empresa ou equipe de desenvolvimento. Criada recentemente, uma nova edio do Visual Studio est chamando a ateno pela sua simplicidade na criao de aplicaes. Esta edio o LightSwitch, lanada dia 19 de agosto de 2010 para assinantes MSDN, e para o pblico em geral no dia 23 de agosto. Esta verso difere das outras por focar mais na produtividade do que no cdigo propriamente dito. As aplicaes criadas so baseadas em Silverlight, o que permite escrevermos aplicaes para web, desktop e nuvem. Permite aos desenvolvedores criarem aplicaes leves, que no tm muito para onde crescerem. Lgico que o criador deve avaliar se compensa utilizar o LightSwitch ou no. Vejamos ento como criar uma aplicao bsica com ele.

Primeiramente, quem possui o Visual Studio j instalado, contar com novos templates de projetos, ao instalar as ferramentas para o LightSwitch, permitindo o desenvolvimento tanto em C# quanto em VB.Net, ambos rodando sob o .Net Framework 4.0. Vamos ento criar uma aplicao chamada LightSwitchTest, conforme Figura1.

Codificando.net e-magazine
|

Figura 1 - Nova aplicao LightSwitch (VB.Net ou C#).

Criando a aplicao LightSwitchTest, o Visual Studio j abre um servidor de aplicao (LightSwitch Web Server Port xxxx), ao invs de abrir somente no incio do debug. Temos tambm a abertura de uma pgina chamada LightSwitchTest Designer, onde por default, temos duas opes: Create new table e Attach to ex-

www.codificando.net

Out / Nov - 2010

43

O novo Visual Studio LightSwitch

e-magazine

ternal database, como visualizar na Figura 2.

podemos

Basicamente, a tabela Usuario est criada. Podemos aplicar propriedades sobre cada coluna recm-criada, como tamanho do campo e validaes customizadas. Na barra acima da tabela, temos algumas opes de adio, dentre elas a opo Screen, onde adicionaremos uma tela de cadastro do nosso Usurio. E claro, no s cadastro, mas tambm de listagem com pesquisa, detalhes, grid editvel e lista com detalhes. Selecionando uma New Data Screen, conforme mostra a Figura 4, poderemos referenciar a tabela Usuario com a tela a ser criada, chamaremos esta tela de NovoUsuario.

Outra coisa diferente, a Solution Explorer, que no possui nenhum arquivo .cs, .aspx, ou .xaml. Est somente com a estrutura padro.

Figura 2 - Projeto LightSwitch iniciado.

Clicando em Create new table, teremos um designer de entidade, aonde j vir inserida a coluna Id do tipo Int32. Podemos adicionar quantos campos quisermos, assim como no SQL Management Studio. Criaremos um cadastro de usurio, somente com trs campos, o Id j existente, Nome e Email. Fiquem atentos aos tipos que podemos escolher (figura 3).

Codificando.net e-magazine

Figura 4 - NovoUsuario para adio de itens na tabela Usuario.

Agora vem a parte boa! Sem editar mais nada, vamos executar o projeto, com um simples F5 (somente lembrando, necessrio que o servio do SQL Server esteja rodando). Isto nos mostrar finalmente a tela de cadastro de um novo usurio, sem customizao alguma. Alguns de vocs j devem conhecer o cone que apareceu no debug da aplicao. Ele indica que uma aplicao Silverlight rodando fora do browser (Out-Of-Browser) veja na figura 5.

Figura 3 - Tabela usurio.

www.codificando.net

Out / Nov - 2010

44

O novo Visual Studio LightSwitch

e-magazine

podemos encontrar este mesmo registro que foi armazenado apenas clicando em SearchUsuario. Esta tela de listagem vale alguns comentrios:

Figura 5 - Novo usurio aplicao rodando.

Para criarmos a tela de listagem, desta vez faremos por meio da Solution Explorer: clicando com o boto direito sobre Screens Add Screen, mas neste caso, selecionaremos o template Search Data Screen, onde Screen Data apontar para a tabela Usuarios, e o nome da tela (Screen Name) passando para SearchUsuario, conforme indicado na Figura 6.

Figura 7 - Listagem de Usurios.

Dando uma olhada rpida, ela j traz um campo de pesquisa, que far suas operaes em todos os campos da tabela. Por exemplo, se pesquisarmos com base no exemplo acima, a palavra hotmail, s teremos listados os registros de nome Fulano e Z. Mas se procurarmos por Z, somente ser retornado o registro de nome Z. Vale notar tambm a barra embaixo do Grid, que permite que a paginao ocorra de forma automtica, alm de contarmos com um boto no topo onde h o texto Export to Excel, e faz exatamente o que prope: exporta dados para o Excel sem precisar de nenhuma interveno do usurio alm do clique no boto conforme figura 8.

Codificando.net e-magazine

Figura 6 - SearchUsuario.

Inserindo um registro em NovoUsuario,

www.codificando.net

Out / Nov - 2010

45

O novo Visual Studio LightSwitch

e-magazine

Alliston Carlos Desenvolvedor .Net Web e Windows, focado em tecnologias de User Experience aprimorado, como Silverlight e WPF. bacharel em Sistemas de Informao. J ministrou treinamento na turma de 2008/2 do Students 2 Business, e atualmente instrutor pela Pensou.Net. Estudando .Net Framework a mais de 3 anos, possui quatro certificaes, MCP, MCTS WindowsForms e MCTS WPF 3.5, e MCTS Web 3.5. Faz parte ativamente do grupo de usurios DevGois.Net, atualmente trabalhando em uma das maiores empresas de TI do estado de Gois.

Figura 8 - Dados exportados para o Excel.

Infelizmente no posso cobrir todo o Lightswitch neste artigo, pois so vrios pequenos detalhes que tornam o desenvolvimento com esta ferramenta ainda mais fcil. Mas espero que tenha conseguido mostrar um pouco do poder de construo de aplicaes bsicas que o Visual Studio agora contm, e fazer com que os leitores se interessem por aprender mais sobre esta nova funcionalidade.

Codificando.net e-magazine
|

www.codificando.net

Out / Nov - 2010

46

e-magazine

Gerando Grficos com Silverlight,

WCF e LINQ

Por: Antonio Lucas Finotti Pereira

Descritivo do Cdigo: Desenvolvendo uma aplicao utilizando SILVERLIGHT, WCF, LINQ e Silverlight 3 ToolKit (http://silverlight.codeplex.com/releases/ view/36060). O propsito deste artigo desenvolver um grfico simples para exemplificar a utilizao das tecnologias: SIlverlight, WCF e LINQ. Tecnologias envolvidas: Microsoft Visual Studio 2010 C# .Net, Silverlight, WCF, SQL Server e LINQ. Iniciaremos um novo projeto, com o nome de SilverlightWcf (figura 1).

o C#, framework 4.0 e a aplicao Silverlight Application (figura 2).

Figura 2 Definindo um nome para o novo projeto.

A figura 3 d a opo para utilizar uma pagina para testar a aplicao Silverlight, onde o Visual Studio cria duas paginas (.html e .aspx) que contem os cdigos necessrios para executar a aplicao Silverlight, caso seja necessrio utilizar essa aplicao em algum site, pode-se utilizar essas paginas como exemplo. Neste caso, apenas clique em OK.

Codificando.net e-magazine

Figura 1 Criando um novo projeto.

Aps selecionar um novo projeto, necessrio selecionar qual o tipo de aplicao que ser desenvolvida, tambm podemos selecionar qual linguagem e framework ser utilizado, neste caso ser

Figura 3 Definindo a verso e novo da aplicao Silverlight.

www.codificando.net

Out / Nov - 2010

47

Gerando Grficos com Silverlight, WCF e LINQ

e-magazine

A figura 4 mostra um exemplo de como ficar janela de desenvolvimento do Visual Studio. Note no Solution Explorer que o Visual Studio criou duas aplicaes, sendo uma para Silverlight e a outra uma aplicao Web com a classe javascript necessria para rodar o silverlight.

Figura 4 - Ambiente de Desenvolvimento do Visual Studio.

Figura 6 Definindo o nome do banco de dados.

Agora necessrio criar o banco de dados. Para isso selecione a janela Server Explorer, clique no cone ou o boto direito do mouse em Data Connections e selecione Add Connection... (figura 5)

Server Name: Nome do Servidor. Apenas clique na seta do combobox que ele mostrar as instancias do SQL Server que esto instaladas na maquina.

Codificando.net e-magazine

Log on to the server: Selecione a opo User a Windows Authentication. Connect to a database: Nome do banco de dados que ser utilizado. Selecione a opo Select or enter a database name. Voc poder utilizar um banco de dados que j est criado ou informar o nome de um novo banco de dados, ele faz a criao do mesmo automaticamente, mas antes ele exibir uma janela fazendo est pergunta. Aps seguir estes passos o banco de dados ser inserido na janela do Server Explorer, a

Figura 5 Adicionando uma nova conexo com o SQL Server.

Ser exibida uma janela solicitando as informaes (figura 6).

www.codificando.net

Out / Nov - 2010

48

Gerando Grficos com Silverlight, WCF e LINQ

e-magazine

figura 7 mostra um exemplo de como ficaria esta janela.

O Visual Studio exibir uma tela para informar o nome do campo e o tipo, aps informar os dados voc dever salva-los, em seguida clicar em salvar o Visual Studio exibir uma janela solicitando o nome da tabela (figura 9).

Figura 7 Conexo j efetuada com o banco de dados.

Agora necessrio criar a tabela (Dados) e Incluir trs campos (MS, DEBITO e CRDITO). A tabela 1 mostra a estrutura completa da tabela.
CAMPO MS CREDITO DEBITO TIPO VARCHAR(15) DECIMAL(18,0) DECIMAL(18,0)
Figura 9 Definindo o nome da nova tabela.

Tabela 1 Estrutura da tabela.

Para criar a tabela, primeiro necessrio expandir as opes do banco de dados que utilizado (ExemploWcf), depois clicar o boto direito do mouse na pasta TABLES e clicar em Add New Table (figura 8).

Depois de criar a tabela, necessrio inserir algumas informaes para isso, expanda as opes do banco de dados, expanda a pasta Tables, clique o boto direito do mouse na tabela criada (Dados) e selecione a opo Show Table Data conforme figura 10.

Codificando.net e-magazine

Figura 8 Criando uma nova tabela no banco de dados.

Figura 10 Exibindo os dados da tabela.

www.codificando.net

Out / Nov - 2010

49

Gerando Grficos com Silverlight, WCF e LINQ

e-magazine

A Figura 11 mostra a janela exibida pelo Visual Studio, os dados devem ser preenchidos manualmente, pois, todas as clulas so editveis.

Silverlight-enabled Wcf Service. Coloque o nome de WcfExemplo.svc e clique em Add (figura 13).

Figura 11 Visualizando/Incluindo dados na tabela.

Agora necessrio implementar o servio que vai retornar os dados para o grfico. Selecione a janela Solution Explorer, clique com o boto direito do mouse no projeto SilverlightWcf.Web, selecione a opo Add e clique em New Item... conforme figura 12.

Figura 13 Selecionando um Template WCF na aplicao.

O Cdigo da listagem 1 mostra o contedo do arquivo WcfExemplo.svc que foi includo no projeto.
using System; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.ServiceModel.Activation;

Codificando.net e-magazine

Figura 12 Incluindo um novo item no projeto.

Na janela Add New Item, selecione os Templates do Silverlight e escolha a opo

namespace SilverlightWcf.Web { [ServiceContract(Namespace = "")] [AspNetCompatibilityRequirements (RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class WcfExemplo { [OperationContract] public void DoWork() { // Add your operation implementation here return; }

www.codificando.net

Out / Nov - 2010

50

Gerando Grficos com Silverlight, WCF e LINQ

e-magazine

// Add more operations here and mark them with [OperationContract] } }


Listagem 1 Contedo do arquivo WcfExemplo.svc.

Note que o Mtodo DoWork() est com o atributo [OperationContract], isso significa que esse mtodo poder ser invocado pelo WCF, voc pode ter vrios mtodos mas somente os que esto com o [OperationContract] sero invocados. Agora ser utilizado o LINQ to SQL para trabalhar com as informaes do banco de dados, para isso adicione um novo item no projeto: Add New Item, selecione os Templates do Data e escolha opo LINQ to SQL Classes. Coloque o nome de BancoDados.dbml e clicar em Add (figura 14).

automaticamente, caso no seja s clicar duas vezes no mesmo que se encontra na janela Solution Explorer. Agora mapeie a tabela do banco de dados, para isso acesse janela Server Explorer clique na tabela Dados e arraste para o contedo do arquivo BancoDados.dbml, com isso o Visual Studio j faz o mapeamento mostrando os campos da tabela com seus tipos de dados conforme figura 15.

Figura 15 Definindo com qual tabela ser utilizado o LINQ.

Agora volte para o arquivo WcfExemplo.svc e codifique o mtodo que retornara os dados para o grfico. Crie uma classe com o nome Dados e crie as propriedades do mesmo jeito que esto na tabela do banco de dados, a classe poder ser criada no prprio arquivo. No Inicio da classe, onde se informa as namespaces que so utilizadas, vamos incluir System.Collections.Generic, para utilizar o List<> e a System.Data.Linq para utilizar o Linq para acessar os dados. O cdigo da listagem 2 mostra como o arquivo WcfExemplo.svc dever ficar.

Codificando.net e-magazine

Figura 14 - Selecionando um Template LINQ to SQL Classes no projeto.

Depois de incluir este novo item, o arquivo BancoDados.dbml j aberto

www.codificando.net

Out / Nov - 2010

51

Gerando Grficos com Silverlight, WCF e LINQ

e-magazine

using System; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.ServiceModel.Activation; using System.Collections.Generic; using System.Data.Linq; namespace SilverlightWcf.Web { [ServiceContract(Namespace = "")] [AspNetCompatibilityRequirements (RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] public class WcfExemplo { [OperationContract] public void DoWork() { // Add your operation implementation here return; } } public class Dados { public string Mes { get; set; } public decimal Credito { get; set; } public decimal Debito { get; set; } } }
Listagem 2 Arquivo WcfExemplo.svc codificado com a classe Dados.

[OperationContract] public List<Dados> RetornaDados() { List<Dados> dados = new List<Dados>(); using (BancoDadosDataContext ctx = new BancoDadosDataContext()) { var obj_dados = from d in ctx.Dados select d; foreach (var item in obj_dados) { Dados dado = new Dados(); dado.Mes = item.Mes; dado.Credito = item.Credito.Value; dado.Debito = item.Debito.Value; dados.Add(dado); } } return dados; }
Listagem 3 Implementao do Mtodo RetornaDa-

Depois disso crie o mtodo RetornaDados() que vai retornar um List<> com a dados da classe Dados. O mtodo vai acessar a tabela Dados, depois fazer um foreach para varrer todas as linhas retornadas, alimentar os dados da classe Dados e depois incluir esses dados em uma lista da classe Dados (listagem 3).

Agora que o mtodo est codificado necessrio testar o mesmo. Primeiro verifique se o projeto SilverlightWcf.Web est setado para ser o primeiro a ser executado quando pressionada a tecla F5, sabemos disso se o projeto estiver em negrito, caso no esteja, clique o boto direito do mouse no mesmo e selecione a opo Set as StartUp Project, faz-se a mesma coisa para o arquivo WcfExemplo.svc. Para testar o servio pressione F5, se a janela do Internet Explorer for aberta, copie o link que esta sendo carregado, no meu caso o link : http://localhost:22269/WcfExemplo.svc. Veja figura 16.

Codificando.net e-magazine
|

www.codificando.net

Out / Nov - 2010

52

Gerando Grficos com Silverlight, WCF e LINQ

e-magazine

Aps clicar em Add Service, cole o link no nico campo da janela e clique em Ok conforme figura 18.

Figura 18 Adicionando o caminho do Servio WCF.

Depois de colocar o link e clicar em ok, deve-se clicar duas vezes no mtodo que ser testado e clicar no boto Invoke, note que o servio retornar os dados que esto gravados na tabela (figura 19).
Figura 16 Testando um servio WCF.

Depois de copiar o link execute o programa Wcf Test Cliente, voc pode encontr-lo na pasta: C:\Program Files\Microsoft Visual Studio 10.0 \Common7\IDE\ WcfTestClient.exe. Depois de carregado clique no menu File e em seguida clique em Add Service conforme figura 17.

Codificando.net e-magazine

Figura 19 Invocando Servio WCF e visualizando o resultado.

Agora acesse o arquivo MainPage.xaml que est no projeto SilverlightWcf para montar o grfico. Primeiro procure a ferramenta Chart na toolbox, quando encontr-la clique e arraste para dentro da janela de design, conforme figura 20.

Figura 17 Testando servio WCF com o WCF Test Client.

www.codificando.net

Out / Nov - 2010

53

Gerando Grficos com Silverlight, WCF e LINQ

e-magazine

Figura 20 Utilizando a ferramenta para criao de grficos.

Agora acesse a pgina de cdigo XAML, a listagem do cdigo 4 mostra o contedo do arquivo.

<UserControl x:Class="SilverlightWcf.MainPage" xmlns="http://schemas.microsoft.com/ winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/ winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/ expression/blend/2008" xmlns:mc="http:// schemas.openxmlformats.org/markupcompatibility/2006" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400" xmlns:chartingToolkit="clrnamespace:System.Windows.Controls.DataVisualiz ation.Charting;assembly=System.Windows.Co ntrols.DataVisualization.Toolkit"> <chartingToolkit:Chart Name="chart1" /> </UserControl>
Listagem 4 Contedo do arquivo MainPage.xaml.

<chartingToolkit:Chart Name="Grafico" > <chartingToolkit:BarSeries Title="Credito" DependentValueBinding = "{Binding Credito}" IndependentValueBinding = "{Binding Mes}" IsSelectionEnabled="True" AnimationSequence="FirstToLast" ItemsSource="{Binding}" / > <chartingToolkit:BarSeries Title="Debito" DependentValueBinding = "{Binding Debito}" IndependentValueBinding = "{Binding Mes}" IsSelectionEnabled="True" AnimationSequence="FirstToLast" ItemsSource="{Binding}" / > </chartingToolkit:Chart>
Listagem 5 Modificao na tag <chartingToolkit:Chart Name="chart1" />

Notem que estamos utilizando o tipo de grfico BarSeries, um para o Credito e o outro para Dbito, em ambos temos que informar as propriedades DependentValueBinding (Campo Valor), IndependentValueBinding(Campo Texto) e ItemsSource(Fonte de dados), as outras propriedades so para colocar alguns efeitos no grfico. Agora acesse o servio que foi criado no outro projeto, acesse a janela Solution Explorer, clique o boto direito do mouse no projeto SilverlightWcf e selecione a opo Add Service Reference. Ser exibida uma janela para informar o caminho do servio que ser utilizado e colocar o nome (wcfDados) no campo namespace. Como o servio criado

Codificando.net e-magazine

necessrio fazer algumas modificaes no cdigo, a tag <chartingToolkit:Chart Name="chart1" /> dever ficar igual o cdigo
da listagem 5.

www.codificando.net

Out / Nov - 2010

54

Gerando Grficos com Silverlight, WCF e LINQ

e-magazine

est na mesma soluo, clique no boto Discover. Note que os servios que esto na mesma soluo sero exibidos na janela, aps selecionar o servio desejado clique em OK (figura 21).

void AtualizaGrafico() { wcfDados.RetornaDadosCompleted += new EventHandler<SilverlightWcf.wcfDados.Retorna DadosCompletedEventArgs> (wcfDados_BuscaSaldosCompleted); wcfDados.RetornaDadosAsync(); } void wcfDados_BuscaSaldosCompleted(object sender, SilverlightWcf.wcfDados.RetornaDadosCompletedEve ntArgs e) { GraficoDados.DataContext = e.Result; }
Listagem 6 Implementao da chamada do servio WCF.

O Cdigo da listagem 7 mostra toda a implementao da chamada do servio.


Figura 21 Adicionando Servio WCF na aplicao.

Agora acesse o CodeBehind do arquivo MainPage.xaml Na Janela Solution Explorer, clique o boto direito do mouse encima do arquivo e escolha a opo View Code, para acessar os servios que foram adicionados no projeto. A listagem 6 mostra o cdigo necessrio para acessar o wcf, primeiro necessrio instanciar o servio depois criar dois mtodos, um para chamar o servio e o outro para retornar os dados quando a chamada for completada.
private SilverlightWcf.wcfDados.WcfExemploClient wcfDados = new SilverlightWcf.wcfDados.WcfExemploClient();

using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; namespace SilverlightWcf { public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); } private SilverlightWcf.wcfDados.WcfExemploClient wcfDa-

Codificando.net e-magazine
|

www.codificando.net

Out / Nov - 2010

55

Gerando Grficos com Silverlight, WCF e LINQ

e-magazine

dos = new SilverlightWcf.wcfDados.WcfExemploClient(); void AtualizaGrafico() { wcfDados.RetornaDadosCompleted += new EventHandler<SilverlightWcf.wcfDados.RetornaDados CompletedEventArgs> (wcfDados_BuscaSaldosCompleted); wcfDados.RetornaDadosAsync(); } void wcfDados_BuscaSaldosCompleted (object sender, SilverlightWcf.wcfDados.RetornaDadosCompletedE ventArgs e) { GraficoDados.DataContext = e.Result; } } }
Listagem 7 Contedo do Codebehind da Classe MainPage.

outra opo para que o prprio Visual Studio Crie o mtodo, apenas clique duas vezes na opo <New Event Handler> (figura 23).

Figura 23 Criando o mtodo Loaded no codebehind da pgina.

Agora volte para o CodeBehind (MainPage.xaml.cs) do arquivo MainPage.xaml, e note que um novo mtodo foi criado na pagina de cdigos (GraficoDados_Loaded(object sender, RoutedEventArgs e)). Agora dentro desse novo mtodo chame o mtodo que Busca os dados e exibe no grfico (AtualizaGrafico()) veja na listagem 8.
private void GraficoDados_Loaded(object sender, RoutedEventArgs e) { AtualizaGrafico(); }
Listagem 8 Mtodo AtualizaGrfico() sendo chamado ao carregar a aplicao.

Acesse o arquivo MainPage.xaml do projeto SilverlightWcf para codificar o evento Load da ferramenta de grfico, adicione o evento Loaded dentro da tag <chartingToolkit>, conforme figura 22.

Codificando.net e-magazine

Cdigo Completo da ge.xaml.cs (listagem 9).

Classe

MainPa-

Figura 22 Definindo mtodo Loaded.

Depois de clicar duas vezes no evento Loaded exibido pelo Intelisense, ser exibida

using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents;

www.codificando.net

Out / Nov - 2010

56

Gerando Grficos com Silverlight, WCF e LINQ

e-magazine

using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; namespace SilverlightWcf { public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); } private static SilverlightWcf.wcfDados.WcfExemploClient wcfDados = new SilverlightWcf.wcfDados.WcfExemploClient(); private void AtualizaGrafico() { wcfDados.RetornaDadosCompleted += new EventHandler<SilverlightWcf.wcfDados.RetornaDados CompletedEventArgs> (wcfDados_BuscaSaldosCompleted); wcfDados.RetornaDadosAsync(); } void wcfDados_BuscaSaldosCompleted (object sender, SilverlightWcf.wcfDados.RetornaDadosCompletedE ventArgs e) { GraficoDados.DataContext = e.Result; } private void GraficoDados_Loaded(object sender, RoutedEventArgs e) { AtualizaGrafico(); } } }
Listagem 9 Contedo do arquivo MainPa-

Cdigo Completo da Classe MainPage.xaml (listagem 10).


<UserControl x:Class="SilverlightWcf.MainPage" xmlns="http://schemas.microsoft.com/ winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/ winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/ expression/blend/2008" xmlns:mc="http:// schemas.openxmlformats.org/markupcompatibility/2006" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400" xmlns:chartingToolkit="clrnamespace:System.Windows.Controls.DataVisualizat ion.Charting;assembly=System.Windows.Contr ols.DataVisualization.Toolkit" xmlns:controlsToolkit="clrnamespace:System.Windows.Controls;assembly=Syst em.Windows.Controls.Toolkit"> <chartingToolkit:Chart Name="GraficoDados" Loaded="GraficoDados_Loaded"> <chartingToolkit:BarSeries Title="Credito" DependentValueBinding = "{Binding Credito}" IndependentValueBinding = "{Binding Mes}" IsSelectionEnabled="True" AnimationSequence="FirstToLast" ItemsSource="{Binding}" / > <chartingToolkit:BarSeries Title="Debito" DependentValueBinding = "{Binding Debito}"

Codificando.net e-magazine
|

www.codificando.net

Out / Nov - 2010

57

Gerando Grficos com Silverlight, WCF e LINQ

e-magazine

IndependentValueBinding = "{Binding Mes}" IsSelectionEnabled="True" AnimationSequence="FirstToLast" ItemsSource="{Binding}" /> </chartingToolkit:Chart> </UserControl>

Listagem 10 Contedo do arquivo MainPage.xaml.

Figura 25 Exemplo do Grfico com efeito finalizado.

Para testar o Projeto, vamos configurar para que o projeto SilverlightWcf.Web seja o primeiro a ser carregado(Janela Solution Explorer, clicar o boto direito do mouse e selecionar Set as StartUp Project). Depois vamos fazer a mesma coisa para o arquivo SilverlightWcfTestPage.html ou SilverlightWcfTestPage.aspx, vamos podem ser utilizados para testar a aplicao. Depois disso pressione F5 para executar o projeto, a figura 24 e 25 mostra o grfico em execuo.

Abraos!

Antonio Lucas Finotti Pereira Ps-Graduado em Tecnologia em Desenvolvimento de Softwares no Centro Universitrio SENAC (S.J. do Rio Preto), Graduado em Cincia da Computao pela UNIP (S. J. do Rio Preto) e Programador de Micro Computador no SENAC (Barretos). Atua como Desenvolvedor.Net usando C# (LINQ, Entity Framework, WCF, WPF, Silverlight e WebServices) para as plataformas (WinForms, Web e Mobile). Possui conhecimento em Visual Basic, FireBird, MySql, Sql Server e Oracle.

Codificando.net e-magazine

Figura 24 Exemplo do Inicio do Grfico com o efeito.

www.codificando.net

Out / Nov - 2010

58

e-magazine

Reutilizando Cdigo Nativo no .NET


Por: Leandro Alves Santos

Nesse artigo, veremos como reutilizar cdigo nativo escrito na linguagem C em aplicaes .NET. Platform Invoke Platform Invoke o mecanismo que permite a chamada de cdigo nativo atravs da plataforma .NET. Podemos usufruir deste mecanismo chamando funes da API do Windows, funes de DLLs criadas a partir de cdigo escrito em linguagens como C, etc. Criando um Exemplo Simples Vamos criar uma funo em C que escreve uma mensagem na tela e iremos cham-la atravs do nosso cdigo gerenciado com a linguagem C#. Abra o Visual Studio 2008, clique em File > New -> Project, selecione a linguagem Visual C++ e selecione o template Win32 Project conforme a figura 1. O nome do projeto ser CodigoNativo.

Figura 1 - Criando um projeto Win32 no Visual Studio.

Aps isso, veremos uma janela semelhante figura 2. Clique em Application Settings ou clique no boto Next >.

Codificando.net e-magazine

Figura 2 - Application Wizard.

www.codificando.net

Out / Nov - 2010

59

Reutilizando Cdigo Nativo no .NET

e-magazine

Em Application Settings, vamos efetuar as seguintes configuraes: Application Type: DLL Additional Options: Empty Project

Agora vamos escrever nosso cdigo que escreve uma mensagem na tela. O cdigo pode ser visto na listagem 1.
#include <stdio.h> __declspec(dllexport) void EscreverTexto() { printf("Bem vindo ao \"DLL Hell\"!\n"); }
Listagem 1: Cdigo em C para escrever mensagem na tela.

Veja as opes selecionadas na figura 3. Aps configurar as opes, clique em Finish.

Anteriormente foi mencionado que o arquivo deveria ser criado com a extenso .c, ns fizemos isso para que o compilador consiga entender que estamos trabalhando com cdigo escrito na linguagem C. Caso tivssemos criado nosso arquivo com a extenso .cpp, ocorreria o decoration do nome da funo.
Figura 3: Application Settings.

Agora clique com o boto direito na pasta Source File que se encontra na janela Solution Explorer, selecione Add -> New Item. Na janela que abriu, selecione o template C++ File (.cpp). Na figura 4 podemos ver como a janela est nesse momento. Voc pode colocar o nome que desejar no arquivo, mas importante que a extenso do arquivo seja .c.

Caso o nosso arquivo tivesse a extenso .cpp, poderamos utilizar a palavra chave extern em conjunto com a string C, com isso o decoration no ocorreria. Veja na listagem 2 como ficaria o cdigo utilizando a palavra chave extern.
#include <stdio.h> extern "C" { __declspec(dllexport) void EscreverTexto() { printf("Bem vindo ao \"DLL Hell\".\n"); } }

Codificando.net e-magazine

Nota: decoration uma tcnica em que o


Listagem 2: Utilizando extern C para evitar o processo de decoration. Figura 4: Adicionando um arquivo ao projeto.

www.codificando.net

Out / Nov - 2010

60

Reutilizando Cdigo Nativo no .NET

e-magazine

nome do mtodo, o tipo de retorno e a lista de parmetros so utilizados para criar um nome nico da funo para o link editor. Compile a soluo clicando em Build -> Build Solution. Agora vamos criar um projeto em C# que far a chamada a funo EscreverTexto() da DLL em cdigo nativo. Para criar um projeto em C#, utilizaremos praticamente os mesmos passos que usamos para criar um projeto em Visual C++. Com a exceo de que selecionaremos a linguagem Visual C# e criaremos um projeto do tipo Console Application. Podemos ver isso na figura 5.

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace ConsoleApplication { class Program { [DllImport("CodigoNativo.dll")] static extern void EscreverTexto(); static void Main(string[] args) { Console.WriteLine("Estou no cdigo gerenciado."); EscreverTexto(); Console.WriteLine("Voltei ao cdigo gerenciado."); Console.ReadKey(); } } }
Listagem 3: Cdigo do arquivo program.cs, que contm a chamada da funo EscreverTexto().

Vejam o seguinte trecho de cdigo:


[DllImport("CodigoNativo.dll")] static extern void EscreverTexto();

Codificando.net e-magazine

Figura 5: Criando um projeto Console Application.

Aps adicionar o projeto em C#, devemos escrever o cdigo que ser responsvel por chamar a funo EscreverTexto(), conforme listagem 3.

Nesse trecho de cdigo, declaramos a funo EscreverTexto() com o atributo DllImport. Esse atributo indica que estamos trabalhando com uma funo no gerenciada e passamos como parmetro o nome da DLL que contm essa funo. Reparem que dentro do mtodo Main(), chamamos a funo da mesma forma que chamamos um mtodo escrito em C#.

www.codificando.net

Out / Nov - 2010

61

Reutilizando Cdigo Nativo no .NET

e-magazine

Compile o projeto ConsoleApplication. Copie a DLL do projeto CodigoNativo para a pasta bin\Debug do projeto ConsoleApplication. A DLL pode ser encontrada na pasta Debug. Aps copiar a DLL, execute a aplicao. O resultado pode ser visto na Figura 6.

de ser convertido em BSTR ou em um array de caracteres.

Trabalhando com Tipos Por Valor Criaremos agora um exemplo simples, onde passamos dois tipos inteiros por valor e esses valores so somados e a funo retorna a soma entre esses dois valores. Na Listagem 4 temos o cdigo em C que efetua a soma.
#include <stdio.h> __declspec(dllexport) int Somar(int valor1, int valor2) { int resultado = valor1 + valor2;

Figura 6: Aplicao sendo executada no modo ConsoleApplication.

return resultado; }

Enviando e Recebendo Dados do Cdigo Nativo Quando chamamos uma funo de cdigo nativo que possui parmetros e/ou retorna algum valor, esses dados podem ser convertidos entre o mundo gerenciado e no gerenciado de acordo com o tipo de dado a ser trabalhado. Esse processo chamado de Marshaling. Grande parte dos tipos no precisa passar pelo processo de Marshaling por ter a mesma representao entre o cdigo gerenciado e no gerenciado. Vejamos agora dois casos: O tipo System.Int32 no precisa de nenhuma converso entre cdigo gerenciado e cdigo no gerenciado. O tipo System.String po-

Listagem 4: Funo que efetua um calculo e retorna o resultado

O cdigo em C# do arquivo program.cs que declara a funo Somar, chama a funo e mostra o resultado, pode ser visto conforme listagem 5.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace ConsoleApplication { class Program { [DllImport("CodigoNativo.dll")]

Codificando.net e-magazine
|

www.codificando.net

Out / Nov - 2010

62

Reutilizando Cdigo Nativo no .NET

e-magazine

static extern Int32 Somar(Int32 valor1, Int32 valor2); static void Main(string[] args) { Int32 resultado; resultado = Somar(30, 40); Console.WriteLine("A funo Somar retornou o valor {0}.", resultado); Console.ReadKey(); } } }
Listagem 5: Cdigo que declara e executa o mtodo Somar.

#include <stdio.h> __declspec(dllexport) int VerificarNumeroPar(int valor) { int resultado = valor % 2; if(resultado == 0) return 1; else return 0; }
Listagem 6 - Funo que indica se um valor par ou mpar.

Nesse exemplo, declaramos a funo contida na DLL e no mtodo Main(), chamamos a funo passando os parmetros requisitados e mostramos o resultado. O resultado pode ser visto na figura 7.

Agora estamos trabalhando com um tipo inteiro simulando um tipo Boolean. O tipo Boolean pode ser convertido para um formato de um inteiro de 4 bytes onde 0 igual a falso e qualquer outro valor verdadeiro, pode ser um inteiro de 1 byte, onde 0 falso e 1 verdadeiro ou para um inteiro de 2 bytes onde -1 igual a verdadeiro e 0 igual a falso. Todos os tipos que precisam passar pelo processo de Marshaling, tem um comportamento default nesse processo, mas ns podemos indicar o tipo de converso atravs do atributo MarshalAs em conjunto com o enum UnmanagedType. Na listagem 7, utilizamos o atributo MarshalAs para o parmetro que estamos enviando e para o retorno da funo VerificarNumeroPar.

Codificando.net e-magazine

Figura 7 - Execuo do aplicativo que soma dois valores.

Veremos agora um exemplo de uma funo que recebe um valor inteiro e informa se esse valor par ou mpar. Na listagem 6 temos o cdigo em linguagem C.

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace ConsoleApplication

www.codificando.net

Out / Nov - 2010

63

Reutilizando Cdigo Nativo no .NET

e-magazine

{ class Program { [DllImport("CodigoNativo.dll")] [return: MarshalAs (UnmanagedType.Bool)] static extern Boolean VerificarNumeroPar( [MarshalAs(UnmanagedType.I4)] Int32 valor1); static void Main(string[] args) { Int32 valor; Boolean resultado; valor = 5; resultado = VerificarNumeroPar (valor); Console.WriteLine( "O numero {0} par? {1}", valor, resultado); valor = 7; resultado = VerificarNumeroPar (valor); Console.WriteLine( "O numero {0} par? {1}", valor, resultado); valor = 10; resultado = VerificarNumeroPar (valor); Console.WriteLine( "O numero {0} par? {1}", valor, resultado); Console.ReadKey(); } } }

Na figura 8 podemos ver a execuo do aplicativo.

Figura 8 - Execuo do aplicativo que verifica se

Trabalhando com Tipos Por Referncia Para trabalhar com tipos por referncia, utilizaremos a palavra chave ref em nosso cdigo gerenciado quando estamos trabalhando com um Value Type, como um inteiro por exemplo. Se estivssemos trabalhando por exemplo, com um objeto String, isso no seria necessrio, pois o tipo String no .NET Framework um Reference Type. Vamos agora a um exemplo onde passamos para o cdigo nativo uma varivel do tipo inteiro com a palavra chave ref e esse valor ser incrementado. O mtodo no possui retorno. Veja antes o cdigo escrito em linguagem C na Listagem 8. Notem que o mtodo recebe um ponteiro para um tipo inteiro.
#include <stdio.h> __declspec(dllexport) void Incrementar(int *valor) { ++*valor; }
Listagem 8: Mtodo que incrementa um valor inteiro.

Codificando.net e-magazine

Listagem 7 - Cdigo que declara e executa o mtodo VerificarNumeroPar.

www.codificando.net

Out / Nov - 2010

64

Reutilizando Cdigo Nativo no .NET

e-magazine

Na listagem 9 veremos o cdigo escrito em C# que chama esse mtodo e mostra o valor da varivel que foi enviada como parmetro.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace ConsoleApplication { class Program { [DllImport("CodigoNativo.dll")] static extern void Incrementar(ref Int32 valor); static void Main(string[] args) { Int32 valor = 0; Console.WriteLine("Valor original: {0}", valor); Incrementar(ref valor); Console.WriteLine( "Valor aps primeiro incremento: {0}", valor); Incrementar(ref valor); Console.WriteLine( "Valor aps segundo incremento: {0}", valor); Incrementar(ref valor); Console.WriteLine( "Valor aps terceiro incremento: {0}", valor); Console.ReadKey(); } } }
Listagem 9: Cdigo em C# que chama o mtodo de incremento escrito em linguagem C.

Como estamos trabalhando com referncia ou um ponteiro, dependendo do ponto de vista, o valor foi alterado na varivel que passamos como parmetro para o cdigo no gerenciado. Na figura 9, podemos ver a execuo do aplicativo.

Figura 9: Execuo do aplicativo que incrementa um valor inteiro.

Concluso Como podemos ver nesse artigo, muito simples reutilizar cdigos que foram escritos em cdigo nativo/no gerenciado, pois a Platform Invoke faz grande parte do trabalho de forma automtica, sem a necessidade de muito esforo do programador.

Codificando.net e-magazine

Leandro Alves Santos Bacharel em Sistemas de Informao. Atua a 4 anos com desenvolvimento e manuteno de sistemas. Tem experincia na Plataforma .NET (VB.NET e C#), Visual Basic 6, Crystal Reports, Sql Server e MySql.

www.codificando.net

Out / Nov - 2010

65

e-magazine

E se foi mais um TechEd


Por: Alexandre Tarifa
No ms de setembro de 2010, 2363 pessoas participaram do maior e mais bem organizado evento de tecnologia Microsoft no Brasil e provavelmente da Amrica do Sul. De acordo com a Microsoft, foram 193 palestras e uma sesso geral de 3:30 horas. Muito contedo! Contedo de qualidade apresentado por funcionrios da Microsoft, parceiros, MVPs, pessoas da comunidade, etc. A grandiosidade do evento foi compatvel ao espao, o Expo Center Norte ofereceu conforto e infra-estrutura necessria aos participantes em todos os aspectos. No tenho dvida alguma que o investimento feito por cada participante valeu cada centavo. Minha participao como palestrante, ministrei uma palestra sobre as novidades do Visual Basic 10 e presenciei diversas palestras, principalmente de desenvolvimento. O grande destaque do evento foi a presena do Kinect! Finalmente podemos conhecer esse equipamento na vida real. Minha impresso: SIMPLESMENTE SENSACIONAL! Sem dvida alguma o dispositivo tecnologia mais incrvel que j vi pessoalmente. Eu j tinha assistido vrios vdeos e sempre tive o p atrs da jogabilidade, tempo de resposta, etc... joguei aproximadamente 40 minutos alguns jogos e alguns softwares de demonstrao e todo e qualquer receio que eu tinha em segundos foi deixado de lado... em segundos voc percebe que aquilo absurdamente fantstico... jogabilidade, velocidade, perfeio nos movimentos, jogos interativos para todos os gostos, enfim, uma coisa incrvel... sou fantico por games e tenho certeza que os concorrentes devem olhar para o Kinect e pensam... e agora?

www.codificando.net

Out Nov 2010 Abril // Maio-2009

66

e-magazine
Outro destaque foi o Windows Phone... este dispositivo eu j tinha vista no MIX 2010 em Las Vegas, e percebi no Brasil uma grande receptividade pelos participantes... alm dos recursos do sistema operacional e de hardware, a plataforma .Net como plataforma de desenvolvimento um ENORME diferencial! Se a Microsoft souber trabalhar com seus fornecedores e trazer ao Brasil com diversas opes de preos e hardware tenho certesa que rapidamente entra forte no mercado. Se voc tem alguma restrio ao Windows Mobile, esquea! O Windows Phone OUTRO mundo. Tivemos tambm diversas sesses de Visual Studio 2010, linguagens, produtos em geral, etc etc etc! Uma grandiosidade de contedo, como j disse, este evento no deixou para trs nenhum evento internacional da Microsoft, pelo menos dos que participei. Parabns a Microsoft e a quem investiu seu dinheiro e tempo neste evento sensacional!

www.codificando.net

Out Nov 2010 Abril // Maio-2009

67