Deletado em 13 de setembro de 2010

Feliz dia do Programador

Pena que no Brasil ainda não temos essa cultura =)

Mas hoje é dia do programador, então, parabéns à todos que tem essa profissão!!! Ou tentam ter hahahahahaha.

Abraços!

Deletado em 10 de agosto de 2010

SELECT com NULL no MS SQL

Uma postagem rápida para falar sobre SQL e aproveitar para dizer que tive 2 artigos publicados na SQL Magazine deste mês de Agosto (Edição 78). \o/ hehehehe!!!!

Então... Acabei de me deparar com um problema bobo hoje. Estava criando um procedure que tinha um status do tipo Bit.

Para chamar a procedure passava 0 ou 1... Maravilha!

Entretanto, no sistema no qual a procedure ia ser chamada, poderia listar os ativos, inativos ou os ativos (E) inativos.

Poxa que fácil, basta apenas passar no parâmetro do status o valor NULL.

Vamos ao exemplo:

CREATE PROCEDURE [dbo].[ListarNulo] 
 @Status BIT
AS
BEGIN

 SELECT 
     [ParceiroCodigo]
    ,[CPF]
    ,[NumMatricula]
   FROM [ListaBranca] 
 WHERE
  ([Status] = @Status OR @Status = NULL)

END

Poxa, que nada de diferente, pronto acabou! Éééé... não, infelizmente quando rodei a procedure passando NULL no parâmetro... Não me trouxe nada! Mas pq???

Bom, foram 10 minutos revisando a procedure (não era essa acima, era uma maiorzinha) e mas 10 minutos para descobrir e bater a mão na testa dizendo "nossa como eu sou burro".

A frase do que eu precisa me dizia a resposta. "Preciso verificar se o parâmetro (É) nulo." "É" nulo e não "Igual" a Nulo. Vamos alterar a procedure.

ALTER PROCEDURE [dbo].[ListarNulo] 
 @Status BIT
AS
BEGIN

 SELECT 
     [ParceiroCodigo]
    ,[CPF]
    ,[NumMatricula]
   FROM [ListaBranca] 
 WHERE
  ([Status] = @Status OR @Status IS NULL)

END

Podemos ver que tirei o igual e coloquei a cláusula IS, apenas para verificar se é nulo. Resolvido! IS um lixo mesmo... Abraços!

Deletado em 26 de julho de 2010

Diferenças entre ASP.Net Web Services e WCF (Windows Comunication Fundation)

Encontro poucas informações sobre WCF atualmente na Internet. Na verdade pouco usei esta tecnologia, mas quando começei a pesquisar sobre a maior dúvida era: O que WCF tem de diferente dos Web Services.

Para um conteúdo completo, recomendo o blog do MVP Israel Aece. Ele fez alguns vídeos e explica muitas coisas do WCF, falando também as diferenças entre as tecnologias.

A partir do blog dele, tentei fazer uma tabela básica com o que existe em Web Services e o que existe no WCF. O Resultado é o lixo abaixo:

Ação Web Services WCF
Estrutura de
Projeto
Arquivos .asmx, trabalha com métodos de serviço. Arquivos .srv, trabalha com contratos de serviços.
Contratos Obrigatório o uso atributo [WebMethod] em cada método que estará disponível para o acesso. Interfaces determinam os contratos, decoradas com [ServiceContract]. Pode ter tipos complexos vinculados aos serviços.
Serialização/
Deserialização
Serializa todos os membros públicos com XmlSerializer. Utiliza o DataContractSerializer, parecido com XmlSerializer porém persiste membros private e protected e gera um XML mais simplificado, melhorando a interoperabilidade entre as plataformas.
Protocolo/
Hosting
Pode somente ser hospedado no IIS, utilizando o protocolo HTTP/HTTPS. Arquitetura muito mais flexível e é independente do protocolo, ou seja, ele pode rodar em HTTP, HTTPS, TCP, MSMQ, etc. Pode usar o IIS como host ou ser um serviço instalado no Windows.
Extensibilidade Interceptar as requisições através de SOAP Extensions. Inúmeros pontos de extensibilidade tanto do lado do serviço quanto do cliente.
Segurança Segurança baseada no transporte, ou seja, ele somente será seguro se você expor o serviço através de HTTPS. Pode utilizar SoapHeader com usuário e senha. Funciona bem, mas é vulnerável. É seguro por padrão. Para utilizar a autenticação baseada em UserName/Password que o WCF fornece sob o protocolo HTTP, será necessário utilizar um certificado.
Configuração Utiliza a Web.config de forma declarativa Seção de configurações são extremamente ricas. Segurança, transações, know types, behaviors, bindings, endpoints, contratos, etc. É um pouco complexo. Grande parte do que temos no WCF não existe nativamente no ASMX.
Interoperabilidade Interoperabilidade O ASMX não possui nativamente suporte a especificações que foram definidas por grandes "players" do mercado. Precisa da instalação de um Add-on para o Visual Studio .NET. Padrões já foram implementados nativamente e são configuráveis. Consegue facilmente conversar com serviços construídos em ASMX em ambos os lados.
Cliente Pode ser integrado com muitas aplicações. Muito mais flexível que o ASMX.
Desempenho http://msdn.microsoft.com/en-us/library/bb310550.aspx
Resultado
Final
Gera WSDL Gera WSDL
Conclusão Muitas funcionalidades ainda são de forma idêntica entre o WS e o WCF.

