<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" media="screen" href="/styles/xslt/rss.xslt"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:c9="http://channel9.msdn.com">
<channel>
	<title>Comment Feed for Channel 9 - ASP.NET Razor: Interagindo com bancos de dados</title>
	<atom:link rel="self" type="application/rss+xml" href="http://channel9.msdn.com/posts/ASPNET-Razor-Interagindo-com-bancos-de-dados/rss"></atom:link>
	<image>
		<url>http://files.channel9.msdn.com/thumbnail/027ebad6-b519-4481-9f7c-d19ea8b12dc0.png</url>
		<title>Channel 9 - ASP.NET Razor: Interagindo com bancos de dados</title>
		<link></link>
	</image>
	<description>Na primeira aula do primeiro m&#243;dulo deste treinamento, apresentamos a evolu&#231;&#227;o do cen&#225;rio web. Um dos per&#237;odos marcantes desta evolu&#231;&#227;o, &#233; aquele conhecido como &amp;quot;din&#226;mico&amp;quot; e, o elemento chave que possibilitou a evolu&#231;&#227;o para este modelo foi o &amp;quot;banco de dados&amp;quot;. Este artigo n&#227;o apresentar&#225; os conceitos fundamentais de bancos de dados relacionais entretanto, veremos como ASP.NET Razor facilita o trabalho com bancos de dados em web pages utilizando WebMatrix. Para apresentar as principais funcionalidades do modelo em rela&#231;&#227;o a intera&#231;&#227;o com bancos de dados, utilizaremos o exemplo do formul&#225;rio j&#225; criado na aula anterior, isto &#233;, o &amp;quot;produto&amp;quot;. Assim, o que faremos &#233;: Criaremos um novo banco de dados (SQL Server); Criaremos uma tabela (a qual chamaremos &amp;quot;tbProduto&amp;quot;); Adicionaremos um trecho de c&#243;digo que adiciona um novo registro de produto na base rec&#233;m criada; Adicionaremos um novo trecho de c&#243;digo que edita os registros previamente adicionados; Adicionaremos um novo trecho de c&#243;digo que remove os registros da base de dados. Criando o banco de dados da aplica&#231;&#227;o Com o WebMatrix em execu&#231;&#227;o, alterne para a aba &amp;quot;Databases&amp;quot;. No menu superior, ap&#243;s clicar na op&#231;&#227;o &amp;quot;New Database&amp;quot;, criarmos um novo banco de dados e o renomearmos para &amp;quot;DBLoja&amp;quot;, criaremos uma nova tabela (&amp;quot;tbProdutos&amp;quot;). A Figura 1 apresenta o banco de dados criado e a estrutura da tabela (para saber como utilizar a ferramenta de banco de dados do WebMatrix, assista a video aula &amp;quot;Gerenciamento de Bancos de Dados&amp;quot; no segundo m&#243;dulo deste treinamento).  Figura 1. Estrutura da tabela &amp;quot;tbProdutos&amp;quot; no banco de dados &amp;quot;DBLoja&amp;quot; Como &#233; poss&#237;vel observar, a estrutura do banco de dados segue o modelo apresentado pelo formul&#225;rio de exemplo das aulas anteriores. A partir daqui, estamos prontos para seguir com a constru&#231;&#227;o do exemplo. Construindo a p&#225;gina que adiciona um novo registro Ap&#243;s alternar para a guia &amp;quot;Files&amp;quot; e adicionar um novo arquivo &amp;quot;cshtml&amp;quot;, adicione o trecho de c&#243;digo apresentado pela Listagem 1. @{
    var Nome = &amp;quot;&amp;quot;;
    var ValorUnitario = &amp;quot;&amp;quot;;
    var RespostaFinal = &amp;quot;&amp;quot;;
    var Erro = false;
    var ConexaoBD = Database.Open(&amp;quot;DBLoja&amp;quot;);

    if(IsPost)
    {
        Nome = Request[&amp;quot;txtNome&amp;quot;];
        if(Nome.IsEmpty())
        {
            Erro = true;
            @:Por favor, informe o nome do produto.&amp;lt;br /&amp;gt;
        }

        ValorUnitario = Request[&amp;quot;txtValorUnitario&amp;quot;];
        if(ValorUnitario.IsEmpty() || !ValorUnitario.IsFloat())
        {
            Erro = true;
            @:Por favor, informe o valor unit&#225;rio do produto.&amp;lt;br /&amp;gt;
        }

        if(Erro == false)
        {
            var SentencaSQL = &amp;quot;INSERT INTO tbProdutos(Nome, ValorUnitario) VALUES (@0, @1)&amp;quot;;
            var ResutadoBD = ConexaoBD.Execute(SentencaSQL, Nome, ValorUnitario.AsFloat());
            if(ResutadoBD == 1)
            {
                RespostaFinal = &amp;quot;Produto adicionado com sucesso na base de dados.&amp;quot;;
            }
            else
            {
                RespostaFinal = &amp;quot;Problema encontrado ao processar a requisi&#231;&#227;o. O produto n&#227;o foi adicionado.&amp;quot;;
            }
        }
    }
}
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;
        &amp;lt;title&amp;gt;Trabalho com Formul&#225;rios&amp;lt;/title&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;h1&amp;gt;Cadastro de produto&amp;lt;/h1&amp;gt;
        
        &amp;lt;form id=&amp;quot;formProdutos&amp;quot; action=&amp;quot;&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;
            &amp;lt;fieldset&amp;gt;
            
                &amp;lt;legend&amp;gt;Adicionando novo prodruto&amp;lt;/legend&amp;gt;
            
                &amp;lt;label for=&amp;quot;txtNome&amp;quot;&amp;gt;Nome do produto&amp;lt;/label&amp;gt;
                &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;txtNome&amp;quot; value=&amp;quot;&amp;quot; name=&amp;quot;txtNome&amp;quot; /&amp;gt;
                &amp;lt;br /&amp;gt;
            
                &amp;lt;label for=&amp;quot;txtValorUnitario&amp;quot;&amp;gt;Valor unit&#225;rio&amp;lt;/label&amp;gt;
                &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;txtValorUnitario&amp;quot; value=&amp;quot;&amp;quot; name=&amp;quot;txtValorUnitario&amp;quot; /&amp;gt;
                &amp;lt;br /&amp;gt;
            
                &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Salvar&amp;quot; id=&amp;quot;btnEnviar&amp;quot; name=&amp;quot;btnEnviar&amp;quot; /&amp;gt;
            &amp;lt;/fieldset&amp;gt;
        &amp;lt;/form&amp;gt;
        &amp;lt;div id=&amp;quot;ResultadoOperacao&amp;quot; style=&amp;quot;font-family:Arial; letter-spacing:-1px; font-weight:bold; color:#1611b9&amp;quot;&amp;gt;
            @RespostaFinal
        &amp;lt;/div&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt; Listagem 1. P&#225;gina que implementa a l&#243;gica de inser&#231;&#227;o&amp;nbsp; &amp;nbsp; Muito do c&#243;digo apresentado acima lhe deve ser familiar (de aulas anteriores), assim, vamos ressaltar apenas os aspectos diretamente relacionados ao processo de conex&#227;o e adi&#231;&#227;o de novos registros ao banco de dados da aplica&#231;&#227;o. Linha 6: &#233; criado dinamicamente um objeto chamado &amp;quot;ConexaoBD&amp;quot;. Este objeto armazena o status da conex&#227;o com o banco de dados. O objeto que implementa as a&#231;&#245;es relacionadas a bancos de dados em Razor &#233; &amp;quot;Database&amp;quot;. &amp;quot;Open&amp;quot; &#233; o m&#233;todo que estabelece a conex&#227;o com o banco de dados e, para realizar esta a&#231;&#227;o, espera uma string com o nome do banco de dados sem a extens&#227;o &amp;quot;.sdf&amp;quot;. &#201; importante mencionar que, todo gerenciamento da conex&#227;o com o banco de dados &#233; realizado pela .net framework, isentando o desenvolvedor desta tarefa. Linha 25: da linha 6 at&#233; a 24, realizamos valida&#231;&#245;es simples dos dados informados no formul&#225;rio (este assunto foi estudado em outra aula neste mesmo m&#243;dulo). Na linha 25, caso tudo tenha sido executado com sucesso, adicionamos a senten&#231;a de inser&#231;&#227;o dos dados e realizamos esta tarefa, atrav&#233;s de uma metodologia conhecida como &amp;quot;par&#226;metros&amp;quot;, que s&#227;o indicados pelas strings &amp;quot;@0&amp;quot; e &amp;quot;@1&amp;quot;. A utiliza&#231;&#227;o de par&#226;metros &#233; uma boa pr&#225;tica pois, implementa seguran&#231;a em sua opera&#231;&#227;o com o banco de dados, protegendo de, dentre outras caracter&#237;sticas, acessos mal intencionados. Linha 26: &#233; criada dinamicamente a vari&#225;vel que hospeda o valor de retorno do processamento da opera&#231;&#227;o de inser&#231;&#227;o no banco de dados. No caso do m&#233;todo &amp;quot;Execute&amp;quot;, o valor retornado &#233; um inteiro (1 para sucesso e 0 para falha). Os par&#226;metros dinamicamente esperados por &amp;quot;Execute&amp;quot; s&#227;o: string com a senten&#231;a SQL e demais elementos associados aos par&#226;metros indicados por &amp;quot;@&amp;quot;. Sim, a amarra&#231;&#227;o dos dados com os par&#226;metros ocorre aqui. Nas linhas seguintes apenas verificamos o resultado retornado. Caso tenha sido 1 (um), atribu&#237;mos &#224; vari&#225;vel &amp;quot;RespostaFinal&amp;quot; a mensagem de sucesso. Caso contr&#225;rio, retornamos a mensagem de insucesso. A Figura 2 apresenta o resultado da execu&#231;&#227;o do c&#243;digo apresentado pela Listagem 2.  Figura 2. Gravando os dados do formul&#225;rio no banco de dados exemplo Exibindo os dados do banco de dados Bancos de dados s&#243; existem porque atuam como reposit&#243;rios de dados para a exibi&#231;&#227;o destes no momento oportuno, correto? Neste caso, vamos dedicar certo tempo a exibir os dados da &#250;nica tabela existente em nosso banco de dados de exemplo. Assim, considere o c&#243;digo apresentado pela Listagem 2. @{
    var ConexaoBD = Database.Open(&amp;quot;DBLoja&amp;quot;);
    var SentencaSQL = &amp;quot;SELECT * FROM tbProdutos ORDER BY Nome ASC&amp;quot;;
}

