Categorias
certificado digital nfe nota fiscal eletr??nica salvador

Obter Certificado Digital para Nota Fiscal Eletr??nica

Post r??pido sobre Nota Fiscal Eletr??nica… Caso esteja desenvolvendo a aplica????o de NFe para um PF e/ou PJ e esteja utilizando certificados do tipo A3 (no A1 deve servir tamb??m, mas ainda n??o testei), utilize a fun????o abaixo para capturar da leitora o certificado. Os dados s??o armazenados no objeto para posterior manipula????o, exemplo, assinatura do XML para envio.

using System.Security.Cryptography.X509Certificates;

X509Certificate2 oX509Cert = new X509Certificate2();
X509Store store = new X509Store(“MY”, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;
X509Certificate2Collection collection1 = (X509Certificate2Collection)collection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);
X509Certificate2Collection collection2 = (X509Certificate2Collection)collection.Find(X509FindType.FindByKeyUsage, X509KeyUsageFlags.DigitalSignature, false);
X509Certificate2Collection scollection = (X509Certificate2Collection)collection2.Find(X509FindType.FindBySubjectName, “NOME DA EMPRESA PESSOA”, false);
if (scollection.Count == 0)
    oX509Cert = null;
else
    oX509Cert = scollection[0];
 
No objeto oX509Cert ?? o objeto representativo de seu certificado digital no seu sistema. Geralmente esse tipo de certificado fica armazenado temporariamente na pasta Pessoal do Gerenciador de Certificados do Windows. Caso deseje visualizar qual o nome correto do certificado e realizar demais opera????es, v?? em Iniciar, Executar e digite certmgr.msc. Uma tela como essa ir?? surgir:
 

Se o seu certificado n??o aparecer a??, deve ser que o leitor n??o est?? reconhecendo o cart??o, ou o software de leitura n??o foi corretamente instalado e outros fatores que agora n??o entrar?? em detalhes.

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
crash dicas visual studio

“Crash” nos Templates do Visual Studio – Parte 2

Quem leu o primeiro post do “Crash” de Templates do Visual Studio deve ter visto que esse n??o foi o erro que aconteceu comigo (voc?? que est?? lendo, digo)… Outro erro tem assombrado programadores quando ?? emitido uma mensagem como essa:

“Package ‘Visual Web Developer HTML Source Editor Package’ has failed to load properly ( GUID = {BFCC0C3C-6F87-4285-A6C8-BB616061800D} ). Please contact package vendor for assistance. Application restart is recommended, due to possible environment corruption. Would you like to disable loading this package in the future? You may use ‘devenv /resetskippkgs’ to re-enable package loading.”

Essa e suas variantes ficam informando esse erro e pedindo para executar o comando devenv /resetskippkgs para reabilitar os pacotes de volta. Muito bem, eu j?? havia ensinado em um post anterior como realizar a execu????o desse tipo de comando. Mas supondo que voc?? executou o procedimento, abre de novo o Visual Studio e o erro persiste… e agora?
 
Bem, provavelmente voc?? ir?? fazer algumas das sugest??es recomendadas anteriormente, contudo descobri o seguinte: algumas instala????es fazem com que a linguagem do Visual Studio fique em portugu??s (perceba se a aplica????o est?? com o menu ou partes em portugu??s), por exemplo, quando feito a instala????o de algum Add-on, e faz com que aconte??a esse tipo de crash.
 
O Visual Studio n??o trabalha bem com outro tipo de linguagem a n??o ser o ingl??s devido a variantes que ele possui bem como o funcionamento dos controle e reconhecimento do parse da linguagem. Ent??o, devemos colocar o Visual Studio de volta para a linguagem padr??o e para isso realize os seguintes passos:

  1. Abra o Visual Studio;
  2. Entre em Tools e em seguida escolha Options;
  3. Caso todas as op????es n??o estejam sendo exibidas, clique em “Show all settings”;
  4. Em Environment e escolha o item International Settings;
  5. Selecione a linguagem Ingl??s (English) e clique em OK;
  6. Feche o Visual Studio;
  7. Execute o comando devenv /resetskippkgs conforme explicado anteriormente.

Com isso, o problema j?? estar?? corrigido. Ai voc?? diz: “Mas as op????es voc?? escreveu em Ingl??s? E no meu aparece em Portugu??s…”. Mais f??cil do que isso ?? imposs??vel! Google est?? a?? pra isso… Boa sorte!

Categorias
banco de dados log sql server

Reduzir Log SQL Server

