0

Erro de divisão por zero (Error divide by zero) C#

Posted by Fabio's Blog on 10:49
Erro de divisão por zero é muito comum na nossa área, ainda mais quando temos que fazer importações, ou efetuar cálculo através de dados digitados pelo usuários, abaixo a rotina para não haver esse incoveniente para o usuário ao preencher uma tela do sistema.


int a = 0;
int b = 10;
int c = 0;

try
{
    a = b / c;
}
catch (Exception e)
{
    Console.WriteLine("A run-time error occurred.");
}
finally
{
    Console.ReadLine();
}



Espero que tenha sido útil.

0

Inserir espaços em branco ou zeros para códigos

Posted by Fabio's Blog on 12:55
Muitas vezes precisamos estabelecer em nosso códigos um certo número de casas para um campo, principalmente quando trabalhamos com geração de arquivo texto, muito utilizado para fazer importação de dados entre sistemas, abaixo coloco um código que gera esse tipo de resultado, segue:

// Insere espaços em branco
public string Space(int nx)
{
    string strret = "";
    for (int i = 1; i <= nx; i++)
        strret = strret + " ";

    return strret;
}

// Insere Zeros em uma string
public string Zero(int nx)
{
    string strret = "";
    for (int i = 1; i <= nx; i++)
        strret = strret + "0";

    return strret;
}

E a chamada para concatenar ou simplesmente preencher o campo:

string v_cd_prod = Zero(9 - v_cd_prod.Length);


No exemplo acima a variável v_cd_prod será carregada com 9 zeros.

Espero que tenha sido útil.


1

VERIFICA PERIODO ENTRE DATAS - JAVASCRIPT

Posted by Fabio's Blog on 09:02
Esta função verifica um prazo entre datas na linguagem Javascript:


 // Declara as variáveis
var dtMin, dtMax
var strData, strPrzMin, strPrzMax
var aryData

// captura a data inicial
strDataIni = '<%= mid(now,1,2) & "/" & mid(now,4,2) & "/" & mid(now, 7,4)%>';
// captura a data final - No exemplo utilizaei um TextBox para digitar esta data
strDataFim = document.Form1.txtDataVencimento.value;
// Estipulo aqui um prazo mínimo
strPrzMin = 30;
// Estipulo aqui um prazo máximo
strPrzMax = 180;

// Efetua aqui o cálculo da diferença entre as datas inicial e final
var fim = new Date(strDataFim.split('/')[2], strDataFim.split('/')[1], strDataFim.split('/')[0]);
var inicial= new Date(strDataIni.split('/')[2], strDataIni.split('/')[1], strDataIni.split('/')[0]);
diferenca = ((Date.UTC((fim.getYear()),fim.getMonth(),fim.getDate(),0,0,0)-Date.UTC((inicial.getYear()),inicial.getMonth(),inicial.getDate(),0,0,0)) / 1000 / 60 / 60/ 24) -1;

// Verifico a diferença entre o prazo mínimo e máximo
if (diferenca < strPrzMin)
{
    alert('O prazo mínimo para a Data de Vencimento é de 30 Dias');
    document.Form1.txtDataVencimento.focus();
    return;
}

if (diferenca > strPrzMax)
{
    alert('O prazo máximo para a Data de Vencimento é de 180 Dias');
    document.Form1.txtDataVencimento.focus();
    return;
}

Espero que tenha sido útil.

0

SQL Server. Habilitando SQL Authentication e o usuário 'sa'

Posted by Fabio's Blog on 15:24
Um problema comum quando se utiliza o SQL Server é quando não é possível entrar com usuários SQL Server, exemplo o super usuário “sa”, pois durante a instalação foi configurado para Windows Authentication.
Como mencionado em um post no Fórum do MSDN: “Criei a instância, criei senha para meu login, mais quando vou entrar pela autenticação do SQL SERVER, ele dá erro, já pela da autenticação do Windows ele dá certo…”
Visto que não é possível ficar reinstalando o SQL Server, somente para trocar a autenticação de Windows Authentication para “Mixed” Authentication, segue neste post a solução para este problema.
Primeiramente é necessário entrar no SQL Server utilizando o SQL Server Management Studio. Conforme a figura abaixo, estou conectando em uma instância do SQL Server 2008 Express utilizando a autenticação Windows Authentication, mas este exemplo funciona perfeitamente no SQL Server 2005 e nas edições superiores.


Após conectar, clicando com o botão direito do mouse sobre a instância do SQL Server na janela Object Explorer (Atalho F8 ou Menu “View\Object Explorer”), item Properties.

Nesta nova janela, na aba (“página”) Security, altere “Server authentication” para “SQL Server and Windows Authentication mode”.

Feito isso, uma janelinha informará que para esta alteração ter efeito, será necessário que o serviço do SQL Server deve ser reiniciado. Mas isso pode ser feito depois, quando for terminada a configuração dos usuários do SQL Server, então deixe para depois.