&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;
        &amp;lt;title&amp;gt;Trabalhando com BD&#39;s&amp;lt;/title&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;table&amp;gt;
            &amp;lt;tr style=&amp;quot;background-color:#a9a9a9; height:30px;&amp;quot;&amp;gt;
                &amp;lt;td&amp;gt;
                    C&#243;digo do produto
                &amp;lt;/td&amp;gt;
                &amp;lt;td&amp;gt;
                    Nome do produto
                &amp;lt;/td&amp;gt;
                &amp;lt;td&amp;gt;
                    Valor unit&#225;rio
                &amp;lt;/td&amp;gt;
                &amp;lt;td&amp;gt;
                    Opera&#231;&#227;o
                &amp;lt;/td&amp;gt;
            &amp;lt;/tr&amp;gt;
            @foreach(var Registro in ConexaoBD.Query(SentencaSQL)) {
            &amp;lt;tr&amp;gt;
                &amp;lt;td&amp;gt;
                    @Registro.IDProduto
                &amp;lt;/td&amp;gt;
                &amp;lt;td&amp;gt;
                    @Registro.Nome
                &amp;lt;/td&amp;gt;
                &amp;lt;td&amp;gt;
                    @Registro.ValorUnitario
                &amp;lt;/td&amp;gt;
                &amp;lt;td&amp;gt;
                    &amp;lt;a href=&amp;quot;@Href(&amp;quot;~/AtualizarDados&amp;quot;, Registro.IDProduto)&amp;quot; target=&amp;quot;_self&amp;quot;&amp;gt;
                        Atualizar dados
                    &amp;lt;/a&amp;gt;
                &amp;lt;/td&amp;gt;
            &amp;lt;/tr&amp;gt;
            }
        &amp;lt;/table&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt; &amp;nbsp;Listagem 2. C&#243;digo que lista os dados cadastrados em forma de tabela &amp;nbsp; Como &#233; poss&#237;vel notar, o c&#243;digo apresentado pela Listagem 2 &#233; extremamente simples e apresenta poucos novos aspectos a serem considerados. Vamos a eles: Linha 3: a senten&#231;a SQL &#233; modificada. Ao inv&#233;s de adicionarmos dados no banco com INSERT, selecionamos os dados com SELECT. Armazenamos esta senten&#231;a em uma vari&#225;vel string gerada dinamicamente. Linha 27: adicionamos junto as tags HTML uma estrutura de repeti&#231;&#227;o &amp;quot;foreach&amp;quot;. Se voc&#234; conhece C#, esta estrutura lhe &#233; familiar. Voc&#234; pode conhecer um pouco mais sobre esta forma de repeti&#231;&#227;o clicando aqui. Uma observa&#231;&#227;o importante aqui &#233;: o compilador Razor &#233; inteligente o suficiente para entender o que &#233;&amp;nbsp; c&#243;digo Razor e o que n&#227;o &#233;, facilitando assim o trabalho do desenvolvedor e tornando o c&#243;digo leg&#237;vel. Linhas 30, 33 e 36: como &amp;quot;Registro&amp;quot; &#233; um objeto gerado dinamicamente em tempo de compila&#231;&#227;o e representa cada registro do banco de dados, podemos ent&#227;o compor a exibi&#231;&#227;o do mesmo atrav&#233;s da chamada das colunas do registro como se fossem propriedades do objeto. Nestas linhas, &#233; exatamente isso que realizamos. O resultado do processamento do c&#243;digo apresentado pela Listagem 2 pode ser visualizado na Figura 3. &amp;nbsp; &amp;nbsp;Figura 3. Dados do banco de dados sendo exibidos &amp;nbsp; Atualizando dados Outra opera&#231;&#227;o comum quando estamos trabalhando com aplica&#231;&#245;es web que interagem com bancos de dados relacionais &#233; a de atualiza&#231;&#227;o dos dados j&#225; existentes. Um exemplo comum que justifica esta opera&#231;&#227;o em nossa aplica&#231;&#227;o exemplo, seria o reajuste de pre&#231;o unit&#225;rio em percentual x. Para realizar tal opera&#231;&#227;o, Razor ofere um modelo bem semelhante aquele apresentado pelos &#237;tens anteriores. Para entend&#234;-lo, considere o trecho de c&#243;digo apresentado pela Listagem 3. @{
    var ParametroURL = UrlData[0];
    var ConexaoBD = Database.Open(&amp;quot;DBLoja&amp;quot;);
    var RespostaFinal = &amp;quot;&amp;quot;;
    var NomeTemp = &amp;quot;&amp;quot;;
    var ValorUnitarioTemp = &amp;quot;&amp;quot;;

    if(ParametroURL.IsEmpty())
    {
        @:N&#227;o foi poss&#237;vel carregar os dados.
    }
    else
    {
        if(IsPost)
        {
            var Nome = Request[&amp;quot;txtNome&amp;quot;];
            var ValorUnitario = Request[&amp;quot;txtValorUnitario&amp;quot;];

            var SentencaSQLAtualiza = &amp;quot;UPDATE tbProdutos SET Nome = @0, ValorUnitario = @1 WHERE IDProduto = @2&amp;quot;;
            ConexaoBD.Execute(SentencaSQLAtualiza, Nome, ValorUnitario, ParametroURL);
            RespostaFinal = &amp;quot;Dados atualizados com sucesso!&amp;quot;;
        }
        else
        {
            var SentencaSQL = &amp;quot;SELECT * FROM tbProdutos WHERE IDProduto = @0&amp;quot;;
            var ResultadoBD = ConexaoBD.QuerySingle(SentencaSQL, ParametroURL);
            NomeTemp = ResultadoBD.Nome;
            ValorUnitarioTemp = ResultadoBD.ValorUnitario.ToString();
        }
        
    }
}

