Inserir dados no Sql Server com bastante velocidade

Dezembro 6, 2007

bom dia leitores,

Semana passada eu tive a necessidade de fazer uma programa que pegasse dados de aproximadamente 5000 txts e jogasse as informações no Sql Server. Cada txt é referente a uma tabela no banco, os arquivos juntos chegam a 50 gigas. Antes de me passarem a tarefa, o processamento que estavam fazendo era de insert normal e isso demorava duas semanas para completar todo o processamento.

Foi quando sugerir que fizessemos a importação via .net usando o objeto SqlBulkCopy. Esse objeto pega um datatable e insere “abruptamente” no SqlServer pois não grava nenhum log durante esse processo. Abaixo segue parte do codigo que usei para fazer essa importação que demorou 3 horas e 12 minutos, um tempo bastante viável levando em consideração a quantidade de dados.

Abaixo está o método main que cria duas threads, uma para o processamento e outra para a visualização do status do processamento.

        static void Main(string[] args)
        {
            long tamanhoDiretorio = ObterTamanhoDoDiretorio(“E:\\basetxt\\”);
            AtualizarStatus(0, tamanhoDiretorio, 0, tamanhoDiretorio, “”);
            EscreveLog(DateTime.Now + “: Obtendo Lista de Tabelas”);
            List<Tabela> listaDeTabelas = ObterEstruturaDeTabelasEColunas();
            EscreveLog(DateTime.Now + “: Lista de Tabelas Obtida”);
            EscreveLog(“TAREFA: Importar ” + listaDeTabelas.Count + ” Tabelas “);

            ThreadStart status = new ThreadStart(Status);
            Thread threadStatus = new Thread(status);
            threadStatus.Priority = ThreadPriority.Lowest;
            threadStatus.Start();

            ParameterizedThreadStart persistir = new ParameterizedThreadStart(PersistirDados);
            Thread threadPersistir = new Thread(persistir);
            threadStatus.Priority = ThreadPriority.Highest;
            threadPersistir.Start(listaDeTabelas);
        }

Agora está o pulo do gato:

bool persistido = false;
while (!persistido)
{
    try
    {
        SqlConnection conn = new SqlConnection(BANCODEDESTINO);
        conn.Open();
        SqlTransaction transaction = conn.BeginTransaction();

        SqlBulkCopy bulk = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, transaction);
        bulk.DestinationTableName = “dbo.” + tabela.NomeTabela.ToUpper();
        SqlBulkCopyColumnMappingCollection mapeamentoColunas = bulk.ColumnMappings;
        bulk.BatchSize = 1000000;
        bulk.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied);
        bulk.NotifyAfter = 10000;

        mapeamentoColunas.Clear();
        foreach (Coluna coluna in tabela.ListaDeColunas)
        {
            mapeamentoColunas.Add(new SqlBulkCopyColumnMapping(coluna.NomeColuna, coluna.NomeColuna));
        }

        bulk.BulkCopyTimeout = 180;
        try
        {
            EscreveLog(DateTime.Now + “: Gravando no banco”);
            bulk.WriteToServer(dt);
            transaction.Commit();
            EscreveLog(DateTime.Now + “: Inserindo: Linha Inseridas ” + h);
            persistido = true;
            tabela.Processado = “s”;
        }
        catch (Exception erro)
        {
            transaction.Rollback();
            EscreveLog(DateTime.Now + “: Ocorreu um erro ao persistir no banco – Erro: ” + erro.Message);
            tentativa = tentativa + 1;
            tabela.Processado = “e”;
        }
        finally
        {
            conn.Close();
        }
    }
    catch (Exception erro)
    {
        EscreveLog(DateTime.Now + “: Ocorreu um erro ao persistir no banco – Erro: ” + erro.Message);
        tentativa = tentativa + 1;
    }

    if (tentativa > 2)
    {
        persistido = true;
        EscreveLog(DateTime.Now + “: Apos 3 tentativas a inclusao dos dados foi cancelada.”);
    }
}

flw pessoal,

Até breve


Criando consultas usando critérios

Dezembro 5, 2007

Boa tarde leitores,

Hoje eu vou mostrar como fazer uma consulta sql usando critérios:

SELECT
Nome,
Funcao,
CASE TipoSalario
WHEN 1  THEN HorasTrabalhadas * ValorHora
ELSE SalarioLiquido
END AS Salario
FROM Funcionario  

Bom final de semana a todos.


Inclusão Digital: Desafio do século XXI

Dezembro 4, 2007

 Amigos,

No dia 26 de novembro apresentei a palestra “Inclusão Digital: Desafio do século XXI” na faculdade Fabrai.
Clique aqui e faça download dos slides da apresentação.