Continuando na janela Object Explorer, expandindo a instância, “folder” Security\Logins, pode ser criado novos usuários do SQL Server ou seguindo o objetivo inicial deste tópico, habilitar o usuário “sa”.
Conforme a figura abaixo, botão direito sobre o login “sa”, menu Properties.


Na nova janela, altere o password do usuário, também é possível alterar o “idioma” e o banco de dados padrão deste usuário nesta janela, entre outras funcionalidades.



Na aba (“página”) Status, clique na opção “Grant” em “Permission to connect to database engine” e “Enable” em “Login”.



Outra maneira pratica de habilitar o usuário “sa” é por meio de script, exemplo:

ALTER LOGIN sa ENABLE;

GO

ALTER LOGIN sa WITH PASSWORD = 'P@ssw0rdM0del0';

GO

Então, agora resta reiniciar o SQL Server. Para não ter que entrar nos Serviços do Windows ou SQL Server Configuration Manager ou qualquer variante como arquivos .bat ou SQL Server Surface Area.

Uma dica é clicar com o botão direito na instância do SQL Server na janela Object Explorer e “Restart”.


Clique em Yes nesta próxima janelinha, para dizer que você TEM CERTEZA QUE QUER REINICIAR O SERVIÇO…



Agora é só conectar com o usuário “sa” para testar.







Espero que tenha sido útil.

0

Waitfor Delay, waitfor time SQL Server

Posted by Fabio's Blog on 14:36
Quando temos problemas de performance com algumas aplicações a maior dificuldade é fazermos acontecer o erro em nosso ambiente.
 
O comando waitfor do SQL Server é muito útil para este tipo de teste, pois utilizamos o waitfor delay ou o waitfor time na procedure e efetuamos o teste de timeout, etc.

Abaixo o comando:


-- Utilizado para esperar pelo tempo passado como parâmetro
-- No exemplo abaixo ele passa pelo waitfor depois de 5 segundos
waitfor delay '00:00:05'

-- Utilizado para esperar até que a hora seja alcançada
-- No exemplo abaixo ele passa pelo waitfor as quatorze horas e trinta e oito minutos
waitfor time '14:38'

Espero que tenha sido útil.

0

Métodos IndexOf e IndexOfAny de uma string

Posted by Fabio's Blog on 09:23
Esses métodos são muito úteis quando precisamos procurar um ou vários caracteres dentro de uma string, por exemplo, em uma string você têm que saber se existe o número 1, você usa o IndexOf para fazer esta verificação, e o retorno será a posição do primeiro caracter que o método encontrar.

Segue o exemplo do IndexOf.

string v_str = "www.fabiorente.blogspot.com";
if (v_str.IndexOf('.') > -1)
{
// Caracter '.' encontrado
}
else
{
// Caracter '.' não encontrado
}

Segue o exemplo do IndexOfAny.

string v_str = "www.fabiorente.blogspot.com";
char[] chars = { '0', '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' };
if (v_str.IndexOfAny(chars) > -1)
{
// Existe Número
}
else
{
// Não Existe Número
}

Espero que tenha sido útil.

2

Abrindo uma aplicação e passando parâmetros cm C# - Windows Forms

Posted by Fabio's Blog on 12:44
Dica para quando existe a necessidade de abrir uma aplicação pelo c# e passar os parâmetros necessários para esta aplicação.

Utilização das Classes Process e ProcessStartInfo.

        

Process p = new Process();
p.EnableRaisingEvents = false;
p.StartInfo.WorkingDirectory = @"C:\Program Files\";
p.StartInfo.CreateNoWindow = false;
p.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
ProcessStartInfo startInfo = new ProcessStartInfo(@"C:\Program Files\Calc.exe", @"C:\Program Files\ww.txt");
System.Diagnostics.Process.Start(startInfo);

Espero que tenha sido útil.

0

Data Inicial e Final de uma semana a partir da data atual

Posted by Fabio's Blog on 08:37
Dica de SQL para calcular a Data Inicial e Final de uma semana a partir da data atual.

--inicial
select convert(varchar,year(convert(varchar,getdate()-(datepart(dw,getdate())-1),20))) + '-' + right('00'+convert(varchar,month(convert(varchar,getdate()-(datepart(dw,getdate())-1),20))),2) + '-' + right('00'+convert(varchar,day(convert(varchar,getdate()-(datepart(dw,getdate())-1),20))),2) + '-' + ' 00:00'
--final
select convert(varchar,year( convert(varchar,getdate()+7-atepart(dw,getdate())),20))) + '-' +right('00'+convert(varchar,month( convert(varchar,getdate()+(7-datepart(dw,getdate())),20))),2) + '-' + right('00'+convert(varchar,day( convert(varchar,getdate()+(7-datepart(dw,getdate())),20))),2) + '-' + ' 23:59'

