Compactando Arquivos JS

Com as várias opções de frameworks js , as vezes acabamos utilizando 2 frameworks no mesmo sistema , e fora isso podemos contar com nosso próprio JS com isso é grande a necessidade de conseguirmos compactar esses arquivos… esse site http://www.bananascript.com/ é fantastico arquivos js normais , ou seja, que possuem espaços,  quebras de linha , etc … foram compactados passando de 30kb para apenas 5 kb … o unico ponto negativo eh que os arquivos não ficam legiveis, não sendo possivel dar manutenção direto neles , nem efetuar debug.
 
Por isso será sempre necessário guardar os fontes "Normais" …

Permitir utilização do SQL Profiler aos Desenvolvedores

Para quem não conhece o SQL Profiler serve para capturar os comandos SQL que estão sendo executados,  todo DBA utiliza mas ele por permitir a rapida visualização do comandos sendo executados é muito util para desenvolvedores , desenvolver sem o sql profiler pra mim tem um impacto muito grande , principalmente quando estou debugando algum problema.
 
Até o SQL Server 2000 para utilizar o SQL Profiler os desenvolvedores precisavam de permissão de  SA , por isso mesmo muitos desenvolvedores nunca utilizaram essa excelente ferramenta. Pois os DBAs dificilmente dariam tal permissão mesmo no ambiente de desenvolvimento.
 
Agora no SQL Server 2005 é possivel dar a permissão especifica para executar o SQL Profiler basta executar o comando
GRANT ALTER TRACE TO ‘Usuário’

Proxy Para Enterprise Library- Application Block 3.0

Com a nova versão do Application Block ganhamos uma grande facilidade para desenvolver aplicações multibanco , mas voltamos a ter o problema de várias linhas de código para executar um comando.
 
Para retornar um Dataset é necessário:
 
        Dim dsRetorno As DataSet
        Dim db As Database = DatabaseFactory.CreateDatabase()
        Dim sqlCommand As String = txtProcedure
        Dim dbCommand As DbCommand = db.GetStoredProcCommand(sqlCommand)
        Try
            dsRetorno = db.ExecuteDataSet(dbCommand)
        Catch ex As Exception
            Throw (ex)
        Finally
            db = Nothing
            dbCommand.Dispose()
        End Try
        Return dsRetorno
 
 