abraços para o Cláudio, Helém e Isabela que me ajudaram na elaboração da apresentação.

Até a próxima


Quer ficar rico? Pergunte-me como.

Dezembro 4, 2007

Um tempo atrás um amigo meu queria um sistema que gerasse 100 cartelas com 5 números a partir de 20 números pré-definidos para jogar na quina. O sistema, feito em C#, iria gerar um txt com as 100 cartelas.  Depois, quando saísse o resultado ele poderia conferir quantos números ele acertou.

O sistema foi feito, como vocês podem ver clicando aqui. Porém está com erro, já que ele não acertou nenhum número. E olha que nem deu problema de compilação. Visual Studio FDP =D.


Instalando e configurando o IIS para rodar páginas Asp.Net

Dezembro 4, 2007

Hoje eu vou  mostrar uma configuração básica para que um sistema feito na framework 2.0 32-bits seja acessado em uma rede interna, intranet, usando o IIS 6.0.

Antes de tudo você deve ter instalado a framework 2.0 no seu servidor. Caso ainda não tenha feito isso, clique aqui, faça download e instale a framework.

Vamos instalar o IIS 6.0.

1. Vá no Painel de Controle » Adicionar e remover programas

2. Clique em Adicionar e Remover Componentes do Windows;

3. Selecione Application Server, caso esteja usando o Windows 2003 server ou o Internet Information Services(IIS), caso esteja usando o Windows XP.
 

imag1.jpg

4. Se estiver usando o Widnows 2003 Server, clique em ‘Details’ para que os sub-itens de ‘Application Server’ apareçam;

5. Selecione o item ‘Internet Information Services (IIS) e clique em ‘Details…’; 
imag2.jpg

Ao selecionar o item ‘Internet Information Services(IIS), todos os componentes necessários para uma instalação básica do IIS serão selecionados automaticamente. 

imag3.jpg

Você notará que somente 3 itens dos Sub-componentes do IIS estarão selecionados. Ainda, se selecionarmos o item ‘World Wide Web Service’, veremos que somente o serviço World Wide Web está assinalado. Todos os outros sub-componentes, necessários para desenvolvimento de sites dinâmicos estão desabilitados por padrão.

imag4.jpg

Bom, agora que você visualizou todos os sub-componentes disponíveis para o IIS, clique em ‘OK’ quantas vezes for necessário para voltar à tela do ‘Application Server’ e clique em ‘Next’. A caixa ‘Configuring Components’ aparecerá e solicitará para que você insira o disco do Windows Server 2003 que, no nosso caso, é a versão Standard. Esse procedimento é o mesmo para todas as versões do Windows Server 2003, inclusive para a Web Edition.   Ao inserir o CD do Sistema Operacional, ele continuará a instalação e a finalizará com a tela já conhecida do ‘Finish’.  

imag5.jpg

Clique em Finish e abra o Gerenciador do IIS através do Iniciar» Executar » Digite inetmgr » Clique OK. Pronto! Seu IIS está ativo e pronto para atender requisições de páginas. Porém, nessa configuração padrão ele somente atenderá requisição de páginas estáticas.

Via: http://www.juliobattisti.com.br/tutoriais/gersonkonnus/iis6001.asp

Caso use Windows 2003 server, vá no IIS na opção “Web Service Extensions”, selecione a extensão “Asp.Net 2.0″ e clique em “Allow”.

Agora adicione o seu site em “Web Sites”.

Você pode acessar seu site pelo endereço http://localhost.

Para ser visto em outros computadores da rede desabilite o firewall. Caso use o Windows Firewall crie uma exceção na porta 80.

Vá no Painel de Controle >> Windows Firewall. Na aba Exceptions adicione uma nova porta clicando em Add Port. Dê um nome e informe a porta 80.

Agora seu site pode ser visto em qualquer lugar da rede. Para isso os outros computadores acessam o site digitando o IP, ou DNS, do seu servidor em algum navegador.

Para saber qual o IP do seu servidor

Vá em Inicial>> Executar>> digite cmd.

Digite ipconfig e dê enter. O ip da máquina será apresentado junto com outras informações.

Falou pessoal.


Fazendo consultas em um banco .mdf usando C#.

Dezembro 4, 2007

Bom dia Pessoal.

 Abaixo temos um código em C# para fazer uma simples consulta em um banco .mdf e retornar um Datatable.

//string de conexão com o banco .mdf 
public const string _conect  = @”Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Banco.mdf;Integrated Security=True;User Instance=True”;           