Nesse primeiro post sobre SQL Server vou explicar como reduzir o log do SQL Server 2005 e 2008. No log cont??m as instru????es que foram executadas ultimamente no banco de dados. Para quem trabalha com recupera????o em log pode preferir manter o log por algum per??odo antes de fazer uma redu????o. Mas para outros bancos de dados que realizam inser????es e atualiza????es constantes pode ficar invi??vel manter o log por grandes per??odos devido a prover um crescimento exarcebado. Bem isso voc?? pode ver melhor a depender da pol??tica de backup que voc?? for utilizar. Considerando que o log para voc?? n??o tem import??ncia de mant??-lo por muito tempo e n??o quer mexer nas configura????es no SQL Server, essa ?? uma boa dica de fazer a redu????o atrav??s de comandos SQL.

Pelo pr??prio SQL Server Management Studio voc?? pode utilizar da fun????o Shrink e fazer a redu????o do banco de dados e log. Muitas vezes a redu????o (vamos nos atentar ao do log) chega a ser pouca pois ele mant??m ainda algumas das instru????es mais recentes. Mas para for??osamente realizar a redu????o execute a seguinte intru????o:

SQL Server 2005
USE Banco_Dados
GO
BACKUP LOG Banco_Dados WITH TRUNCATE_ONLY
DBCC SHRINKFILE (Banco_Dados_log, 1)

SQL Server 2008
USE Banco_Dados;
GO
ALTER DATABASE Banco_Dados
SET RECOVERY SIMPLE;
GO
DBCC SHRINKFILE (Banco_Dados_Log, 1);
GO
ALTER DATABASE Banco_Dados
SET RECOVERY FULL;
GO
 
Ambos os procedimentos fazem com que o log seja reduzido a 1Mb. Nota-se que a instru????o de redu????o ?? a mesma. A ??nica diferen??a ?? que para realizar a trucamento, no 2005 ?? preciso informar que o backup de log ser?? truncado explicitamente e no 2008 deve mudar o status para recupera????o simples antes de trunc??-lo. Se quiser realizar o truncamento autom??tico de todos os bancos do servidor basta fazer um SELECT com cursor sobre todos os bancos pegando o name deles e executando o script acima. Mas isso deixarei para mostrar outro dia…

Categorias
crash dicas template visual studio

“Crash” nos Templates do Visual Studio

Ontem, quando estava instalando um componente no Visual Studio, tudo funcionava normalmente como um dia qualquer. N??o me esperava o Visual Studio falhar na hora que mais precisava dele. Ao trabalhar em um projeto e adicionar um novo item, todos os templates sumiram!!! N??o podia selecionar nenhum template (??bvio que n??o poderia criar mais nada) e ao mesmo tempo surgia-se um erro bizarro informando para que eu entrasse no visualizador de eventos para obter com mais detalhes.

Chegando l?? aparecia um erro informando que houve uma falha no carregamento dos templates e que era para executar o comando abaixo para fazer uma recupera????o dos templates:

devenv.exe /installvstemplates

Para executar o comando, v?? em Iniciar, depois em Programas escolha a pasta do Microsoft Visual Studio 2008/2005, depois na Visual Studio Tools e clique no prompt Visual Studio 2008/2005 Command Prompt. Entre com o comando descrito acima e d?? Enter. Aparentemente o comando ?? executado sem problemas e rapidamente. S?? que tem uma coisa: volte a abrir o Visualizador de Eventos (para quem n??o sabe o Visualizador de Eventos encontra-se no Painel de Controle – Ferramentas Administrativas) e monitore os eventos que est??o sendo gerados. Espere um instante e veja se nenhuma entrada foi gerada. Se der tudo certo, no m??ximo, ir?? surgir alguns warnings no log mas que pouco afeta a restaura????o.

E, por mais que queremos, uma coisa nunca funciona na primeira vez. Logo que executei apareceu in??meros erros (nem eram warnings). Abri o Visual Studio e continuava a mesma coisa. Li alguns materiais na Internet e notei que algumas pessoas j?? se depararam com esse problema. Encontrei v??rios m??todos para lidar com a situa????o, mas pensei melhor e fiquei com receio de piorar o que j?? estava estragado. Ent??o fiz o que todo brasileiro gosta de fazer: tentar de novo! Executei o mesmo processo e funcionou! Aparentemente estava tudo de volta…

Obs: Feche todas as inst??ncias do Visual Studio sen??o n??o funciona corretamente.

Para quem tiver essa sorte, verifique se est?? tudo nos conformes. Quem n??o conseguiu recomendo fortemente reinstalar o Visual Studio novamente. Sen??o, tente alguns dos tutoriais espalhados pela net. Alguns procedimentos como os descritos abaixo podem ajudar caso n??o resolva baseando-se nos m??todos acima:

  1. Mudar o diret??rio dos templates na configura????o do Visual Studio;
  2. Verifique se os templates necess??rios existem na pasta “C:Program FilesMicrosoft Visual Studio 9Common7IDEProjectTemplates” e “ItemTemplates”

Outra solu????o dr??stica ?? fazer a restaura????o do sistema para um ponto onde estava funcionando corretamente a aplica????o. Boa sorte!

