Categorias
componentes dll iis

URL Rewriter – Escreva URL Amig??veis em ASP.NET

A URL Rewriter permite mascarar o endere??o original por um novo endere??o mais seguro e amig??vel. Se temos o endere??o:

http://thiagomarcal.blogspot.com/noticas.aspx?id_noticia=123

Podemos re-escrev??-la da seguinte forma:

http://thiagomarcal.blogspot.com/noticias/123

Ou de outras formas conforme o mascaramento desejado. Para fazer o mascaramento ?? preciso do componente URL Rewriter instalado no IIS. Ele ?? gratuito e ?? instalado facilmente. Para cada web-site ?? configurado um mascaramento de endere??os que automaticamente ele faz a convers??o logo que requisitado.
N??o vou entrar em detalhes do processo de instala????o e configura????o aqui pois no site oficial tem um v??deo (logo na Home), bastando seguir o passo-a-passo, que ir?? conseguir deixar conforme deseja. Tamb??m h?? dispon??vel v??rios tutoriais que auxiliam no processo bem como fun????es avan??adas. Clique aqui para visitar o site da Micrososft URL Rewriter.

Categorias
dicas dll google ip salvador

Localiza????o de Usu??rio: Obter Cidade e Estado pelo IP em ASP.NET

A um certo tempo atr??s isso era um pouco complicado de ser feito ou fic??vamos dependentes (muito) de ferramentas de terceiros. Hoje, claramente, posso afirmar que temos mais flexibilidade por??m continuamos atrelados. Mas n??o seja por isso! A Google disponibilizou uma API inovadora que nos ajuda nesse caso e em muitos outros (relativo ao GoogleMaps). O GoogleMaps.Subgurim.NET ?? um avan??ado controle do GoogleMaps para o ASP.NET e permite uma gama de manipula????es sobre suas funcionalidades e a que iremos demonstrar aqui ?? a de obter informa????es do usu??rio pelo IP (no site deles pode encontrar bem como c??digos avan??ados e demais exemplos). Em contrapartida, ?? preciso de um arquivo extra contendo faixas de IP distribu??das pelo mundo. Ent??o a MaxMind disponibilizou tamb??m um arquivo bin??rio contendo essas informa????es gratuitamente. Voc?? pode obter o arquivo aqui ou aqui (a diferen??a ?? que um ?? o link direto e o outro ?? a p??gina geral que pode-se obter em outros formatos). Esse arquivo ?? mensalmente atualizando inserindo novas faixas, logo, deixo o dica para dar sempre uma atualizada quando poss??vel (com isso aumenta mais a precis??o mas hoje, com esse arquivo, j?? realiza uma boa cobertura).
Para in??cio dos trabalhos, baixe o componente GoogleMaps.Subgurim.NET e o arquivo de faixas GeoLiteCity.dat. Crie um novo Web Site. Adicione a GMaps.dll na pasta Bin do projeto e copie o GeoLiteCity.dat tamb??m (coloque em outra pasta afim de organiz??-los – no meu caso coloquei em uma pasta chamada Data). Agora escreva o seguinte c??digo abaixo:

using Subgurim.Controles;

private void ObtemInfoUser()
{
    string database = Server.MapPath(“~/Data/GeoLiteCity.dat”);
    LookupService servico = new LookupService(database);
    Location localizacao = servico.getLocation(Request.ServerVariables[“REMOTE_ADDR”]);
    if (localizacao != null)
    {
        Response.Write(“Cidade: “ + localizacao.city + “<br />”);
        Response.Write(“Pa??s: “ + localizacao.countryName + “<br />”);
        Response.Write(“C??digo do Pa??s: “ + localizacao.countryCode + “<br />”);
        Response.Write(“Regi??o: “ + localizacao.region + “<br />”);
        Response.Write(“C??digo da ??rea: “ + localizacao.area_code + “<br />”);
        Response.Write(“Latitude: “ + localizacao.latitude + “<br />”);
        Response.Write(“Longitudade: “ + localizacao.longitude);
    }
}
 
Voc?? deve obter a sa??da algo do tipo:
 
Cidade: Salvador
Pa??s: Brazil
C??digo do Pa??s: BR
Regi??o: 5
C??digo da ??rea: 0
Latitude: -12,7636
Longitude: -15,2821
 
* Obs: a latitude e longitude s??o dados fict??cios que eu coloquei 😉
 
Se voc?? estiver testando localmente, n??o ter?? resultado pois o Request.ServerVariables[“REMOTE_ADDR”] ir?? trazer o valor 127.0.0.1. Para saber seu IP externo acesse o MeuIp e substitua-o para visualizar os valores e valid??-los. Em breve estarei escrevendo outros artigos mostrando como aproveitar bem a API do GoogleMaps bem como demais funcionalidades. At?? mais!