//abrindo conexão com o banco
SqlConnection conn = new SqlConnection(_conect);
conn.Open(); 

//criando o select e o objeto de consulta
string sql = “select * from cliente”;
SqlCommand cmd = new SqlCommand(sql, conn);

//Pegando valores e colocando no DataTable 
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adapter.Fill(ds);
DataTable dados = ds.Tables[0];
return dados;

 Valeu moçada.


Funções SQL

Dezembro 4, 2007

Fala pessoal. Abaixo segue as principais funções que servem tanto para Sql Server tanto para Oracle.

Funções de valores simples:

ABS(n)= Devolve o valor absoluto de (n).
CEIL(n)=Obtém o valor inteiro imediatamente superior ou igual a “n”.
FLOOT(n) = Devolve o valor inteiro imediatamente inferior ou igual a “n”.
MOD (m, n)= Devolve o resto resultante de dividir “m” entre “n”.
NVL (valor, expressão)= Substitui um valor nulo por outro valor.
POWER (m, exponente)= Calcula a potência de um número.
ROUND (numero [, m])= Arredonda números com o número de dígitos de precisão indicados.
SIGN (valor)= Indica o signo do “valor”.
SQRT(n)= Devolve a raiz quadrada de “n”.
TRUNC (numero, [m])= Trunca números para que tenham uma certa quantidade de dígitos de precisão.
VAIRANCE (valor)= Devolve a média de um conjunto de valores.

Funções de grupos de valores:

AVG(n)= Calcula o valor médio de “n” ignorando os valores nulos.
COUNT (* | Expressão)= Conta o número de vezes que a expressão avalia algum dado com valor não nulo. A opção “*” conta todas as filas selecionadas.
MAX (expressão)= Calcula o máximo.
MIN (expressão)= Calcula o mínimo.
SUM (expressão)= Obtém a soma dos valores da expressão.
GREATEST (valor1, valor2…)= Obtém o maior valor da lista.
LEAST (valor1, valor2…)= Obtém o menor valor da lista.

Funções que devolvem valores de caracteres:

CHR(n) = Devolve o caractere cujo valor em binário é equivalente a “n”.
CONCAT (cad1, cad2)= Devolve “cad1″ concatenada com “cad2″.
LOWER (cad)= Devolve a cadeia “cad” em minúsculas.
UPPER (cad)= Devolve a cadeia “cad” em maiúsculas.
INITCAP (cad)= Converte a cadeia “cad” a tipo título.
LPAD (cad1, n[,cad2])= Adiciona caracteres à esquerda da cadeia até que tenha uma certa longitude.
RPAD (cad1, n[,cad2])= Adiciona caracteres à direita até que tenha uma certa longitude.
LTRIM (cad [,set])= Suprime um conjunto de caracteres à esquerda da cadeia.
RTRIM (cad [,set])= Suprime um conjunto de caracteres à direita da cadeia.
REPLACE (cad, cadeia_busca [, cadeia_substitucao])= Substitui um caractere ou caracteres de uma cadeia com 0 ou mais caracteres.
SUBSTR (cad, m [,n])= Obtém parte de uma cadeia.
TRANSLATE (cad1, cad2, cad3)= Converte caracteres de uma cadeia em caracteres diferentes, segundo um plano de substituição marcado pelo usuário.

Funções que devolvem valores numéricos:

ASCII(cad)= Devolve o valor ASCII da primeira letra da cadeia “cad”.
INSTR (cad1, cad2 [, comeco [,m]])= Permite uma busca de um conjunto de caracteres em uma cadeia, mas não suprime nenhum caractere depois.
LENGTH (cad)= Devolve o número de caracteres de cad.

Funções para o manejo de datas:

SYSDATE= Devolve a data do sistema.
ADD_MONTHS (data, n)= Devolve a data “data” incrementada em “n” meses.
LASTDAY (data)= Devolve a data do último dia do mês que contém “data”.
MONTHS_BETWEEN (data1, data2)= Devolve a diferença em meses entre as datas “data1″ e “data2″.
NEXT_DAY (data, cad)= Devolve a data do primeiro dia da semana indicado por “cad” depois da data indicada por “data”.

Funções de conversão:

TO_CHAR= Transforma um tipo DATE ou NUMBER em uma cadeia de caracteres.
TO_DATE= Transforma um tipo NUMBER ou CHAR em DATE.
TO_NUMBER= Transforma uma cadeia de caracteres em NUMBER. 
 

Via: http://www.criarweb.com/artigos/756.php


Formato de Data no SqlServer

Outubro 9, 2007