Como sou muito preguiçoso acabei desenvolvendo uma classe "proxy" , para voltar ao bom e velho uma linha para executar comandos simples.
 
 
Imports Microsoft.Practices.EnterpriseLibrary.Data
Imports System.Text
Imports System.Data.Common
Public Class clsDataBase
    Private Shared Sub criarParametro(ByVal arrParametros As clsParametro(), ByVal db As Database, ByVal dbCommand As DbCommand, ByVal linha As Int32)
       
        For linha = 0 To arrParametros.GetUpperBound(0)
            db.AddInParameter(dbCommand, arrParametros(linha).Nome, arrParametros(linha).TipoParametro, arrParametros(linha).Valor)
        Next
    End Sub
    Shared Function retornarScalar _
                (ByVal txtProcedure As String, ByVal arrParametros() As clsParametro) _
                As String
        Dim txtRetorno As String
        Dim db As Database = DatabaseFactory.CreateDatabase()
        Dim sqlCommand As String = txtProcedure
        Dim dbCommand As DbCommand = db.GetStoredProcCommand(sqlCommand)
        Dim linha As Int32 = 0
        Try
            criarParametro(arrParametros, db, dbCommand, linha)
            txtRetorno = db.ExecuteScalar(dbCommand)
        Catch ex As Exception
            txtRetorno = ex.Message
        Finally
            db = Nothing
            dbCommand.Dispose()
        End Try
        Return txtRetorno
    End Function
    Shared Function retornarDataReader _
    (ByVal txtProcedure As String, ByVal arrParametros() As clsParametro) _
    As IDataReader
        Dim dtrRetorno As IDataReader
        Dim db As Database = DatabaseFactory.CreateDatabase()
        Dim sqlCommand As String = txtProcedure
        Dim dbCommand As DbCommand = db.GetStoredProcCommand(sqlCommand)
        Dim linha As Int32 = 0
       
        Try
            criarParametro(arrParametros, db, dbCommand, linha)
            dtrRetorno = db.ExecuteReader(dbCommand)
        Catch ex As Exception
            Throw (ex)
        Finally
            db = Nothing
        End Try
        Return dtrRetorno
    End Function
    Shared Function retornarDataTable _
    (ByVal txtProcedure As String, ByVal arrParametros() As clsParametro) _
    As DataTable
        Dim dtrRetorno As DataTable
        Dim db As Database = DatabaseFactory.CreateDatabase()
        Dim sqlCommand As String = txtProcedure
        Dim dbCommand As DbCommand = db.GetStoredProcCommand(sqlCommand)
        Dim linha As Int32 = 0
       
        Try
            criarParametro(arrParametros, db, dbCommand, linha)
            dtrRetorno = db.ExecuteDataSet(dbCommand).Tables(0)
        Catch ex As Exception
            Throw (ex)
        Finally
            db = Nothing
            dbCommand.Dispose()
        End Try
        Return dtrRetorno
    End Function
    Shared Function retornarDataSet _
        (ByVal txtProcedure As String, ByVal arrParametros() As clsParametro) _
        As DataSet
        Dim dtrRetorno As DataSet
        Dim db As Database = DatabaseFactory.CreateDatabase()
        Dim sqlCommand As String = txtProcedure
        Dim dbCommand As DbCommand = db.GetStoredProcCommand(sqlCommand)
        Dim linha As Int32 = 0
        Try
            criarParametro(arrParametros, db, dbCommand, linha)
            dtrRetorno = db.ExecuteDataSet(dbCommand)
        Catch ex As Exception
            Throw (ex)
        Finally
            db = Nothing
            dbCommand.Dispose()
        End Try
        Return dtrRetorno
    End Function
 
    Shared Function retornarScalar _
            (ByVal txtProcedure As String) _
            As String
        Dim txtRetorno As String
        Dim db As Database = DatabaseFactory.CreateDatabase()
        Dim sqlCommand As String = txtProcedure
        Dim dbCommand As DbCommand = db.GetStoredProcCommand(sqlCommand)
        Dim linha As Int32 = 0
 
        Try
            txtRetorno = db.ExecuteScalar(dbCommand)
        Catch ex As Exception
            txtRetorno = ex.Message
        Finally
            db = Nothing
            dbCommand.Dispose()
        End Try
        Return txtRetorno
    End Function
 
    Shared Function retornarDataReader _
    (ByVal txtProcedure As String) _
    As IDataReader
        Dim dtrRetorno As IDataReader
        Dim db As Database = DatabaseFactory.CreateDatabase()
        Dim sqlCommand As String = txtProcedure
        Dim dbCommand As DbCommand = db.GetStoredProcCommand(sqlCommand)
        Dim linha As Int32 = 0
 
        Try
            dtrRetorno = db.ExecuteReader(dbCommand)
        Catch ex As Exception
            Throw (ex)
        Finally
            db = Nothing
        End Try
        Return dtrRetorno
    End Function
    Shared Function retornarDataTable _
    (ByVal txtProcedure As String) _
    As DataTable
        Dim dtrRetorno As DataTable
        Dim db As Database = DatabaseFactory.CreateDatabase()
        Dim sqlCommand As String = txtProcedure
        Dim dbCommand As DbCommand = db.GetStoredProcCommand(sqlCommand)
        Dim linha As Int32 = 0
        Try
            dtrRetorno = db.ExecuteDataSet(dbCommand).Tables(0)
        Catch ex As Exception
            Throw (ex)
        Finally
            db = Nothing
            dbCommand.Dispose()
        End Try
        Return dtrRetorno
    End Function
    Shared Function retornarDataSet _
        (ByVal txtProcedure As String) _
        As DataSet
        Dim dtrRetorno As DataSet
        Dim db As Database = DatabaseFactory.CreateDatabase()
        Dim sqlCommand As String = txtProcedure
        Dim dbCommand As DbCommand = db.GetStoredProcCommand(sqlCommand)
        Try
            dtrRetorno = db.ExecuteDataSet(dbCommand)
        Catch ex As Exception
            Throw (ex)
        Finally
            db = Nothing
            dbCommand.Dispose()
        End Try
        Return dtrRetorno
    End Function
 