&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;
        &amp;lt;title&amp;gt;Trabalho com BD&#39;s&amp;lt;/title&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;h1&amp;gt;Atualiza&#231;&#227;o de cadastro de produto&amp;lt;/h1&amp;gt;
        
        &amp;lt;form id=&amp;quot;formProdutos&amp;quot; action=&amp;quot;&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;
            &amp;lt;fieldset&amp;gt;
            
                &amp;lt;legend&amp;gt;Atualizando o prodruto&amp;lt;/legend&amp;gt;
            
                &amp;lt;label for=&amp;quot;txtNome&amp;quot;&amp;gt;Nome do produto&amp;lt;/label&amp;gt;
                &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;txtNome&amp;quot; value=&amp;quot;@NomeTemp&amp;quot; name=&amp;quot;txtNome&amp;quot; /&amp;gt;
                &amp;lt;br /&amp;gt;
            
                &amp;lt;label for=&amp;quot;txtValorUnitario&amp;quot;&amp;gt;Valor unit&#225;rio&amp;lt;/label&amp;gt;
                &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;txtValorUnitario&amp;quot; value=&amp;quot;@ValorUnitarioTemp&amp;quot; name=&amp;quot;txtValorUnitario&amp;quot; /&amp;gt;
                &amp;lt;br /&amp;gt;
            
                &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Salvar&amp;quot; id=&amp;quot;btnEnviar&amp;quot; name=&amp;quot;btnEnviar&amp;quot; /&amp;gt;
            
            &amp;lt;/fieldset&amp;gt;
        &amp;lt;/form&amp;gt;
        &amp;lt;div id=&amp;quot;ResultadoOperacao&amp;quot; style=&amp;quot;font-family:Arial; letter-spacing:-1px; font-weight:bold; color:#1611b9&amp;quot;&amp;gt;
            @RespostaFinal
        &amp;lt;/div&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt; Listagem 3. Atualizando os dados de produtos&amp;nbsp; O processo de atualiza&#231;&#227;o dos dados em um banco &#233; realizado atrav&#233;s da diretiva SQL &amp;quot;Update&amp;quot;. O c&#243;digo apresentado pela Listagem 3 n&#227;o apresenta novidades em rela&#231;&#227;o ao que j&#225; foi estudado nas se&#231;&#245;es anteriores neste mesmo artigo. A diferen&#231;a b&#225;sica que ocorre aqui &#233;: temos a conex&#227;o ao banco de dados ocorrendo em dois momentos sendo que, no primeiro, com base no c&#243;digo recuperado atrav&#233;s da URL com &amp;quot;UrlData[0]&amp;quot;, criamos a senten&#231;a SQL de busca do registro desejado. J&#225; no segundo momento, quando o usu&#225;rio fizer postback com os dados do formul&#225;rio, o sistema conecta-se novamente ao banco de dados e executa o &amp;quot;Update&amp;quot;. O resultado do processo de atualiza&#231;&#227;o das informa&#231;&#245;es de determinado registro no banco de dados pode ser visualizado nas Figuras 4 e 5. &amp;nbsp; Figura 4. Alterando os dados previamente cadastrados&amp;nbsp; &amp;nbsp; &amp;nbsp;Figura 5. Dados alterados no banco de dados Removendo dados da base Outro aspecto importante e muito comum em sistemas que armazenam dados, &#233; a necessidade de em um momento ou outro, remover dados que encontram-se redundantes, que foram armazenados de forma incorreta ou que n&#227;o mais s&#227;o importantes no contexto da aplica&#231;&#227;o e est&#227;o ocupando espa&#231;o desnecessariamente. A Listagem 4 apresenta uma das formas poss&#237;veis de utiliza&#231;&#227;o do Razor para realizar a a tarefa de remo&#231;&#227;o. @{
    var ParametroURL = UrlData[0];
    var ConexaoBD = Database.Open(&amp;quot;DBLoja&amp;quot;);
    var RespostaFinal = &amp;quot;&amp;quot;;
    var NomeTemp = &amp;quot;&amp;quot;;
    var ValorUnitarioTemp = &amp;quot;&amp;quot;;

    if(ParametroURL.IsEmpty())
    {
        @:N&#227;o foi poss&#237;vel carregar os dados.
    }
    else
    {
        if(IsPost)
        {
            var SentencaSQLRemove = &amp;quot;DELETE FROM tbProdutos WHERE IDProduto = @0&amp;quot;;
            ConexaoBD.Execute(SentencaSQLRemove, ParametroURL);
            RespostaFinal = &amp;quot;Produto removido com sucesso!&amp;quot;;
        }
        else
        {
            var SentencaSQL = &amp;quot;SELECT * FROM tbProdutos WHERE IDProduto = @0&amp;quot;;
            var ResultadoBD = ConexaoBD.QuerySingle(SentencaSQL, ParametroURL);
            NomeTemp = ResultadoBD.Nome;
            ValorUnitarioTemp = ResultadoBD.ValorUnitario.ToString();
        }
        
    }
}