Uma dúvida frequente é como obter data em formato dd/MM/yyyy do SqlServer. Por padrão, o consulta traz dd/MM/yyyy HH:mm:ss.

Usando essa consulta:

select convert(char(10), Data, 103) from tabela
você consegue esse resultado.

Temos ainda:

select convert(char(10), Data, 101) from tabela |||| => MM/dd/yyyy
select convert(char(10), Data, 102) from tabela |||| => yyyy.MM.dd
select convert(char(10), Data, 103) from tabela |||| => dd/MM/yyyy
select convert(char(10), Data, 104) from tabela |||| => dd.MM.yyyy
select convert(char(10), Data, 105) from tabela |||| => dd-MM-yyyy

e por ae vai…


Economize aspxs. Use MultiView.

Outubro 9, 2007

O Multiview é um novo componente que chegou na versão 2.0 do Asp.Net. Ele contém Views, blocos de conteúdo, que são apresentados um de cada vez. O bacana do Multiview é que ele renderiza apenas o html do View que está em foco, otimizando processamento e banda do servidor.

 O uso de Multiview é interessante para:

   - Alternar entre conteúdos de formulário e Grids,
   - Quebrar formulários muito extenso em parte menores, criando assim um passo-a-passo. 

Para usar é simples, insira esse codigo no seu aspx:

<asp:MultiView ID=”palco” runat=”server” ActiveViewIndex=”0″>
       <asp:View ID=”cenario1″ runat=”server”>
              Conteudo 1
       </asp:View>
       <asp:View ID=”cenario2″ runat=”server”>
              Conteudo 2
       </asp:View>
</asp:MultiView>
<asp:Button ID=”button” runat=”server” Text=”Mostrar View 2″  OnCommand=”button_OnCommand” />

Observer que o parametro “ActiveViewIndex” define qual View será apresentado por padrão. No caso será o primeiro, o cenario1.

Ao clicar no botão “button” o evento abaixo será disparado:

protected void button_OnCommand(object sender, EventArgs e)
{
     palco.SetActiveView(cenario2);
}

O método “SetActiveView” do objeto Multiview “palco” recebe o objeto View “cenario2″ e o define como ativo. Caso queira voltar a apresentar o conteudo da View cenario1, você deve fazer o mesmo procedimento, apenas alterando a View que será ativa. 

Para saber qual View que está ativo, use o método “GetActiveView” do objeto Multiview “palco”. O metódo retornará o View corrente.

 falow moçada…


116 comandos para o Executar do windows.

Outubro 9, 2007

Eae pessoal,

Uma coisa que eu uso muito é a janela de Executar do windows.

Janela Executar

Eu vivo escrevendo lá: notepad, explorer, cmd, excel e etc. Encontrei na net essa tabela ai em abaixo com um monte de comandos do windows que eu nem conhecia.