End Class

Criei outra classe para os parametros

 

Imports System.Data.Common
Imports System

Public Class clsParametro

    Private _TipoParametro As DbType
    Public Property TipoParametro() As DbType
        Get
            Return _TipoParametro
        End Get
        Set(ByVal value As DbType)
            _TipoParametro = value
        End Set
    End Property

    Private _Valor As Object
    Public Property Valor() As Object
        Get
            Return _Valor
        End Get
        Set(ByVal value As Object)
            _Valor = value
        End Set
    End Property

    Private _NomeProcedure As String
    Public Property Nome() As String
        Get
            Return _NomeProcedure
        End Get
        Set(ByVal value As String)
            _NomeProcedure = value
        End Set
    End Property

    Sub New(ByVal txtNome As String, ByVal Tipo As DbType, ByVal objValor As Object)

        Nome = txtNome
        TipoParametro = Tipo
        Valor = objValor

    End Sub

End Class

Utilizando essas classes voltamos a facilidade do Application Block 2.0, veja como fica mais simples .

        DataTable dtbRetorno;
        BD.clsParametro[] arrParametro = new BD.clsParametro[11];

        arrParametro[0] = new BD.clsParametro("@IDSENHA", DbType.Int32, IDSENHA);
        arrParametro[1] = new BD.clsParametro("@IDEMPRESA", DbType.Int32, IDEMPRESA);
        arrParametro[2] = new BD.clsParametro("@IDVENDEDOR_DESTINO", DbType.Int32, IDVENDEDOR_DESTINO);
        arrParametro[3] = new BD.clsParametro("@IDOS", DbType.Int32, IDOS);
        arrParametro[4] = new BD.clsParametro("@NR_ITEM", DbType.Int16, NR_ITEM);
        arrParametro[5] = new BD.clsParametro("@NR_SERIE", DbType.String, NR_SERIE);
        arrParametro[6] = new BD.clsParametro("@OBS_MOVTO", DbType.String, OBS_MOVTO);
        arrParametro[7] = new BD.clsParametro("@IDSTATUSOS_NOVO", DbType.Int32, 0); 
        arrParametro[8] = new BD.clsParametro("@VENDEDOR_ORIGINAL_OS", DbType.String, "F"); 
        arrParametro[9] = new BD.clsParametro("@FINALIZAR_OS", DbType.String, FINALIZAR_OS); 
        arrParametro[10] = new BD.clsParametro("@CLIENTE_VISUALIZA_OBS", DbType.String, "T");

       dtbRetorno = BD.clsDataBase.retornarDataTable("MANUT_OS_ENCAMINHAR", arrParametro);

No webconfig eu configuro a conexão com o banco,

 <connectionStrings>
  <add name="FireBird" providerName="FirebirdSql.Data.FirebirdClient" connectionString="Server=localhost;User=XXXX;Password=XXXXX;Charser=WIN1252;Database=c:\XXXXX.GDB"/>
 </connectionStrings>
 <dataConfiguration defaultDatabase="FireBird"/>

Assim eu continuo com o poder do novo Application Block sem perder a facilidade do antigo…

 

 

 

Links WINDOWS WORKFLOW FOUNDATION – WWF