Espero que tenha sido útil.

0

Definindo valores para uma coluna Identity

Posted by Fabio's Blog on 10:17

Frequentemente tenho que fazer carregamento de dados para fazer testes ou alguma alteração no sistema, e carregamos dados próximos os dados de produção, ai encontramos tabelas com coluna de IDENTITY e nos deparamos com o erro abaixo:


Msg 544, Level 16, State 1, Line 1
Cannot insert explicit value for identity column in table 'TB_AGRI_CART_CLIE_STAT' when IDENTITY_INSERT is set to OFF.

Este erro ocorre por causa da coluna identity, não podemos especificar um valor para esta coluna, quem especifica é o próprio SQL, mas, para este caso podemos utilizar o comando IDENTITY_INSERT que "libera" a inclusão de dados para esta coluna. Segue abaixo:


O comando Identity_Insert

A solução é bem simples. Quando você precisar inserir alguma linha e forçar o valor da coluna Identity, utilize os comandos:

Antes de inserir, execute o comando:

SET IDENTITY_INSERT nome_da_tabela ON

 

Depois de inserido, retorne o autoidentity novamente:

SET IDENTITY_INSERT nome_da_tabela OFF

Um exemplo prático

Copie todo o conteúdo do código abaixo, no Query Analyzer e execute instrução por instrução para entender o funcionamento. Para evitar a necessidade de criar uma nova tabela em algum banco de dados, note que fiz uso de uma tabela temporária para o exemplo. 

Exemplo

-- O simbolo # antes do nome da tabela, indica que ela é uma Tabela Temporária

create table #testing
(
ID int not null IDENTITY, -- Coluna do tipo Identity
nome varchar(20) null
)

-- Insira algumas linhas apenas para teste:
-- Note que a coluna ID não são informadas, mesmo que Not Null.

-- Isso porque a diretiva IDENTITY se encarrega de preencher o valor
Insert #testing values ('Fábio')
Insert #testing values ('Luiz')

-- Veja os valores na tabela:
Select * from #testing

-- Tente inserir um valor de Identity:
Insert #testing (ID, nome) values (10, 'Moroni') -- Retorna Erro...

-- Execute o comando IDENTITY_INSERT ON:
Set IDENTITY_INSERT #testing ON

-- Agora tente inserir novamente:
Insert #testing (ID, nome) values (10, 'Moroni') -- Sem Erro...

-- Veja agora os valores na tabela (inclusive o último item):
Select * from #testing

-- Execute o comando IDENTITY_INSERT OFF:
Set IDENTITY_INSERT #testing OFF

-- Agora tente inserir novamente um valor na coluna ID:
Insert #testing (ID, nome) values (20, 'Moroni') -- Retorna Erro...

-- Vamos excluir a tabela criada
drop table #testing

Conclusão

Este recurso é muito útil em determinadas situações (normalmente quando dados precisam ser corrigidos no banco de dados), porém não deve de maneira nenhuma ser utilizado em um processo de produção. Faça uso deste recurso como uma ferramenta de desenvolvimento.


Espero que tenha sido útil.

0

Formatação de Datas em SQL Server

Posted by Fabio's Blog on 14:45
Formatação de Datas em SQL Server.

Segue abaixo:

SELECT CONVERT(VARCHAR(12),GETDATE(),101) AS '101',
CONVERT(VARCHAR(12),GETDATE(),102) AS '102',
CONVERT(VARCHAR(12),GETDATE(),103) AS '103',
CONVERT(VARCHAR(12),GETDATE(),104) AS '104',
CONVERT(VARCHAR(12),GETDATE(),105) AS '105',
CONVERT(VARCHAR(12),GETDATE(),106) AS '106',
CONVERT(VARCHAR(12),GETDATE(),107) AS '107',
CONVERT(VARCHAR(12),GETDATE(),108) AS '108',
CONVERT(VARCHAR(12),GETDATE(),109) AS '109',
CONVERT(VARCHAR(12),GETDATE(),110) AS '110',
CONVERT(VARCHAR(12),GETDATE(),111) AS '111',
CONVERT(VARCHAR(12),GETDATE(),112) AS '112',
CONVERT(VARCHAR(12),GETDATE(),113) AS '113',
CONVERT(VARCHAR(12),GETDATE(),114) AS '114',
CONVERT(VARCHAR(12),GETDATE(),120) AS '120',
CONVERT(VARCHAR(12),GETDATE(),121) AS '121'

Espero que tenha sido útil.

0

Usando javascript para percorrer Repeater

Posted by Fabio's Blog on 08:50
Precisava de uma função em javascript para percorrer um repeater, neste repeater têm caixas de texto, precisava verificar todas e mostrar uma mensagem ao usuário, segue abaixo a função, chamei-a no botão da seguinte maneira.