&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;
        &amp;lt;title&amp;gt;Trabalho com BD&#39;s&amp;lt;/title&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;h1&amp;gt;Remo&#231;&#227;o de produto&amp;lt;/h1&amp;gt;
        
        &amp;lt;form id=&amp;quot;formProdutos&amp;quot; action=&amp;quot;&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;
            &amp;lt;fieldset&amp;gt;
            
                &amp;lt;legend&amp;gt;Dados do produto&amp;lt;/legend&amp;gt;
            
                &amp;lt;label for=&amp;quot;txtNome&amp;quot;&amp;gt;Nome do produto&amp;lt;/label&amp;gt;
                &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;txtNome&amp;quot; value=&amp;quot;@NomeTemp&amp;quot; name=&amp;quot;txtNome&amp;quot; disabled=&amp;quot;disabled&amp;quot; /&amp;gt;
                &amp;lt;br /&amp;gt;
            
                &amp;lt;label for=&amp;quot;txtValorUnitario&amp;quot;&amp;gt;Valor unit&#225;rio&amp;lt;/label&amp;gt;
                &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;txtValorUnitario&amp;quot; value=&amp;quot;@ValorUnitarioTemp&amp;quot; name=&amp;quot;txtValorUnitario&amp;quot; disabled=&amp;quot;disabled&amp;quot; /&amp;gt;
                &amp;lt;br /&amp;gt;
            
                &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Remover&amp;quot; id=&amp;quot;btnEnviar&amp;quot; name=&amp;quot;btnEnviar&amp;quot; /&amp;gt;
            
            &amp;lt;/fieldset&amp;gt;
        &amp;lt;/form&amp;gt;
        &amp;lt;div id=&amp;quot;ResultadoOperacao&amp;quot; style=&amp;quot;font-family:Arial; letter-spacing:-1px; font-weight:bold; color:#1611b9&amp;quot;&amp;gt;
            @RespostaFinal
        &amp;lt;/div&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt; Listagem 4. Removendo registro da base de dados&amp;nbsp; &amp;nbsp;O processo de remo&#231;&#227;o de dados de uma tabela se d&#225; atrav&#233;s da escrita da diretiva DELETE (acess&#237;vel atrav&#233;s da linguagem SQL). Poucas mudan&#231;as s&#227;o trazidas pelo c&#243;digo da Listagem 4. A principal delas &#233; a troca de &amp;quot;UPDATE&amp;quot; por &amp;quot;DELETE&amp;quot; na execu&#231;&#227;o do m&#233;todo &amp;quot;Execute&amp;quot;. As Figuras 6 e 7 apresentam o resultado do processamento do c&#243;digo apresentado pela Listagem 4. &amp;nbsp; &amp;nbsp;Figura 6. Painel que exibe os dados a serem removidos &amp;nbsp; &amp;nbsp;Figura 7. Registro removido do banco de dados &amp;nbsp;Uma observa&#231;&#227;o oportuna neste ponto &#233;: ao escrever query&#39;s de atualiza&#231;&#227;o e remo&#231;&#227;o de dados, quase sempre deseja-se realizar este tipo de opera&#231;&#227;o para registros espec&#237;ficos e neste contexto, a utiliza&#231;&#227;o da cl&#225;usula &amp;quot;WHERE&amp;quot; &#233; fundamental. O esquecimento ou desconsidera&#231;&#227;o desta cl&#225;usula implicar&#225; necessariamente na aplica&#231;&#227;o da opera&#231;&#227;o a todos os registros da tabela. &#39; </description>
	<link></link>
	<language>en</language>
	<pubDate>Thu, 23 May 2013 01:44:50 GMT</pubDate>
	<lastBuildDate>Thu, 23 May 2013 01:44:50 GMT</lastBuildDate>
	<generator>Rev9</generator>
	<item>
		<title>Re: ASP.NET Razor: Interagindo com bancos de dados</title>
		<description>
			<![CDATA[<p>Se liga, olha as instruções dadas (somente) para executar uma declaração no banco de dados com&nbsp;parâmetros/valores!&nbsp;<br>O código ficou muito limpo!<br>Uso até hoje uma biblioteca de dados que fizemos para gerenciar todos os processos em relação ao banco, principalmente na DAL. Mas se não houver qualquer problema ou nível de vulnerabilidade, a programação fica muito simples!&nbsp; <img src='http://ecn.channel9.msdn.com/o9/content/images/emoticons/emotion-8.gif?v=c9' alt='Expressionless' /></p><p><pre class="brush: csharp">
var ConexaoBD = Database.Open(&quot;DBLoja&quot;);
var SentencaSQL = &quot;INSERT INTO tbProdutos(Nome, ValorUnitario) VALUES (@0, @1)&quot;;
var ResutadoBD = ConexaoBD.Execute(SentencaSQL, Nome, ValorUnitario.AsFloat());</pre></p><p>Estou a dizer que do jeito que o mercado anda, logo as pessoas que trabalham nos departamentos que utilizam da tecnologia farão o trabalho do programador! <br><img src='http://ecn.channel9.msdn.com/o9/content/images/emoticons/emotion-2.gif?v=c9' alt='Big Smile' /> <br><br>Vixi, aí ficaremos sem emprego! kkkkk&nbsp; <img src='http://ecn.channel9.msdn.com/o9/content/images/emoticons/emotion-9.gif?v=c9' alt='Crying' /></p><p>posted by terra</p>]]>
		</description>
		<link>http://channel9.msdn.com/posts/ASPNET-Razor-Interagindo-com-bancos-de-dados#c634729601978774393</link>
		<pubDate>Fri, 18 May 2012 17:49:57 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/posts/ASPNET-Razor-Interagindo-com-bancos-de-dados#c634729601978774393</guid>
		<dc:creator>terra</dc:creator>
	</item>
</channel>
</rss>