Para quem quiser conhecer melhor o WWF pode aproveitar os hands on labs que vai facilitar muito o aprendizado …
 
 
 
 
 

Use e abuse do SQLDataSource

É impressionante como demoramos a usar todo recurso de uma nova tecnologia, sempre fazendo as coisas usando um pouco do jeito antigo, um pouco do jeito novo.
 
Esse mês estava eu fazendo um freela e não estava afim de programar mais do que o necessário, então comecei a usar o ASP.NET no seu limite, procurando fazer mais com o minimo de código possível.
 
Para ilustrar vamos ao meu cenário:
 
O sistema em questão é para controlar Processos , um pouco genérico …rs … processos sobre acidentes de transito , basicamente tendo duas partes envolvidas o segurado e o terceiro. Então tinha duas abas uma para os dados do Segurado e outra para o Terceiro.
 
1) O segurado esta ligado a mais 2 participantes:  motorista e o proprietário do veiculo
 
2) O terceiro esta ligado a mais 3 participantes: motorista, proprietário e o segurado do veiculo
 
Então temos 7 participantes exatamente com o mesmos dados, com uma pequena diferença os participantes "secundários" , tem uma propriedade dizendo se é o mesmo que o participante principal.
 
3) Todos os participantes podem ter um ou mais endereço e telefones
 
 Dito isso vamos ao que interessa como resolvi o problema.
 
 
Para a solução do problema vamos utilizar.
 
1) Criar um userControl chamado Participante
2) Criar 3 regiões nesse usercontrol
    • Dados Pessoais
    • Endereço
    • Telefone

3) Criar e configurar SQLDataSource para cada região.

4) Criar um grid e um formview para endereço e outro para telefone. E criar um formview para os dados pessoais.

Agora veja a enorme quantidade de código do userControl Participante … rs

Public Partial Class ucParticipante
    Inherits AkameUserControl

    Enum enTipoParticipante
        Segurado = 1
        MotoristaSegurado = 2
        Terceiro = 3
        MotoristaTerceiro = 4
        ProprietarioSegurado = 5
        ProprietarioTerceiro = 6
        TerceiroSegurado = 7
    End Enum

    Private _idParticipante As Integer
    Public Property idParticipante() As Integer
        Get
            Return ViewState("_idParticipante")
        End Get
        Set(ByVal value As Integer)
            ViewState("_idParticipante") = value
        End Set
    End Property

    Private _TipoParticipante As enTipoParticipante
    Public Property TipoParticipante() As enTipoParticipante
        Get
            Return _TipoParticipante
        End Get
        Set(ByVal value As enTipoParticipante)
            _TipoParticipante = value
        End Set
    End Property

   Private Sub sqlEndereco_Inserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs) Handles sqlEndereco.Inserting
        e.Command.Parameters(e.Command.Parameters.Count – 1).Value = idParticipante
    End Sub

    Private Sub sqlEndereco_Selecting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceSelectingEventArgs) Handles sqlEndereco.Selecting
        e.Command.Parameters(0).Value = idParticipante
    End Sub

    Private Sub sqlTelefone_Inserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs) Handles sqlTelefone.Inserting
        e.Command.Parameters(e.Command.Parameters.Count – 1).Value = idParticipante
    End Sub

    Private Sub sqlTelefone_Selecting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceSelectingEventArgs) Handles sqlTelefone.Selecting
        e.Command.Parameters(0).Value = idParticipante
    End Sub

    Private Sub sqlEmail_Inserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs) Handles sqlEmail.Inserting
        e.Command.Parameters(e.Command.Parameters.Count – 1).Value = idParticipante
    End Sub

    Private Sub sqlEmail_Selecting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceSelectingEventArgs) Handles sqlEmail.Selecting
        e.Command.Parameters(0).Value = idParticipante
    End Sub
End Class