btn.OnClientClick = "return GetAllTextBox();";

E a função:

function GetAllCheckBox()
{
var count = 0;
var inputs = document.getElementsByTagName('input');
for(var i = 0; i < inputs.length; i++)
{
if(inputs[i].type == 'text' && inputs[i].name.indexOf('tbx_id') != -1)
{
if(inputs[i].checked == true)
{
count++;
break;
}
}
}

if(count == 0)
return false;
return true;
}


Desta maneira se não retornar true ao nosso botão, não é chamado o código do code-behind, e não efetuará o postback.

Espero que tenha sido útil.

0

ComboBox - C#

Posted by Fabio's Blog on 20:06
Controles que utilizaremos: DropDownList, RequiredFieldValidator, Button, Label e ValidationSummary.

Estarei neste post mostrando como criar um combobox em C#, para o meu projeto darei o nome de ComboBox e a página ASPX de Default.aspx.
Vamos utilizar as principais propriedades
destes controles para fazer as validações necessárias.

Primeiro vamos criar o combo na nossa página ASPX, utilizaremos muito código HTML, por isso você têm que ter um bom nível de conhecimento nessa linguagem.

Segue abaixo o código da página ASPX.



<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ComboBox._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title>ComboBox</title>

</head>

<body>
<form id="form1" runat="server">
<asp: ScriptManager ID="ScriptManager1" runat="server" />
<div>

<asp:DropDownList id="cbo_mes" runat="server" Width="150"></asp:DropDownList>

<asp:RequiredFieldValidator id="vld_rqd_cbo_mes" runat="server" Display="Dynamic" ControlToValidate="cbo_mes" SetFocusOnError="true">

<IMG id="img_cbo_mes" src="../_imagens/validator.gif" style="cursor: help;" runat="server" />

</asp:RequiredFieldValidator>

<asp:Button ID="btn_sele" runat="server" Text="Selecionar" CausesValidation="true" />
<asp:Label ID="lbl_mes" runat="server"></asp:Label>

</div>

<asp:ValidationSummary ID="vld_sum" runat="server" EnableViewState="False" HeaderText="Atenção:" ShowMessageBox="True" ShowSummary="False" />

</form>

</body>

</html>


Vamos as explicações das principais propriedades:

    As propriedade id e runat serão utilizadas em todos os controles de nossa aplicação
        Propriedade id - Especifica o nome do controle.
        Propriedade runat - Especifica que este controle deve ser tratado do lado servidor.

    Controle asp
:DropDownList - Este é o controle combo box, com ele podemos oferecer ao usuário uma lista de dados, para o usuário fazer o selecionamento de apenas um.   
Propriedade Width - Especifica o tamanho do controle no navegador.

    Controle asp:RequiredFieldValidator - Controle de validação, como ele podemos validar um controle sem ser necessário a inclusão de uma função javascript.
Propriedade Display - Especifica o modo como será tratado o erro.Statico, Dinâmico ou nenhum.
Propriedade ControlToValidate - Especifica o controle que será validado.
Propriedade SetFocusOnError - Propriedade se setada true, depois do erro é setado o foco no controle que está sendo validado.

    Controle IMG - Este controle HTML está dentro da tag do controle asp:RequiredFieldValidator, toda vez que ocorre o erro da validação é mostrado esta imagem.
Propriedade src - Especifica a imagem que será mostrada.
Propriedade style - Estilo que mostra a imagem de interrogação quando passar o mouse.

    Controle asp:Button - Controle que fará a ação para ser processado a validação do nosso combo.
Propriedade Text - Especifica o texto que aparecerá no botão
Propriedade CausesValidation - Especifica se o botão fará a validação dos controle na tela. Se estiver com o valor false não será feito nenhuma validação na tela.

    Controle asp:Label - Controle que será mostrado o valor selecionado no combo quando precionarmos o botão.


    Controle asp:ValidationSummary - Controle que faz a validação e mostra no erro a janela em javascript.
Propriedade EnableViewState - Habilita o ViewState do controle na página ou não.
Propriedade HeaderText - Especifica o título da janela para os campos requeridos.
Propriedade ShowMessageBox - Especifica se o controle mostrará a janela ao ocorrer o erro ou não.
Propriedade ShowSummary - Especifica se o erro será mostrado como sumário ao usuário.

    Aqui é o final da criação da nossa página aspx, o próximo passo será feito em nosso code behind.

    Abaixo como deverá ficar o código.

    

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

 

namespace ComboBox

{

    public partial class _Default : System.Web.UI.Page

    {

 

        #region Métodos da página

 

        /// <summary>

        /// Page load da página

        /// </summary>

        protected void Page_Load(object sender, EventArgs e)

        {

            if (!IsPostBack)

            {

                this.CarregarCombo();

            }

 

            this.btn_sele.Click += new EventHandler(btn_sele_Click);

 

        }

 