Quanto a questões de configuração, segurança, desempenho e Interoperabilidade o WCF ganha por ter todos os padrões de XML adicionados nativamente, englobar todas as tecnologias de computação distribuída da Microsoft e ser mais flexível a alterações e extensibilidade.

Os Web Services são pouco mais fáceis de se trabalhar quanto a questão de criação de projeto e análise de erros. Entretanto a questão de desenvolvimento o WCF é bem mais avançado. Por fim, os dois geram WSDL para o cliente consumir os dados.

Se colocarmos em uma balança as duas tecnologias. Realmente pouca coisa parece ter mudado.

Entretanto, pensando no seguinte fato: Se hoje minha empresa vai começar a criar algo orientado a serviços, deveriamos usar o WCF, pois é uma nova tecnologia que vai substituir o Web Services.

Agora, fazer a migração das tecnologias, talvez isso ainda (atualmente) não vale tanto a pena. Pelo mesmo motivo de "parecer" o mesmo da mesma coisa.

Deletado em 20 de julho de 2010

Como funcionam as Arrays (Matrizes) Multidimensionais no C#?

Bem simples essa resposta. Funciona como esta na imagem acima =).

Ok, não é tão simples. Mas ai está o ponto deste lixo de post. As matrizes, ou como chamamos no C# arrays, multidimensionais são, como muitos professores de faculdade dizem, uma caixa de Biz, ou melhor, linha e coluna igual na matemática.

E eles estão certos. É isso mesmo. Mas não é como o C# trata isso internamente.

Arrays são Reference Types, traduzindo, variáveis por referência (para quem não sabe, existem 2 tipos, os tipos por referência e os por valor, os Value Types). Os Reference Types guardão, ao invés do valor da variável, o endereço de memória no qual este valor está disponível.

Entendendo isso, vamos a Array. Imaginando a seguinte entrada do programa:

int[,] x = new int[2, 3];
x[1, 2] = 10;

Na primeira linha, criamos uma matriz “x” de inteiros com 2 linhas e 3 colunas. Na realidade, inserimos na memória stack (Pilha) um endereço, podemos ver essa ação na imagem acima (e todas as outras ações também =P). Podemos ver que “x” guarda o endereço de memória “adew:12ws”.

A partir dessa posição de memória podemos entender como o C# se comporta.

Como temos uma array de 2 por 3, vamos ter primeiro neste endereço (“adew:12ws”) outros dois endereços conforme solicitamos na “linha” [2, 3], e esses dois endereços terão as quantidades (três neste caso) de VALORES que solicitamos na "coluna" [2, 3].

Eu disse valores em maiúscula pois realmente na última instrução da array não teremos mais apontamento para memória e sim o valor real guardado. Esse valor é iniciado zero para todas as 6 possibilidades.

E como funciona a troca de valor, como a segunda linha de instrução diz x[1, 2] = 10? Na imagem podemos ver passo a passo como funciona.

A variável "x", guarda o endereço “adew:12ws” que em 0 guarda o endereço “apop:1234” e em 1 guarda o endereço “eeee:uuuu” (lembrando que as posições da array sempre começam com 0 e terminam em valor - 1). Vamos trocar o valor na linha 1 (“apop:1234” em “adew:12ws”) da coluna 2 (valor 0 em “apop:1234”) para 10 (risca o zero e coloca o 10). Pronto assim o C# trata as arrays multidimensionais.

E se tivéssemos mais uma dimensão?

int[,,] x = new int[2, 3, 2];

A mesma idéia iria se aplicar, onde "x" apontaria para um endereço de memória (como na pilha vista) com 2 endereços de memória [2, 3, 2]. Esses dois endereços apontariam para mais três endereços de memória [2, 3, 2] e cada um desses endereços de memória teriam 2 valores [2, 3, 2]. Como muita coisa na informática é feita uma árvore de dados.

Esse post foi um pedaço da aula de orientação a objetos avançada que fiz junto com minha empresa com o professor Agnaldo no centro de treinamento 50 minutos. Achei realmente muito interessante.

Abraços.

Deletado em 5 de julho de 2010

Charges

Ok, isso acontece em todas empresas =)

Esse eu editei pois o ratinho estudava C++, agora é um ratinho que estuda C#!

Lixo para descontrair...

Topo