O unico trabalho que tive foi criar uma propriedade idParticipante e setar esse valor, como pode-se reparar foi necessário salvar o valor em viewstate para que ele fosse persistido. Feito isso foi só setar o valor do parametro nos eventos Selecting e Inserting , no meu caso como não altero o participante a alterção não precisei fazer o mesmo para o evento Updating.

Esse foi a maior sacada do pessoal, pois permite um flexibilidade incrivel ao SQLDataSource , melhor que isso somente se pudesse utilizar direto a propriedade idParticipante igual eu faço com session.

Veja a quantidade de código foi ridiculo, proporcionando eu fazer esse user control em menos de 1 hora. O que poderia levar até 2 dias dependendo do jeito de se fazer.

Veja como ficou o arquivo ascx, deixei somente a parte de endereço para não ocupar muito espaço. No meu caso optei por fazer a alteração direto no grid , e deixar a inclusão com o formview.

 

  <asp:GridView ID="gvEndereco" runat="server"
              DataKeyNames="id_Endereco" DataSourceID="sqlEndereco" PageSize="3">
              </asp:GridView>

           
   

            <asp:FormView ID="fvEndereco" runat="server" DataKeyNames="id_Endereco" DataSourceID="sqlEndereco" AllowPaging="True"  DefaultMode="Insert"
                EmptyDataText="Nenhum registro encontrado" >
    <EditItemTemplate>
        txt_CEP:
        <asp:TextBox ID="txt_CEPTextBox" runat="server" Text='<%# Bind("txt_CEP") %>’>
        </asp:TextBox><br />
        txt_Logradouro:
        <asp:TextBox ID="txt_LogradouroTextBox" runat="server" Text='<%# Bind("txt_Logradouro") %>’>
        </asp:TextBox><br />
        txt_Numero:
        <asp:TextBox ID="txt_NumeroTextBox" runat="server" Text='<%# Bind("txt_Numero") %>’>
        </asp:TextBox><br />
        bln_Principal:
        <asp:CheckBox ID="bln_PrincipalCheckBox" runat="server" Checked='<%# Bind("bln_Principal") %>’ /><br />
        txt_TipoEndereco:
        <asp:TextBox ID="txt_TipoEnderecoTextBox" runat="server" Text='<%# Bind("txt_TipoEndereco") %>’>
        </asp:TextBox><br />
        txt_Bairro:
        <asp:TextBox ID="txt_BairroTextBox" runat="server" Text='<%# Bind("txt_Bairro") %>’>
        </asp:TextBox><br />
        txt_Cidade:
        <asp:TextBox ID="txt_CidadeTextBox" runat="server" Text='<%# Bind("txt_Cidade") %>’>
        </asp:TextBox><br />
        txt_UF:
        <asp:TextBox ID="txt_UFTextBox" runat="server" Text='<%# Bind("txt_UF") %>’>
        </asp:TextBox><br />
        txt_Complemento:
        <asp:TextBox ID="txt_ComplementoTextBox" runat="server" Text='<%# Bind("txt_Complemento") %>’>
        </asp:TextBox><br />
        id_Endereco:
        <asp:Label ID="id_EnderecoLabel1" runat="server" Text='<%# Eval("id_Endereco") %>’>
        </asp:Label><br />
        id_Participante:
        <asp:TextBox ID="id_ParticipanteTextBox" runat="server" Text='<%# Bind("id_Participante") %>’>
        </asp:TextBox><br />
        <asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" CommandName="Update"
            Text="Update">
        </asp:LinkButton>
        <asp:LinkButton ID="UpdateCancelButton" runat="server" CausesValidation="False" CommandName="Cancel"
            Text="Cancel">
        </asp:LinkButton>
    </EditItemTemplate>
    <InsertItemTemplate>
        txt_CEP:
        <asp:TextBox ID="txt_CEPTextBox" runat="server" Text='<%# Bind("txt_CEP") %>’>
        </asp:TextBox><br />
        txt_Logradouro:
        <asp:TextBox ID="txt_LogradouroTextBox" runat="server" Text='<%# Bind("txt_Logradouro") %>’>
        </asp:TextBox><br />
        txt_Numero:
        <asp:TextBox ID="txt_NumeroTextBox" runat="server" Text='<%# Bind("txt_Numero") %>’>
        </asp:TextBox><br />
        bln_Principal:
        <asp:CheckBox ID="bln_PrincipalCheckBox" runat="server" Checked='<%# Bind("bln_Principal") %>’ /><br />
        txt_TipoEndereco:
        <asp:TextBox ID="txt_TipoEnderecoTextBox" runat="server" Text='<%# Bind("txt_TipoEndereco") %>’>
        </asp:TextBox><br />
        txt_Bairro:
        <asp:TextBox ID="txt_BairroTextBox" runat="server" Text='<%# Bind("txt_Bairro") %>’>
        </asp:TextBox><br />
        txt_Cidade:
        <asp:TextBox ID="txt_CidadeTextBox" runat="server" Text='<%# Bind("txt_Cidade") %>’>
        </asp:TextBox><br />
        txt_UF:
        <asp:TextBox ID="txt_UFTextBox" runat="server" Text='<%# Bind("txt_UF") %>’>
        </asp:TextBox><br />
        txt_Complemento:
        <asp:TextBox ID="txt_ComplementoTextBox" runat="server" Text='<%# Bind("txt_Complemento") %>’>
        </asp:TextBox><br />
      
        <asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True" CommandName="Insert"
            Text="Insert">
        </asp:LinkButton>
        <asp:LinkButton ID="InsertCancelButton" runat="server" CausesValidation="False" CommandName="Cancel"
            Text="Cancel">
        </asp:LinkButton>
    </InsertItemTemplate>
    <ItemTemplate>
        txt_CEP:
        <asp:Label ID="txt_CEPLabel" runat="server" Text='<%# Bind("txt_CEP") %>’></asp:Label><br />
        txt_Logradouro:
        <asp:Label ID="txt_LogradouroLabel" runat="server" Text='<%# Bind("txt_Logradouro") %>’>
        </asp:Label><br />
        txt_Numero:
        <asp:Label ID="txt_NumeroLabel" runat="server" Text='<%# Bind("txt_Numero") %>’>
        </asp:Label><br />
        bln_Principal:
        <asp:CheckBox ID="bln_PrincipalCheckBox" runat="server" Checked='<%# Bind("bln_Principal") %>’
            Enabled="false" /><br />
        txt_TipoEndereco:
        <asp:Label ID="txt_TipoEnderecoLabel" runat="server" Text='<%# Bind("txt_TipoEndereco") %>’>
        </asp:Label><br />
        txt_Bairro:
        <asp:Label ID="txt_BairroLabel" runat="server" Text='<%# Bind("txt_Bairro") %>’>
        </asp:Label><br />
        txt_Cidade:
        <asp:Label ID="txt_CidadeLabel" runat="server" Text='<%# Bind("txt_Cidade") %>’>
        </asp:Label><br />
        txt_UF:
        <asp:Label ID="txt_UFLabel" runat="server" Text='<%# Bind("txt_UF") %>’></asp:Label><br />
        txt_Complemento:
        <asp:Label ID="txt_ComplementoLabel" runat="server" Text='<%# Bind("txt_Complemento") %>’>
        </asp:Label><br />
        id_Endereco:
        <asp:Label ID="id_EnderecoLabel" runat="server" Text='<%# Eval("id_Endereco") %>’>
        </asp:Label><br />
        id_Participante:
        <asp:Label ID="id_ParticipanteLabel" runat="server" Text='<%# Bind("id_Participante") %>’>
        </asp:Label><br />
        <asp:LinkButton ID="EditButton" runat="server" CausesValidation="False" CommandName="Edit"
            Text="Edit">
        </asp:LinkButton>
        <asp:LinkButton ID="DeleteButton" runat="server" CausesValidation="False" CommandName="Delete"
            Text="Delete">
        </asp:LinkButton>
        <asp:LinkButton ID="NewButton" runat="server" CausesValidation="False" CommandName="New"
            Text="New">
        </asp:LinkButton>
    </ItemTemplate>