Adicionar/Remover Programas  appwiz.cpl 
Certificados  certmgr.msc 
Mapa de Caracteres  charmap 
Check Disk  chkdsk 
Serviço de Indexação  ciadv.msc 
Limpeza de Disco  cleanmgr 
Utilitário de Rede para Clientes do SQL Server  cliconfg 
Visualizador da Área de Transferência  clipbrd 
Linha de Comando  cmd 
Serviços de Componentes  comexp.msc 
Gestão do Computador  compmgmt.msc 
Gestor do Computador  compmgmt.msc 
Ferramentas Administrativas  control admintools 
Propriedades de Vídeo (com a aba Aparência já seleccionada)  control color 
Propriedades de Vídeo  control desktop 
Opções de Pasta  control folders 
Fontes  control fonts 
Propriedades de Teclado  control keyboard 
Propriedades de Rato  control mouse 
Conexões de Rede  control netconnections 
Impressoras e Aparelhos de Fax  control printers 
Tarefas Agendadas  control schedtasks 
Contas de Usuário  control userpasswords2 
Serviços de Componentes  dcomcnfg 
Instalador do Active Directory (somente Windows server)  dcpromo 
Partilhas DDE  ddeshare 
Propriedades de Vídeo  desk.cpl 
Gestor de Dispositivos  devmgmt.msc 
Gestor de Dispositivos  devmgmt.msc 
Desfragmentador de Disco  dfrg.msc 
Painel de Controlo do Direct X (se instalado)  directx.cpl 
Gestão de Discos  diskmgmt.msc 
Gestor de Disco  diskmgmt.msc 
Gestor de Partição  diskpart 
Dr. Watson  drwtsn32 
Ferramenta de Diagnóstico do Direct X  dxdiag 
Editor de Caracteres Particulares  eudcedit 
Visualizador de Eventos  eventvwr.msc 
Visualizador de Eventos  eventvwr.msc 
Findfast  findfast.cpl 
Firewall do Windows  firewall.cpl 
Pasta Fontes  fonts 
Pastas Compartilhadas  fsmgmt.msc 
Pastas Partilhadas  fsmgmt.msc 
Assistente para Transferência de Arquivos Bluetooth  fsquirt 
Group Policy Editor (XP Prof)  gpedit.msc 
Politicas de Grupo  gpedit.msc 
Assistente para Adicionar Hardware  hdwwiz.cpl 
Iexpress Wizard  iexpress 
Propriedades de Internet  inetcpl.cpl 
Opções Regionais e de Idioma  intl.cpl 
Configuração do IP (Exibe informações completas da Configuração da Conexão)  ipconfig /all 
Configuração do IP (Exibe o conteúdo da Cache DNS Resolver)  ipconfig /displaydns 
Configuração do IP (Depura a Cache DNS Resolver)  ipconfig /flushdns 
Configuração do IP (Atualiza todas as concessões DHCP e registra novamente nomes DNS)  ipconfig /registerdns 
Configuração do IP (Libera o endereço IP para o adaptador especificado)  ipconfig /release 
Configuração do IP (Renova o endereço IP para o adaptador especificado)  ipconfig /renew 
Configuração do IP (Modifica a identificação de classe DHCP)  ipconfig /setclassid 
Configuração do IP (Exibe todas as identificações de classe DHCP permitidas para o adaptador)  ipconfig /showclassid 
Controladores de Jogo  joy.cpl 
Logoff do Windows  logoff 
Usuários e Grupos Locais  lusrmgr.msc 
Utilizadores Locais e Grupos  lusrmgr.msc 
Lente de Aumento  magnify 
Propriedades de Rato  main.cpl 
Propriedades de Som e Dispositivos de Áudio  mmsys.cpl 
Utilitário de Configuração do Sistema  msconfig 
Conexão de Área de Trabalho Remota  mstsc 
Conexões de Rede  ncpa.cpl 
Janela das Ligações de Rede  ncpa.cpl 
Assistente para Configuração de Rede  netsetup.cpl 
Armazenamento Removível  ntmsmgr.msc 
Solicitações do Operador de Armazenamento Removível  ntmsoprq.msc 
Contas de Usuário  nusrmgr.cpl 
Administrador de Fonte de Dados ODBC  odbccp32.cpl 
Gestor de Objectos -Pacote  packager 
Password Properties  password.cpl 
Desempenho  perfmon 
Desempenho  perfmon.msc 
Performance Monitor  perfmon.msc 
Propriedades de Opções de Energia  powercfg.cpl 
Pasta Impressoras  printers 
Editor do Registro  regedit 
Editor do Registro  regedit32 
Conjunto de Directivas Resultantes (XP Prof)  rsop.msc 
Resultant Set of Policies  rsop.msc 
Configurações Locais de Segurança  secpol.msc 
Definições locais de segurança  secpol.msc 
Serviços  services.msc 
Serviços  services.msc 
System File Checker (Define o tamanho de cache)  sfc /cachesize=x 
System File Checker (Limpa o cache do arquivo)  sfc /purgecache 
System File Checker (Restaura a pesquisa à configuração padrão)  sfc /revert 
System File Checker (Pesquisa imediatamente todos os APS a cada inicialização)  sfc /scanboot 
System File Checker (Pesquisa imediatamente todos os APS)  sfc /scannow 
Desligar o Windows  shutdown 
Verificação de Assinatura de Arquivo  sigverif 
Scanners e Câmeras  sticpl.cpl 
Propriedades do Sistema  sysdm.cpl 
Editor de Configuração do Sistema  sysedit 
Protegendo Banco de Dados de Contas do Windows XP  syskey 
Gestor de Tarefas  taskmgr 
Gestor de Tarefas  taskmgr 
Opções de Telefone e Modem  telephon.cpl 
Cliente de Telnet  telnet 
Propriedades de Data e Hora  timedate.cpl 
Introdução ao Windows XP  tourstart 
Gestor de Usuários do Wint Server (somente windows2003 server)  usrmgr 
Gestor de Utilitários  utilman 
Gestor de Verificação de controladores  verifier 
Opções de Acessibilidade  verifier 
Bate-Papo  winchat 
Windows Management Infrastructure  wmimgmt.msc 
Central de Segurança do Windows  wscui.cpl 
Actualizações Automáticas  wuaucpl.cpl 
Conectar-se ao Site do Windows Update  wupdmgr 

Flw, ate +.


Seguir

Get every new post delivered to your Inbox.