Categorias
ajax captcha

Utilizando CAPTCHA para valida????o

Creio que todo mundo j?? passou por alguma valida????o de formul??rio na qual precisava digitar um c??digo que ?? exibido em uma imagem para que a valida????o ocorra “adequadamente” (digamos por um usu??rio e n??o por um rob??). Um utilit??rio que expandiu drasticamente pela web e uso quase que comum pela comunidade ?? do reCAPTCHA. Muito f??cil de utilizar, ele j?? fornece DLL/Implementa????es para algumas linguagens tais como o PHP, .NET, WordPress e outros. Nesse caso, vamos nos atentar ao plugin do ASP.NET. Nesse link cont??m informa????es de como proceder e utilizar o plugin.

O processo consiste basicamente na download da DLL, incorpora????o dela no projeto atrav??s inserindo-a na pasta Bin ou dando Add Reference. Na p??gina a ser utilizada, incorpore o c??digo de registro dela e assim pode-se utiliz??-la.

Antes de utiliz??-la, deve-se gerar uma chave p??blica e privada para que se processe a criptografia dos dados. Para gerar, voc?? deve se cadastrar aqui e preenche o formul??rio at?? que, ao final, seja exibida as chaves. Sem as chaves, o CAPTCHA n??o funciona.

Ent??o voc?? ter?? o seguinte c??digo (semelhante):

<%@ Register Assembly=”Recaptcha” Namespace=”Recaptcha” TagPrefix=”recaptcha” %>

<recaptcha:RecaptchaControl ID=”recaptcha” runat=”server” PublicKey=”chavepublica” PrivateKey=”chaveprivada” />

Para realizar a valida????o, deve apenas analisar a seguinte propriedade no PostBack:

recaptcha.IsValid

Na qual ir?? retornar um booleano se digitou os caracteres corretamente ou n??o.

Pronto! Basicamente voc?? j?? est?? apto a utilizar o CAPTCHA para validar as entradas em seu web-site. Muito bom a utiliza????o, contudo h?? dois problemas que vi muitas pessoas tendo: utilizar em Portugu??s e no AJAX.

Quando voc?? obt??m a DLL n??o h?? uma forma de configurar para o portugu??s. Para fazer isso voc?? deve obter o projeto da DLL no Source Project deles, abrir e setar manualmente a linguagem ou criar um m??todo p??blico para que fa??a isso a n??vel de utiliza????o.

Baixe atrav??s do SVN ou via HTTP uma das vers??es para ASP.NET. Abra o projeto e entre no arquivo RecaptchaControl.cs e procure o m??todo protected override void RenderContents(HtmlTextWriter output). Ap??s a linha output.WriteLine(“theme : ‘{0}’,”, this.theme ?? string.Empty); insira a seguinte linha:

output.WriteLine(“lang : ‘{0}’,”, this.lang ?? “pt”);

Ainda n??o compile. No regi??o de declara????o de vari??veis (em #region Private Fields), insira a vari??vel:

private string lang;

E nas propriedades (em #region Public Properties) insira o m??todo:

[Category(“Settings”)]
[Description(“Configura a linguagem para a desejada.”)]
public string Linguagem
{
get { return this.lang; }
set { this.lang = value; }
}

Pronto! Agora compile o projeto e ter?? uma nova DLL preparada para indicar qualquer linguagem que o reCAPTCHA suporta. Volte ao seu projeto e atualize a refer??ncia da DLL para essa nova.

Agora, quando voc?? est?? utilizando o ASP.NET AJAX juntamente com um UpdatePanel, ao realizar um PostBack, o reCAPTCHA some/desaparece e n??o ?? recarregado. O que fazer?

Bem, ?? f??cil! Crie um UpdatePanel para o CAPTCHA exclusivamente. Deixe apenas o CAPTCHA dentro do ContentTemplate e coloque os atributos ChildrenAsTriggers=”true” e UpdateMode=”Conditional” no UpdatePanel. Agora insira quantas triggers forem precisas dos controles nos quais fazem PostBack nessa p??gina. Ou seja, se houver um DropDownList ou um Button ou qualquer item que fa??a PostBack na p??gina, eles devem ser inseridos aqui para que o CAPTCHA possa ser carregado caso um deles fa??a requisi????o ao servidor.

Seu c??digo ficar?? parecido dessa forma:

<asp:UpdatePanel ID=”PainelCaptcha” runat=”server” ChildrenAsTriggers=”true” UpdateMode=”Conditional”>
<ContentTemplate>
<recaptcha:RecaptchaControl ID=”recaptcha” runat=”server” PublicKey=”chavepublica” PrivateKey=”chaveprivada” />
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID=”BotaoValidacao” />
</Triggers>
</asp:UpdatePanel>

Problemas resolvidos!