</asp:FormView>

<asp:SqlDataSource ID="sqlEndereco" runat="server" ConnectionString="<%$ ConnectionStrings:LocalSqlServerASPNET %>"
    DeleteCommand="DELETE FROM [tbl_proc_ParticipanteEndereco] WHERE [id_Endereco] = @id_Endereco"
    InsertCommand="INSERT INTO [tbl_proc_ParticipanteEndereco] ([txt_Logradouro], [txt_Numero], [txt_Complemento], [txt_CEP], [txt_Bairro], [txt_Cidade], [txt_UF], [txt_TipoEndereco], [bln_Principal], [id_Participante]) VALUES (@txt_Logradouro, @txt_Numero, @txt_Complemento, @txt_CEP, @txt_Bairro, @txt_Cidade, @txt_UF, @txt_TipoEndereco, @bln_Principal, @id_Participante)"
    SelectCommand="SELECT [txt_Logradouro], [txt_Numero], [txt_Complemento], [txt_CEP], [txt_Bairro], [txt_Cidade], [txt_UF], [txt_TipoEndereco], [bln_Principal], [id_Participante], [id_Endereco] FROM [tbl_proc_ParticipanteEndereco] WHERE ([id_Participante] = @id_Participante)"
    UpdateCommand="UPDATE [tbl_proc_ParticipanteEndereco] SET [txt_Logradouro] = @txt_Logradouro, [txt_Numero] = @txt_Numero, [txt_Complemento] = @txt_Complemento, [txt_CEP] = @txt_CEP, [txt_Bairro] = @txt_Bairro, [txt_Cidade] = @txt_Cidade, [txt_UF] = @txt_UF, [txt_TipoEndereco] = @txt_TipoEndereco, [bln_Principal] = @bln_Principal  WHERE [id_Endereco] = @id_Endereco">
    <DeleteParameters>
        <asp:Parameter Name="id_Endereco" Type="Int32" />
    </DeleteParameters>
    <UpdateParameters>
        <asp:Parameter Name="txt_Logradouro" Type="String" />
        <asp:Parameter Name="txt_Numero" Type="String" />
        <asp:Parameter Name="txt_Complemento" Type="String" />
        <asp:Parameter Name="txt_CEP" Type="String" />
        <asp:Parameter Name="txt_Bairro" Type="String" />
        <asp:Parameter Name="txt_Cidade" Type="String" />
        <asp:Parameter Name="txt_UF" Type="String" />
        <asp:Parameter Name="txt_TipoEndereco" Type="String" />
        <asp:Parameter Name="bln_Principal" Type="Boolean" />
        <asp:Parameter Name="id_Endereco" Type="Int32" />
    </UpdateParameters>
    <SelectParameters>
        <asp:Parameter Name="id_Participante" Type="Int32" />
    </SelectParameters>
    <InsertParameters>
        <asp:Parameter Name="txt_Logradouro" Type="String" />
        <asp:Parameter Name="txt_Numero" Type="String" />
        <asp:Parameter Name="txt_Complemento" Type="String" />
        <asp:Parameter Name="txt_CEP" Type="String" />
        <asp:Parameter Name="txt_Bairro" Type="String" />
        <asp:Parameter Name="txt_Cidade" Type="String" />
        <asp:Parameter Name="txt_UF" Type="String" />
        <asp:Parameter Name="txt_TipoEndereco" Type="String" />
        <asp:Parameter Name="bln_Principal" Type="Boolean" />
        <asp:Parameter Name="id_Participante" Type="Int32" />
    </InsertParameters>