        #endregion Métodos da página

 

        #region Métodos dos controles

 

        /// <summary>

        /// Método do clique do botão

        /// </summary>

        void btn_sele_Click(object sender, EventArgs e)

        {

            this.lbl_mes.Text = this.cbo_mes.SelectedItem.Text;

        }

 

        #endregion Métodos dos controles

 

        #region Métodos

 

        /// <summary>

        /// Função para carregar o combo

        /// </summary>

        private void CarregarCombo()

        {

            // Limpa todos os itens do combo

            this.cbo_mes.Items.Clear();

            // Insere os dados no combo box

            this.cbo_mes.Items.Add(new ListItem("-- Selecione --", ""));

            this.cbo_mes.Items.Add(new ListItem("Janeiro", "1"));

            this.cbo_mes.Items.Add(new ListItem("Fevereiro", "2"));

            this.cbo_mes.Items.Add(new ListItem("Março", "3"));

            this.cbo_mes.Items.Add(new ListItem("Abril", "4"));

            this.cbo_mes.Items.Add(new ListItem("Maio", "5"));

            this.cbo_mes.Items.Add(new ListItem("Junho", "6"));

            this.cbo_mes.Items.Add(new ListItem("Julho", "7"));

            this.cbo_mes.Items.Add(new ListItem("Agosto", "8"));

            this.cbo_mes.Items.Add(new ListItem("Setembro", "9"));

            this.cbo_mes.Items.Add(new ListItem("Outubro", "10"));

            this.cbo_mes.Items.Add(new ListItem("Novembro", "11"));

            this.cbo_mes.Items.Add(new ListItem("Dezembro", "12"));

            this.cbo_mes.SelectedIndex = 0;

        }

 

        #endregion Métodos

 

    }

}



    Abaixo uma imagem de como ficará a tela ao emitir o erro da validação.



    Abaixo um exemplo de como ficará ao passar a validação e carregar o item selecionado no nosso label.


    O código fonte deste exemplo você baixa aqui (Você deve estar logado ao Google).


Espero que tenha sido útil.


0

SQL Server - Efetua a pesquisa dentro das procedures

Posted by Fabio's Blog on 08:19
Select que percorre todas as procs e procurando no text da proc o que você passar como parâmetro.

select
       t2.*
from
        syscomments   t1
        inner join
            sysobjects  t2
        on
            t2.
id    = t1.id
where
    t1.text          like '%String a ser procurada nas procs%'


Espero que seja útil para alguém.

0

Função SQL - FU_FRMT_VALR - Formata valores decimais

Posted by Fabio's Blog on 09:45

Função SQL para formatar valores decimais e não ser preciso formatar na aplicação.



CREATE FUNCTION dbo.FU_FRMT_VALR(@valor decimal(20,2))

returns varchar(30)

as

begin

declare

@valor_char            varchar(30)

,@valor_decm            varchar(30)

,@valor_work            varchar(30)

,@valor_retn            varchar(30)


      select      @valor_char = replace(convert(varchar,@valor),'.',',')

      select      @valor_decm = substring(@valor_char,charindex(',',@valor_char),3)

      select      @valor_char = substring(@valor_char,1,charindex(',',@valor_char)-1)

 

      select @valor_work = ''

      select @valor_retn = ''

      while len(@valor_char) > 3

      begin

            select @valor_work = '.' + right(@valor_char,3)

            select @valor_char = substring(@valor_char,1,len(@valor_char)-3)

            select @valor_retn = @valor_work + @valor_retn

      end

 

      select @valor_retn = @valor_char + @valor_retn + @valor_decm

       return @valor_retn

end

GO

SET QUOTED_IDENTIFIER OFF

GO

SET ANSI_NULLS ON

GO


Espero que tenha sido útil.

0

Exemplo de DataReader

Posted by Fabio's Blog on 21:16
Abaixo um exemplo do uso do DataReader, para carregarmos os campos com os valores na nossa base de dados estou postando este exemplo. Os cometários estão explicando linha a linha.

Exemplo de DataReader

//Conexão com Banco de dados

OleDbConnection conn = new OleDbConnection(stringdeconexao);

conn.Open();


//Comando de SELECT

OleDbCommand cmd = new OleDbCommand("Select * from tb_fornecedor", conn);


//Execução

OleDbDataReader dr = cmd.ExecuteReader();

 

// Aqui é o loop do DataReader

while (dr.Read())

{

    // dr[" é o DataReader com o nome do campo no select

    mnuFornecedor.Items[0].ChildItems.Add(new MenuItem(dr["nome"].ToString(), dr["valor"].ToString(), null, dr["navigateurl"].ToString()));

}


Espero que seja útil para alguém.

0

Função SQL - FN_FRMT_INTE - Formata valores inteiros