UPDATE: Ap??s ler, vejam aqui sobre o pl??gio que fizeram com meu artigo e depois acusaram que eu que copiei. Quem l?? o blog sabe como eu escrevo e como expresso minhas id??ias…

Categorias
clr dicas dll sql server visual studio

Utilizando fun????o de uma DLL Externa no SQL Server

Esse ?? um t??pico que ir?? mostrar algo que definitivamente voc?? j?? precisou mas n??o sabia como fazer e que facilitar?? (e muito) alguns trabalhos. Programadores que usam o Bando de Dados para programar sendo por Stored Procedure, Functions e Triggers j?? passaram por maus bocados para preparar um algoritmo que realizasse um determinado processo, mas que esse mesmo algoritmo ?? mais f??cil de ser escrito (ou possuir funcionalidades que o SGDB n??o possui) em outra linguagem de programa????o. Por exemplo: validar e-mail. ?? poss??vel no SQL Server fazermos um Function que receba um VARCHAR e retorne um BIT informando que um e-mail ?? v??lido ou n??o, contudo seria uma fun????o um tanto que trabalhosa para quem n??o est?? familiarizado com programa????o em banco. Para quem desenvolve em ASP.NET (C# ou VB.NET) basta usarmos express??o regular que, em duas linhas, resolve o problema. Portanto iremos utilizar uma fun????o escrita em C# compilada em uma DLL e usarmos em um Function no SQL Server. Isso ?? poss??vel atrav??s do CLR.
Primeiramente vamos criar a DLL contendo a fun????o (no nosso exemplo vamos fazer a que valida e-mail – mas voc?? pode desenvolver a que quiser). Abra o Visual Studio e crie um Project. Em Project Type escolha Visual C# Windows e o Template opte por uma Class Libary. Note que quando voc?? cria uma classe vem com o nome Class1.cs. Para facilitar a compreens??o, renomeie para FuncoesSql.cs (ou outra) e remova o namespace criado. Agora, escreva a fun????o que deseja e adicione os namespaces necess??rios ficando da seguinte forma:

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Text;
using System.Text.RegularExpressions;
using Microsoft.SqlServer.Server;

public partial class FuncoesSql
{
    [Microsoft.SqlServer.Server.SqlFunction]
    public static SqlBoolean IsMailValido(SqlString email)
    {
        // Cria um objeto de express??es regulares para validar e-mail
        Regex expressaoRegular = new Regex(@”^(([^<>()[]\.,;:s@””]+”
        + @”(.[^<>()[]\.,;:s@””]+)*)(“”.+””))@”
        + @”(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}”
        + @”.[0-9]{1,3}])(([a-zA-Z-0-9]+.)+”
        + @”[a-zA-Z]{2,}))$”);

        // Realiza um teste na valida????o da express??o
        return new SqlBoolean(expressaoRegular.IsMatch(email.ToString()));
    }
}

No caso, precisamos explicitar os tipos de entrada e sa??da utilizados pelo banco de dados para que n??o haja problemas de tipagem. Poderia ser qualquer fun????o ou quantas que quisesse, contanto que respeite os tipos. Agora compile a DLL pressionando F6 ou pelo menu Build. J?? temos a DLL com a fun????o. Copie a DLL (que est?? na pasta binDebug de sua solu????o) e coloque-a em um local onde seu Banco de Dados possa busc??-la. Para exemplo, colocarei em C:SqlDlls no Servidor.
O pr??ximo passo ?? verificar se no SQL Server est?? ativo a funcionalidade CLR, para isso v?? em Iniciar > Todos os Programas > Microsft SQL Server 2008 (ou 2005) > Configuration Tools > SQL Server Surface Area Configuration. Entre em Surface Area Configuration for Features e na guia CLR Integration verifique se a fun????o est?? habilitada. Se n??o estiver, habilite.

D?? OK e agora j?? poder?? usar CLR no SQL Server. Abra o SQL Server Management Studio, conecte-se na base desejada e execute as seguintes instru????es SQL (abra um New Query para isso):

— CRIA O ASSEMBLY INDICANDO SUA ORIGEM
CREATE ASSEMBLY FuncoesSql FROM ‘C:SqlDllsFuncoesSqlServerASPNET.dll’
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
— CRIA A FUN????O
CREATE FUNCTION dbo.Fun_Valida_Mail (@email NVARCHAR(350))
RETURNS BIT
— INDICA A ORIGEM DA FUN????O SQL: ASSEMBLY > CLASSE > FUN????O
AS EXTERNAL NAME [FuncoesSql].FuncoesSql.IsMailValido
GO