</asp:SqlDataSource>

 

 

 
 
 
 
 

Links Uteis sobre ASP.NET 2.0

Esse site possui um guia com diversos links para aprender tudo ou quase tudo sobre .Net
 
Além desse site eu utilizo muito os sites:

Fora isso costumo sempre dar uma olha nos blogs do ScotGu, Tarifa, Israel … 

Gerando número Randomico

 

Embora não seja algo que precisamos todo dia, é algo que precisamos com certa frequência, seja para gerar senha , arquivo ou mesmo para outros fins…

Vamos utilizar a classe random, podemos ainda passar um intervalo para que o número seja gerado, assim podemos dizer por exemplo para que seja gerado um numero entre 0 e 100.

Dim RandomClass As New Random()

RandomClass.Next(0, 100)

Você pode utilizar também o método NextDouble para retornar um número entre 0.0 e 1.0

Vale lembrar que por mais que o range de número possa ser grande , como de 0 a 999999 a chance de um número repetido não é tão pequeno assim … quando não se pode correr o risco de número repetidos é melhor utilizar mais alguns truques como adicionar o id do usuário por exemplo …

IF X Case (Coitado do nosso querido IF)

 

Hoje vamos mostrar como a estrutura case é mais produtiva do que o bom e velho if, vamos construir um método para qualificar um número de acordo com os dados abaixo:

  • Número Bom quando for igual a 2,5 ou 7
  • Número Ruim quando for igual a 1,3,8,9 ou 10
  • Número Péssimo quando o número for menor que 1
  • Número Muito Bom quando o número for igual a 4,6 ou maior que 10
  • Número Excelente quando o número for maior ou igual que 20 e menor que 100
  • Se diferente de todas acima, número é inválido

 