Posted by Fabio's Blog on 15:05
Função SQL utilizada para formatar valores inteiros, muito utilizado para mostrar em um campo ou em um grid para o usuário trazendo no SELECT o valor já formatado, sem ser preciso fazer isso na aplicação.

CREATE FUNCTION dbo.FN_FRMT_INTE(@valor decimal(20,0))
returns varchar(30)
as
begin
declare
@valor_char            varchar(30)
,@valor_decm            varchar(30)
,@valor_work            varchar(30)
,@valor_retn            varchar(30)


     select      @valor_char = replace(convert(varchar,@valor),'.',',')

     select @valor_work = ''
     select @valor_retn = ''
     while len(@valor_char) > 3
     begin
           select @valor_work = '.' + right(@valor_char,3)
           select @valor_char = substring(@valor_char,1,len(@valor_char)-3)
           select @valor_retn = @valor_work + @valor_retn
     end -- while

     select @valor_retn = @valor_char + @valor_retn

     return @valor_retn
end
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

Espero mesmo que seja útil para alguém.

0

Error Divide by Zero

Posted by Fabio's Blog on 11:11
Erro SQL - Error Divide by Zero

Algumas vezes nos deparamos com alguns erros "chatos" no nosso dia-a-dia, esse erro ocorre quando em nossos SELECTs ou em nossos cursores tentamos dividir um número por 0.

Podemos utilizar um case para cada divisão e assim quando vier o valor 0 alteramos para 1, mas isso consome nossa produtividade, um dos jeitos de não nos deparamos mais com esse erro é como mostrarei abaixo:

Coloque esse código no inicio da procedure

SET ANSI_WARNINGS OFF
SET ARITHABORT OFF
SET ARITHIGNORE ON

E voltar a configuração do SQL no final da procedure

SET ANSI_WARNINGS ON
SET ARITHABORT ON
SET ARITHIGNORE OFF

Esses comandos farão o SQL ignorar tal fato.


Espero que seja útil para alguém.

0

Função SQL - fn_Split

Posted by Fabio's Blog on 00:11

Função muito utilizada para você criar uma tabela de uma string e inserir dados em massa na base de dados consumindo assim mais o banco do que a aplicação.


Exemplo:

    Tenho uma string "fabio|rente|blog|" e mando para o banco para inserir em uma tabela esses valores.

    Esta função criará uma tabela como abaixo:


        Valor    |    Texto

        -----------------

        1         |    fabio

        2         |    rente

        3         |    blog


    Próximo passo é só fazer a inclusão na tabela.


    Segue abaixo a função para o SQL Server.



DROP  FUNCTION fn_Splitco do que


SET QUOTED_IDENTIFIER OFF

GO

SET ANSI_NULLS OFF

GO

 

CREATE  FUNCTION fn_Split(@text varchar(8000), @delimiter varchar(20) = ' ')

RETURNS @Strings TABLE

(   

  position int IDENTITY PRIMARY KEY,

  value varchar(8000)  

)

AS

BEGIN

 

DECLARE @index int

SET @index = -1

 

WHILE (LEN(@text) > 0)

  BEGIN 

    SET @index = CHARINDEX(@delimiter , @text) 

    IF (@index = 0) AND (LEN(@text) > 0) 

      BEGIN  

        INSERT INTO @Strings VALUES (@text)

          BREAK 

      END 

    IF (@index > 1) 

      BEGIN  

        INSERT INTO @Strings VALUES (LEFT(@text, @index - 1))  

        SET @text = RIGHT(@text, (LEN(@text) - @index)) 

      END 

    ELSE

      SET @text = RIGHT(@text, (LEN(@text) - @index))

    END

  RETURN

END

 

GO

 

SET QUOTED_IDENTIFIER OFF

GO

 

SET ANSI_NULLS ON

GO



Espero que tenham gostado.

0

DataList - Visão Geral

Posted by Fabio's Blog on 16:57

DataList - Visão Geral

 

O controle de DataList é fortemente usado para a exibição de dados em uma lista repetida, como por exemplo uma tabela com a lista de produtos mais vendidos ou ainda com os produtos em destaque. Este controle suporta ainda selecionar e editar seus registros. O conteúdo e a disposição dos registros na lista em um controle DataList são definidos usando Templates. No mínimo, cada DataList deve definir um ItemTemplate, entretanto, diversos Templates opcionais podem ser usados customizando ainda mais a aparência da lista.

A tabela 1  descreve os Templates existentes para este controle.

 

Template Name

Descrição

ItemTemplate

Define o conteúdo e o layout dos itens dentro da lista. Requerido.

AlternatingItemTemplate

Se usado, determina o conteúdo e o layout dos itens alternados. Se não for definido, os valores de ItemTemplate são mantidos em toda a lista.

SeparatorTemplate

Se definido, é renderizado entre os itens e os itens alternados. Se não for definido, o separador não será renderizado.