Agora execute a Query (ou pressione F5)… Foi criada a fun????o! Pronto… agora ?? s?? usar como se fosse uam fun????o do SQL Server normalmente. Abaixo tem alguns exemplos de consulta e seus retornos:

Execu????es:
SELECT dbo.Fun_Valida_Mail(‘tmarcal@gmail’)
SELECT dbo.Fun_Valida_Mail(‘tmarcal@gmail.com’)
SELECT dbo.Fun_Valida_Mail(‘tmarcal.. @gmail.com’)
 
Retorno:
0
1
0
 
Apesar do trabalho inicial, pode-se aproveitar muito de ambos os recursos e criar cada vez mais fun????es complexas. Quanto ao desempenho da CLR, em compara????o ao T-SQL, deve-se ficar a mesma coisa. A diferen??a ?? praticamente impercept??vel. Espero que tenham gostado… At?? breve!

Categorias
crystal reports dicas dll

N??o foi poss??vel carregar arquivo ou assembly System.Web.Extensions, Version=2.0.0.0

Dica r??pida para quem tiver esse erro…
Acontece quando est?? utilizando uma vers??o do ASP.NET Ajax diferente do Framework da aplica????o. Muitas vezes, tamb??m, acontece quando est?? utilizando o Crystal Report ao renderizar um relat??rio. Ent??o ?? exibido a seguinte mensagem:
A solu????o ?? simples: basta remover a System.Web.Extensions.dll e/ou System.Web.Extensions.Design.dll do projeto (na pasta Bin).

N??o foi poss??vel carregar arquivo ou assembly ‘System.Web.Extensions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’ ou uma de suas depend??ncias. A defini????o do manifesto do assembly localizado n??o corresponde ?? refer??ncia do assembly. (Exce????o de HRESULT: 0x80131040)

Categorias
dll flash gr??ficos xml

Gerando Gr??ficos em ASP.NET

Um componente que gosto de utilizar para gerar gr??ficos ?? o FusionCharts. Atrav??s dele ?? poss??vel criar gr??ficos animados e interativos em Flash como gr??ficos em pizza, barra, colunas, funil, linha, ??rea, bolha, etc. Al??m de trabalhar com ASP, ASP.NET, PHP, JSP, ColdFusion, Ruby on Rails, Python e HTML puro, pode-se utilizar em conjunto com bancos de dados como SQL Server, Oracle, MySQL, PostgreSQL, etc… O seu funcionamento consiste em apenas gerar o XML (em tempo de execu????o ou n??o) e indicar qual o gr??fico. Vamos ?? pr??tica…

Acesse o site da FusionCharts e baixe o pacote com os gr??ficos (na vers??o trial vem apenas os gr??ficos comuns – os mais complexos vem na vers??o paga). No arquivo baixado vem os SWF’s dos gr??ficos, exemplos de XML’s a serem gerados para cada gr??ficos, o JavaScript a ser incorporado na p??gina e demais documentos (qualquer d??vida veja na pasta Code > CSNET que cont??m um exemplo em ASP.NET e cont??m todos os arquivos que ir?? precisar). Para nosso exemplo, vamos gerar um gr??fico em pizza.

Crie um Web Site e adicione as pastas conforme a estrutura abaixo:

Adicione no App_Code as classes Util.cs e DbConn.cs. Na Bin adicione a refer??ncia ?? DLL da FusionCharts.dll, na Graficos adicione o SWF do gr??fico que iremos gerar (no caso escolha o Pizza3D.swf) e na pasta Js adicione o FusionCharts.js. Todos esses arquivos s??o encontrados no ZIP que baixou no mesmo caminho dito anteriormente.

Adicione uma p??gina ASPX agora e adicione no body ou no head o script:
<script language=”Javascript” type=”text/javascript” src=”js/FusionCharts.js”></script>

Tamb??m adicione um Literal (Controle) no local onde dever?? surgir o gr??fico. Para fins did??ticos coloque o ID do controle como GraphPizza. Agora tudo ser?? no Code-Behind… Adicione os namespaces Utilities e InfoSoftGlobal usando a cl??usula using. Em seguida criamos um m??todo onde ?? gerado o XML e encapsulado sobre o SWF da seguinte forma:

public void CriarGraficoPizza3D()
{
    string strXML = “<graph showNames=’1′ caption=’Tipos de Clientes’ decimalPrecision=’0′>”;
    strXML += “<set name=’Alvos’ value=’10’ color=’ED1C24’/>”;
    strXML += “<set name=’Prospects’ value=’5′ color=’FFFF00’/>”;
    strXML += “<set name=’Clientes’ value=’2′ color=’00E600’/>”;
    strXML += “</graph>”;
    GraphPizza.Text = FusionCharts.RenderChart(“Graficos/Pizza3D.swf”, “”, strXML, “GraficoPizza3D”, “400”, “300”, false, false);
}

No caso, gero todo o XML contendo os dados a serem apresentados e o passo por par??metro ao m??todo do FusionCharts para renderiz??-lo e exibi-lo. Bem simples, n??o? Esse ?? o exemplo mais f??cil… H?? v??rias formas de apresent??-lo bem como suas op????es fazem com que apresente mais variantes. O mais dif??cil (quer dizer trabalhoso) ?? gerar o XML…

Categorias
dll mysql sqldatasource

SqlDataSource e MySQL

Estava fazendo uma integra????o de bases de dados MySQL e SQL Server e, em certa etapa, teria que utilizar o SqlDataSource para preencher um GridView alternando entre o SQL Server e o MySQL. Contudo, nativamente, o provider do SqlDataSource n??o aceita o MySQL a n??o ser por ODBC conforme especifica????o. Dei uma lida na net para ver alguns coment??rios e v?? alguns absurdos como: “o SqlDataSource ?? espec??fico do SQL Server” entre outros. Parece que o pessoal n??o l?? as especifica????es. Como disse, d?? sim, mas por ODBC. Mas usando o conector MySQL, conforme um post anterior, ?? poss??vel realizar a integra????o do SqlDataSource a uma base MySQL sem ser por ODBC usando o conector espec??fico. Vamos por a m??o na massa…

Primeiramente v?? no web.config e adicione as seguintes configura????es:

<system.data>
<DbProviderFactories>
<add name=”MySQL Data Provider” invariant=”MySql.Data.MySqlClient” description=”Conector .NET para o MySQL” type=”MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.2.2.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d” />
</DbProviderFactories>
</system.data>

Atente-se ?? vers??o da DLL do conector que est?? utilizando. No caso, estou usando a 6.2.2.0. Aplique tamb??m o Assembly inserindo a tag abaixo:

<add assembly=”MySql.Data, Version=6.2.2.0, Culture=neutral, PublicKeyToken=C5687FC88969C44D” />

Como disse, n??o vou entrar em detalhes, mas adicionando essas configura????es no web.config de seu projeto j?? estar?? apto para trabalhar adequadamente com o MySQL. Agora  o resto ?? simples, basta inserir o SqlDataSource e colocar o ProviderName=”MySql.Data.MySqlClient”.

Obs: N??o coloque nenhum driver no ConnectionString do SqlDataSource como “Driver=MySQL ODBC 3.5;” ou suas variantes. Utilize a string de conex??o convencional, pois o provider ir?? fornecer informa????es espec??ficas para que o objeto possa se conectar normalmente.

Categorias
banco de dados dll mysql

ASP.NET com Banco MySQL

Todos viram aqui que meus posts dispensam muito embasamento te??rico e parte logo para a pr??tica. Gosto de ser direto… ent??o, vamos l??! Para conectar a bancos MySQL podemos utilizar o ODBC do .NET para conectar e realizar consultas a ele. Contudo, esse tipo de conex??o ?? mais lento e n??o usurfrui de conjunto de instru????es espec??ficas que podem otimizar as opera????es sobre o banco de dados, exemplo o namespace System.Data.SqlClient no qual possuem instru????es espec??ficas do SQL Server para manipula????es dos dados. Assim sendo, a pr??pria MySQL disponibilizou um conector espec??fico para programa????o .NET. Para isso, pode realizar o download aqui.

Fa??a o download do instalador ou zip para obtermos as DLLs. Caso tenham dificuldade na obten????o dos arquivos, vejam nesse link aqui onde cont??m apenas as DLLs b??sicas para o funcionamento. Com os arquivos em m??os, insira-os na pasta Bin do projeto ou d?? um Add Reference para incorpor??-las. Com as DLLs no seu devido local, as classes MySQL j?? podem ser acessadas quando adicionado o namespace MySql.Data.MySqlClient. Abaixo, temos um exemplo de realizar uma consulta no banco de dados. Nota-se que se assemelha bastanto com o SqlDataReader, OdbcDataReader, etc:

using MySql.Data.MySqlClient;