Function RetornarClassificacao(byval variavel As Int32) As String

  Dim Classificacao As String

        If (variavel = 2) OrElse (variavel = 5) OrElse (variavel = 7) Then

            Classificacao = "Número Bom"

        ElseIf (variavel = 1) OrElse (variavel = 3) OrElse ((variavel >= 8) AndAlso (variavel <= 10)) Then

            Classificacao = "Número Ruim"

        ElseIf (variavel < 1) Then

            Classificacao = "Número Péssimo"

        ElseIf (variavel = 4) OrElse (variavel = 6) OrElse ((variavel > 10) AndAlso (variavel < 20)) Then

            Classificacao = "Número Muito Bom"

        ElseIf (variavel >= 20) AndAlso (variavel < 100) Then

            Classificacao = "Número Excelente"

        Else

            Classificacao = "Número inválido"

        End If

return Classificacao

End Function

Agora veja como o código fica bem mais legivel e fácil utilizando o Case, se nosso código fica bem melhor nesse caso simples, imagine com códigos mais complexos

 

Function RetornarClassificacao(byval variavel As Int32) As String

Dim variavel As Int32 = txtResultado.Text

        Dim Classificacao As String

 

        Select Case variavel

            Case 2, 5, 7

                Classificacao = "Número Bom"

            Case 1, 3, 8 To 10

                Classificacao = "Número Ruim"

            Case Is < 1

                Classificacao = "Número Péssimo"

            Case 4, 6, 11 To 19

                Classificacao = "Número Muito Bom"

 

            Case 20 To 99

                Classificacao = "Número Excelente"

            Case Else

                Classificacao = "Número inválido"

        End Select

return Classificacao

End Function

 

O  código com if requer uns 10 a 20 segundos para ser totalmente entendido, já o case dúvido que tenha demorado mais de 5 segundos para saber o que está sendo feito, a  utilização do 11 to 19 para identificar uma sequência é fantastico e a virgula para as varias condições então nem se fala…

É claro que o poderoso Case tinha que ter um defeito, esse defeito é que ele só compara uma variavel,ou seja, se tivesse uma comparação do tipo a =1 e b = 2 , não conseguiria fazer essas duas comparações com o case, precisaria usar o IF a não ser que criasse alguma "solução avançada" para contornar isso.