SelectedItemTemplate

Determina o conteúdo e o layout do item selecionado.

EditItemTemplate

Determina o conteúdo e o layout do conteúdo em Edição.

HeaderTemplate

Determina o conteúdo e o layout do cabeçalho da lista.

FooterTemplate

Determina o conteúdo e o layout do rodapé (Footer) da lista

Tabela 1 – Templates do controle DataList

 

 

Os Templates definem os elementos e os controles HTML que devem ser exibidos para um registro. As formatações de cores, fontes etc. podem ser ajustadas através estilos. Cada Template tem suas próprias propriedades de estilo. Por exemplo, os estilos para o EditItemTemplate são ajustados através da propriedade de EditItemStyle.

 

Uma outra propriedade que devemos salientar é a RepeatLayout. Esta propriedade muda completamente a renderização do controle DataList. Um controle DataList exibe por default uma tabela com uma coluna simples na vertical. Mudar a propriedade RepeatLayout para Flow vai remover toda a estrutura Table para o HTML gerado ao renderizar a página.

 

DataList suporta render direcional através da propriedade RepeatDirection, modifica-la permitirá renderizar seus registros horizontalmente ou verticalmente. O controle DataList permite ao desenvolvedor controlar o número das “colunas” que são renderizadas pela propriedade RepeatColumns, não importando se os registros estão renderizados horizontalmente ou verticalmente.

 

Se RepeatDirection for horizontal e RepeatColumns for definido em 5 (cinco), os itens serão renderizados em cinco colunas, cada coluna igual no comprimento e também no total de itens dispostos na horizontal, quando possível. Tabela 2.

 

1

2

3

4

5

6

7

8

9

10

11

12

13

 

 

Tabela 2 – RepeatDirection=Horizontal / RepeatColumns=5

 

 

Se RepeatDirection for vertical e RepeatColumns for definido em 5 (cinco), os itens serão renderizados em cinco colunas, cada coluna igual no comprimento e o total de itens será dividido por cinco e organizados na vertical. Tabela 3.

 

1

4

7

10

12

2

5

8

11

13

3

6

9

 

 

Tabela 2 – RepeatDirection=Vertical / RepeatColumns=5

 

O Código abaixo ilustra um exemplo simples que exibe um DataList com suas propriedades RepeatDirection, RepeatLayout e RepeatColumns, sendo possível alterá-las dinamicamente.

 

<%@ Page Language="C#" %>

<%@ Import Namespace="System.Data" %>

 

<html>

 

<script language = "C#" runat="server">

 

    ICollection CreateDataSource() {

        DataTable dt = new DataTable();

        DataRow dr;

 

        dt.Columns.Add(new DataColumn("ValorString", typeof(string)));

 

        for (int i = 0; i < 10; i++) {

            dr = dt.NewRow();

            dr[0] = "Item " + i.ToString();

            dt.Rows.Add(dr);

        }

 

        DataView dv = new DataView(dt);

        return dv;

    }

 

    void Page_Load(Object Sender, EventArgs E) {

        if (!IsPostBack) {

            DataList1.DataSource = CreateDataSource();

            DataList1.DataBind();

        }

    }

 

    void Button1_Click(Object Sender, EventArgs E) {

 

        if (DropDown1.SelectedIndex == 0)

            DataList1.RepeatDirection = RepeatDirection.Horizontal;

        else

            DataList1.RepeatDirection = RepeatDirection.Vertical;

        if (DropDown2.SelectedIndex == 0)

            DataList1.RepeatLayout = RepeatLayout.Table;

        else

            DataList1.RepeatLayout = RepeatLayout.Flow;

        DataList1.RepeatColumns=DropDown3.SelectedIndex+1;

 

        if ((Check1.Checked ==true) && (DataList1.RepeatLayout == RepeatLayout.Table)) {

            DataList1.BorderWidth = Unit.Pixel(1);

            DataList1.GridLines = GridLines.Both;

        }

        else  {

            DataList1.BorderWidth = Unit.Pixel(0);

            DataList1.GridLines = GridLines.None;

        }

    }

 

</script> 