MySqlConnection conexao = new MySqlConnection(“String Conex??o MySQL”);
MySqlCommand comando = new MySqlCommand();
MySqlDataReader datareader = null;
try
{
    conexao.Open();
    try
    {
        comando.Connection = conexao;
        comando.CommandText = “SELECT * FROM Tabela”;
        datareader = comando.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
    }
    catch (MySqlException erro) { }
}
catch (MySqlException erro) { }

O objeto MySqlDataReader cont??m os dados da consulta efetuada. Bem similiar com as outras formas de uso de conex??o, ent??o n??o h?? erro. Parameters, DataSet e muitos m??todos que o conector fornece podem ser usados de forma similar aos demais conectores citados anteriormente. F??cil…

Ent??o ?? isso! Caso tenham dificuldade na string de conex??o para o MySQL veja no ConnectionStrings a mais adequada a sua necessidade.

Categorias
dll imagem resources

Inserindo Imagem em DLL

A alguns dias atr??s, comecei a desenvolver um Framework para que eu pudesse incorporar em minhas aplica????es e que pudesse reaproveit??-la constantemente. Nela cont??m classes de conex??o, cria????o de objetos dinamicamente e imagens. Estava quase pronto quando me deparei com a parte das imagens. Eu queria que as imagens ficassem na DLL e quando eu fosse atualizar uma aplica????o, eu s?? substituiria a DLL e n??o esquecesse dos arquivos.

??bvio que comecei a ler alguns materiais na Internet para saber qual o melhor m??todo para desenvolver. Por mais que eu lia, mais eu achava complicado. E outros, quanto eu mais fazia mais eu achava que estava errado. At?? que ent??o consegui…

Voc?? pode utilizar de duas formas: chamando dentro da pr??pria DLL ou atrav??s de uma p??gina ASPX para, ao final, gerar uma imagem. Irei explicar como pois ?? praticamente a mesma coisa…

No Visual Studio, abra seu projeto (ele deve ser um Class Library). Clique com o direito sobre a Solu????o na aba do Solution Explorer e escolha a op????o Properties. Ir?? abrir o conjunto de propriedades vigentes da DLL. Entre na aba Resources e notar?? a seguinte tela:


Nesse caso ele diz que n??o, por padr??o, nenhum recurso. Clique sobre o link para adicionarmos um. Agora, v?? em Add Resource, New Image e escolha um dos tipos de imagem suportado ou escolha Add Existing File… para selecionar uma imagem existente no disco.

Se escolhido a primeira op????o ter?? que dar um nome que o identifique para que possamos invoc??-lo posteriormente e ter?? que desenhar ou incorporar uma imagem no editor que ir?? abrir. Caso contr??rio, a segunda op????o ?? a mais r??pida pois iremos apenas selecionar uma imagem que ela j?? ser?? incoporada.
Logo ap??s incorpor??-la nos recursos, ver??, atrav??s do Solution Explorer, que foi criada uma pasta chamada Resources contendo a imagem desejada. Agora iremos permitir tamb??m que a imagem seja “chamada” ou, melhor dizendo, seja embedded. Para isso, clique com o direito sobre a imagem e entre em Properties. No Build Action, escolha a propriedade Embedded Resource.
Agora, v?? na pasta Properties da solu????o e abra o arquivo AssemblyInfo.cs. Adicione o namespace:
using System.Web.UI;
E adicione a seguinte linha no final (pode ser depois de todas que tiverem):
[assembly: WebResource(“Framework.Resources.Calendario.png”, “image/png”)]

Sendo que ?? constitu??do por:

  • Framework: ?? o namespace que comp??e sua solu????o, no meu caso estava utilizando o namespace Framework;
  • Resources: indica o nome da pasta onde est?? o recurso;
  • Imagem

Assim a imagem j?? est?? incorporada ?? DLL e prontra para uso. Para invocarmos, conforme descrito anteriormente, pode ser de duas formas: de dentro da DLL e fora dela.

Por dentro, podemos gerar um objeto Image e adicionar seu atributo ImageUrl diretamente:

Image imagem = new Image();

imagem.ImageUrl = ClientScript.GetWebResourceUrl(this.GetType(), “Framework.Resources.Calendario.png”);

Pode-se utilizar a mesma forma de invoca????o quando for chamar de fora da DLL pelo CodeBehind. Se for chamar direto na p??gina ASPX basta utilizar as tags <%= %>colocando dentro o m??todo de invoca????o do recurso.

Voc?? pode utilizar essa forma de acoplamento de recursos para alguns outros tipos de objetos como JavaScript, por exemplo. Lembrando que n??o ?? bom ter uma DLL muito grande com diversos objetos. Caso for de extrema import??ncia mant??-lo na DLL, fragmente-os em diversas outras DLLs.