<body>
    <h3><font face="Verdana">Exemplo de DataList Simples</font></h3>
     <form id="Form1" runat="server">
    <font face="Verdana" size="-1">
        <asp:DataList id="DataList1" runat="server"
            BorderColor="black"
            CellPadding="3"
            Font-Names="Verdana"
            Font-Size="8pt"
            HeaderStyle-BackColor="#aaaadd"
            AlternatingItemStyle-BackColor="Gainsboro"
            >

              <HeaderTemplate>

                ITENS...

              </HeaderTemplate>

              <ItemTemplate>

                <%# DataBinder.Eval(Container.DataItem, "ValorString") %>

              </ItemTemplate>

        </asp:DataList>

 

        <br /><br />

        <hr noshade align="left" width="300px">

        RepeatDirection:

        <asp:DropDownList id=DropDown1 runat="server">

            <asp:ListItem>Horizontal</asp:ListItem>

            <asp:ListItem>Vertical</asp:ListItem>

        </asp:DropDownList><br>

 

        RepeatLayout:

        <asp:DropDownList id=DropDown2 runat="server">

            <asp:ListItem>Table</asp:ListItem>

            <asp:ListItem>Flow</asp:ListItem>

        </asp:DropDownList><br>

 

        RepeatColumns:

        <asp:DropDownList id=DropDown3 runat="server">

            <asp:ListItem>1</asp:ListItem>

            <asp:ListItem>2</asp:ListItem>

            <asp:ListItem>3</asp:ListItem>

            <asp:ListItem>4</asp:ListItem>

            <asp:ListItem>5</asp:ListItem>

        </asp:DropDownList><br>

 

        Exibir Bordas:

        <asp:CheckBox id=Check1 runat="server" /><p>

        <asp:LinkButton id=Button1 Text="Atualiza DataList" OnClick="Button1_Click" runat="server"/>

    </font>

    </form>

 

</body>

</html>

 

Selecionando Itens em um DataLis (SelectItemTemplate)

 

Você pode customizar o conteúdo e a aparência do item selecionado através da propriedade SelectedItemTemplate. O SelectedItemTemplate é controlado pela propriedade SelectedIndex. Por padrão o valor de SelectedIndex é -1, significando que nenhum dos itens na lista está selecionado. Quando SelectedIndex é ajustado a um conteúdo em particular, esse conteúdo pode ser destacado usando o SelectedItemTemplate.

 

O exemplo abaixo ilustra o uso de SelectItemTemplate em um controle DataList.

 

 

<%@ Page Language="C#" %>

<%@ Import Namespace="System.Data" %>

 

<script runat="server"> 

    ICollection CreateDataSource() {

        DataTable dt = new DataTable();

        DataRow dr;

        dt.Columns.Add(new DataColumn("ValorInteiro", typeof(Int32)));

        dt.Columns.Add(new DataColumn("ValorString", typeof(string)));

        dt.Columns.Add(new DataColumn("ValorData", typeof(DateTime)));

 

        for (int i = 0; i < 9; i++) {

            dr = dt.NewRow();

            dr[0] = i;

            dr[1] = "Item " + i.ToString();

            dr[2] = DateTime.Now;

            dt.Rows.Add(dr);

        }

 

        DataView dv = new DataView(dt);

        return dv;

    }

 

    void Page_Load(Object Sender, EventArgs e) {

        if (!IsPostBack)

          CarregaLista();

    }

 

    void CarregaLista() {

        DataList1.DataSource= CreateDataSource();

        DataList1.DataBind();

    }

 

    void DataList_ItemCommand(object Sender, DataListCommandEventArgs e) {

        string cmd = ((LinkButton)e.CommandSource).CommandName;

        if (cmd == "select")

            DataList1.SelectedIndex = e.Item.ItemIndex;

        CarregaLista();

    }

</script>

 

<html>

<head runat="server">

    <title>Exemplo do Controle DataList</title>

</head>

<body>

    <h3>Usando o SelectItemTemplate com o DataList</h3>

    <form id="Form1" runat="server">

        <asp:DataList id="DataList1" runat="server"

            BorderColor="black"

            BorderWidth="1"

            GridLines="Both"

            CellPadding="3"

            Font-Names="Verdana"

            Font-Size="8pt"

            Width="150px"

            HeaderStyle-BackColor="#aaaadd"

            AlternatingItemStyle-BackColor="Gainsboro"

            SelectedItemStyle-BackColor="yellow"

            OnItemCommand="DataList_ItemCommand"

            >

              <HeaderTemplate>

                INTENS

              </HeaderTemplate>

              <ItemTemplate>

                <asp:LinkButton

                  id="button1"

                  runat="server"

                  Text="Detalhes..."

                  CommandName="select" />

 

                <%# DataBinder.Eval(Container.DataItem, "ValorString") %>

 

              </ItemTemplate>

              <SelectedItemTemplate>

                Item:

                <%# DataBinder.Eval(Container.DataItem, "ValorString")%>

                <br>

                Data do Pedido:

                <%# DataBinder.Eval(Container.DataItem, "ValorData", "{0:d}") %>

                <br>

                Quantidade:

                <%# DataBinder.Eval(Container.DataItem, "ValorInteiro", "{0:N1}") %>

                <br>

              </SelectedItemTemplate>

        </asp:DataList>  

    </form>

</body>

</html>

 

 Espero que seja útil para alguém.

 

 



Copyright © 2009 Fabio's Blog All rights reserved. Theme by Laptop Geek. | Bloggerized by FalconHive. Distribuído por Templates