<rss version="2.0" xmlns:a10="http://www.w3.org/2005/Atom"><channel><title>Dicas Técnicas BufaloInfo</title><link>http://www.bufaloinfo.com.br/</link><description>Dicas Técnicas Produzidas pela Búfalo Informática</description><item><link>http://www.bufaloinfo.com.br/dicas.asp?cod=1023</link><title>VB.NET : Criando Extensões para um Formulário</title><description>&lt;br&gt;H&amp;#225; algum tempo atr&amp;#225;s publiquei uma dica (http://www.bufaloinfo.com.br/dicas.asp?cod=870 ) sobre uma fun&amp;#231;&amp;#227;o AcharBinding, que simplifica a localiza&amp;#231;&amp;#227;o de bindings em ambientes windows forms para quando precisarmos lidar com eles.&lt;br&gt;&lt;br&gt;Com os avan&amp;#231;os do VB 9 e C# 3.0 uma fun&amp;#231;&amp;#227;o como a AcharBinding pode ser criada na forma de extension method, de forma que todo formul&amp;#225;rio possua a fun&amp;#231;&amp;#227;o dispon&amp;#237;vel.&lt;br&gt;&lt;br&gt;A fun&amp;#231;&amp;#227;o AcharBinding, bem como outras para as quais voc&amp;#234; tenha utilidade semelhante, podem ent&amp;#227;o ser compiladas em um assembly separado e referenciadas quando voc&amp;#234; necessitar, se tornando parte das classes existentes (form por exemplo), o que &amp;#233; caracter&amp;#237;stica dos extension methods.&lt;br&gt;&lt;br&gt;Veja como fica o c&amp;#243;digo em VB.NET :&lt;br&gt;&lt;br&gt;&lt;br&gt;Public Module Module1&lt;br&gt;&lt;br&gt;    &amp;lt;Extension()&amp;gt; Public Function AcharBinding(ByVal f As Form, ByVal bs As BindingSource, ByVal nomeCampo As String) As Binding&lt;br&gt;        For Each b As Binding In bs.CurrencyManager.Bindings&lt;br&gt;            If b.BindingMemberInfo.BindingField.ToUpper = nomeCampo.ToUpper Then&lt;br&gt;                Return (b)&lt;br&gt;            End If&lt;br&gt;        Next&lt;br&gt;        Return (Nothing)&lt;br&gt;    End Function&lt;br&gt;&lt;br&gt;End Module&lt;br&gt;&lt;br&gt;O primeiro par&amp;#226;metro da Function indica o tipo de objeto que ela estar&amp;#225; extendendo - Form - enquanto os demais s&amp;#227;o os par&amp;#226;metros que realmente ser&amp;#227;o necess&amp;#225;rios para sua execu&amp;#231;&amp;#227;o.&lt;br&gt;&lt;br&gt;Veja o mesmo exemplo em C#&lt;br&gt;&lt;br&gt;    static class clExtensoes&lt;br&gt;    {&lt;br&gt;&lt;br&gt;        public static Binding AcharBinding(this Form f, BindingSource bs, string nomeCampo)&lt;br&gt;        {&lt;br&gt;            foreach (Binding b in bs.CurrencyManager.Bindings)&lt;br&gt;            {&lt;br&gt;                if (b.BindingMemberInfo.BindingField.ToUpper() == nomeCampo.ToUpper())&lt;br&gt;                {&lt;br&gt;                    return (b);&lt;br&gt;                }&lt;br&gt;            }&lt;br&gt;            return (null);&lt;br&gt;        }&lt;br&gt;    }&lt;br&gt;&lt;br&gt;&lt;br&gt;Apesar da s&amp;#237;ntaxe diferente, em ambos os casos estamos utilizando o mesmo recurso - extension methods - chegando ao mesmo resultado, os formul&amp;#225;rios passar&amp;#227;o a ter o m&amp;#233;todo AcharBinding&lt;br&gt;&lt;br&gt;</description></item><item><link>http://www.bufaloinfo.com.br/dicas.asp?cod=1020</link><title>VB.NET : Organizando uma DataGridView e um toolStrip em um Formulário</title><description>&lt;br&gt;Quando inserimos uma DataGridView com dock fill junto com um toolStrip dentro de um formul&amp;#225;rio windows temos uma surpresa desagrad&amp;#225;vel : O topo da datagridview fica coberto pelo toolstrip. &lt;br&gt;&lt;br&gt;O que desejariamos - dai o dock fill - &amp;#233; que a datagridview ocupasse o espa&amp;#231;o sobrando no formul&amp;#225;rio, ao inv&amp;#233;s de ser sobreposta pelo toolstrip, que possui um dock top por default.&lt;br&gt;&lt;br&gt;A solu&amp;#231;&amp;#227;o para isso &amp;#233; bem simples : Insira um toolstripContainer no formul&amp;#225;rio, insira a grid na parte central do toolstripContainer com dock fill e o toolstrip na parte superior do toolstripContainer.&lt;br&gt;&lt;br&gt;O toolstripContainer impedir&amp;#225; que o toolstrip fique sobre o topo da grid, deixando ambos bem alinhados&lt;br&gt;&lt;br&gt;</description></item><item><link>http://www.bufaloinfo.com.br/dicas.asp?cod=1016</link><title>VB.NET : Corrigindo o erro DataGridViewComboBoxCell Value is not Valid</title><description>&lt;br&gt;Se voc&amp;#234; ainda n&amp;#227;o esbarrou com este erro, est&amp;#225; com sorte.&lt;br&gt;&lt;br&gt;Quando acontece, &amp;#233; sempre no fechamento do formul&amp;#225;rio, sendo apresentado in&amp;#250;meras vezes.&lt;br&gt;&lt;br&gt;O erro apenas acontece se o autosizemode de uma coluna do tipo datagridviewcombobox estiver definido. Se o autosizemode n&amp;#227;o for definido, o erro n&amp;#227;o acontece.&lt;br&gt;&lt;br&gt;Isso nos leva a duas situa&amp;#231;&amp;#245;es : &lt;br&gt;&lt;br&gt;O erro pode acontecer quando o autosizemode est&amp;#225; definido a n&amp;#237;vel da DataGridView e existe uma coluna do tipo ComboBox na GridView &lt;br&gt;&lt;br&gt;O erro pode acontecer quando o autosizemode est&amp;#225; definido a n&amp;#237;vel de coluna e foi definido na coluna do tipo ComboBox&lt;br&gt;&lt;br&gt;O erro ocorre porque no momento do fechamento do formul&amp;#225;rio, o formul&amp;#225;rio realiza primeiramente o dispose do datasource da coluna ComboBox. Quando o datasource &amp;#233; destruido e o autosize est&amp;#225; definido, a ComboBox precisa recalcular o seu tamanho, ent&amp;#227;o faz uma requisi&amp;#231;&amp;#227;o por dados que n&amp;#227;o est&amp;#227;o mais l&amp;#225;&lt;br&gt;&lt;br&gt;Sem d&amp;#250;vida que desligar o autoSizeMode &amp;#233; uma solu&amp;#231;&amp;#227;o, mas n&amp;#227;o desejamos isso, precisamos do autoSize&lt;br&gt;&lt;br&gt;No momento em que o formul&amp;#225;rio for fazer o dispose do datasource da comboboxColumn, a ComboBoxColumn precisa estar com o autosizemode definido como None&lt;br&gt;&lt;br&gt;Lembre-se que o autosizemode pode ser tamb&amp;#233;m definido no n&amp;#237;vel da grid, dai a diferen&amp;#231;a entre definir o autoSizeMode como None ou como NotSet&lt;br&gt;&lt;br&gt;Ent&amp;#227;o no evento form_Closed podemos simplesmente alterar o autosizemode da comboboxcolumn e com isso passaremos a poder utilizar o autoSize enquanto que o erro desaparecer&amp;#225;.&lt;br&gt;&lt;br&gt;Lembre-se que cada coluna da DataGridView possui um nome e &amp;#233; uma vari&amp;#225;vel acess&amp;#237;vel por c&amp;#243;digo. Veja como fica :&lt;br&gt;&lt;br&gt;   1: Private Sub Form1_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed&lt;br&gt;&lt;br&gt;   2:       NomeDaSuaColuna.AutoSizeMode =DataGridViewAutoSizeColumnMode.None&lt;br&gt;&lt;br&gt;   3: End Sub&lt;br&gt;&lt;br&gt;</description></item><item><link>http://www.bufaloinfo.com.br/dicas.asp?cod=958</link><title>VB.NET : Inline XML no VB.NET</title><description>&lt;br&gt;O VB.NET passou a suportar uma nova s&amp;#237;ntaxe muito interessante, que apesar de inicialmente parecer meio confusa, pode trazer novas possibilidades interessante : inline XML &lt;br&gt;&lt;br&gt;Trata-se da inser&amp;#231;&amp;#227;o de XML dentro do c&amp;#243;digo VB.NET. Veja : &lt;br&gt;&lt;br&gt;Dim db As New NorthwindDataContext &lt;br&gt;&lt;br&gt;Dim x = _ &lt;br&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt; &lt;br&gt;&amp;lt;clientes&amp;gt; &lt;br&gt;&amp;lt;%= From c In db.Customers _ &lt;br&gt;Select &amp;lt;cliente&amp;gt; &lt;br&gt;&amp;lt;empresa&amp;gt;&amp;lt;%= c.CompanyName %&amp;gt;&amp;lt;/empresa&amp;gt; &lt;br&gt;&amp;lt;contato&amp;gt;&amp;lt;%= c.ContactName %&amp;gt;&amp;lt;/contato&amp;gt;&amp;lt;/cliente&amp;gt; _ &lt;br&gt;%&amp;gt; &lt;br&gt;&amp;lt;/clientes&amp;gt; &lt;br&gt;&lt;br&gt;MsgBox(x.ToString) &lt;br&gt;&lt;br&gt;Observe que neste exemplo estou utilizando esta s&amp;#237;ntaxe em conjunto com o Linq para j&amp;#225; obter como resultado a montagem do XML de clientes. &lt;br&gt;&lt;br&gt;Muitas outras utilidades podem ser dadas a este recurso. &lt;br&gt;&lt;br&gt;</description></item><item><link>http://www.bufaloinfo.com.br/dicas.asp?cod=952</link><title>VB.NET : Truque de Síntaxe na Manipulação de XML</title><description>O VB.NET, em sua vers&amp;#227;o 9.0 (2008) passou a aceitar a escrita de XML in-line e, mais que isso, a inser&amp;#231;&amp;#227;o de c&amp;#243;digo VB.NET em meio a escrita in-line e com mais de um n&amp;#237;vel de inser&amp;#231;&amp;#227;o. &lt;br&gt;&lt;br&gt;N&amp;#227;o entendeu ? Algumas linhas de c&amp;#243;digo explicam : &lt;br&gt;&lt;br&gt;Dim x = _ &lt;br&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt; &lt;br&gt;&amp;lt;clientes&amp;gt; &lt;br&gt;&amp;lt;%= From c In db.Customers _ &lt;br&gt;Select &amp;lt;cliente&amp;gt; &lt;br&gt;&amp;lt;empresa&amp;gt;&amp;lt;%= c.CompanyName %&amp;gt;&amp;lt;/empresa&amp;gt; &lt;br&gt;&amp;lt;contato&amp;gt;&amp;lt;%= c.ContactName %&amp;gt;&amp;lt;/contato&amp;gt;&amp;lt;/cliente&amp;gt; _ &lt;br&gt;%&amp;gt; &lt;br&gt;&amp;lt;/clientes&amp;gt; &lt;br&gt;&lt;br&gt;MsgBox(x.ToString) &lt;br&gt;&lt;br&gt;Observem como o XML &amp;#233; escrito diretamente no c&amp;#243;digo VB, sem problemas, sendo inserido na vari&amp;#225;vel X, que vira um documento XML. &lt;br&gt;&lt;br&gt;No meio das tags, onde desejamos preencher com dados din&amp;#226;micos, fazemos uma inser&amp;#231;&amp;#227;o de c&amp;#243;digo VB, usando o mesmo simbolo que utiliz&amp;#225;vamos antigamente no ASP! &lt;br&gt;&lt;br&gt;Neste exemplo utilizamos linq para fazer a recupera&amp;#231;&amp;#227;o de dados para o XML. Poderiamos chamar uma fun&amp;#231;&amp;#227;o que devolvesse o XML, mas qualquer coisa diferente dessas duas op&amp;#231;&amp;#245;es ficaria bem complicado. &lt;br&gt;&lt;br&gt;Em meio ao c&amp;#243;digo linq iniciamos mais uma vez a inser&amp;#231;&amp;#227;o de XML inline - dentro do c&amp;#243;digo que j&amp;#225; est&amp;#225; inserido dentro de um XML inline - mas em determinado ponto do 2o n&amp;#237;vel de XML inline precisamos inserir os valores dos campos, ent&amp;#227;o mais uma vez abrimos uma inser&amp;#231;&amp;#227;o de c&amp;#243;digo VB para codificar a inser&amp;#231;&amp;#227;o dos valores. &lt;br&gt;&lt;br&gt;Essa escrita, apesar de eventuais restri&amp;#231;&amp;#245;es de arquitetura, pode simplificar bastante determinadas montagens de c&amp;#243;digo &lt;br&gt;</description></item><item><link>http://www.bufaloinfo.com.br/dicas.asp?cod=948</link><title>VB.NET : Criando uma Aplicação para Rodar em CD</title><description>&lt;br&gt;N&amp;#227;o &amp;#233; raro termos a necessidade de criar aplica&amp;#231;&amp;#245;es que possam ser executadas diretamente a partir do CD ao inv&amp;#233;s de terem a necessidade de serem instaladas.&lt;br&gt;&lt;br&gt;A facilidade do .NET, n&amp;#227;o exigindo chaves de registry e identificando os assemblys contidos na mesma pasta facilita bastante isso, mas ainda existe um pequeno problema : E o banco de dados ?&lt;br&gt;&lt;br&gt;Se voc&amp;#234; tentar inserir um banco de dados no CD e ler na aplica&amp;#231;&amp;#227;o, a leitura vai falhar. &amp;#201; claro que a manipula&amp;#231;&amp;#227;o do banco de dados seria uma manipula&amp;#231;&amp;#227;o s&amp;#243; para leitura, voc&amp;#234; n&amp;#227;o vai conseguir gravar, mas o problema &amp;#233; que a aplica&amp;#231;&amp;#227;o .NET precisa neste caso de um caminho para grava&amp;#231;&amp;#227;o de arquivos tempor&amp;#225;rios e como a aplica&amp;#231;&amp;#227;o est&amp;#225; sendo executada pelo CD, n&amp;#227;o consegue isso.&lt;br&gt;&lt;br&gt;Para resolver o problema e a aplica&amp;#231;&amp;#227;o funcionar com um banco de dados diretamente do CD basta alterar a string de conex&amp;#227;o. Veja como fica um exemplo de string de conex&amp;#227;o para um arquivo .SDF no CD :&lt;br&gt;&lt;br&gt;Dim s as string = &amp;quot;Data Source=|DataDirectory|\bancoTeste.sdf;Temp Directory=&amp;quot; &amp;amp; My.Computer.FileSystem.SpecialDirectories.Temp&lt;br&gt;&lt;br&gt;Observe que neste exemplo &amp;#233; feito o uso do My para obter o caminho do diret&amp;#243;rio Temp do sistema onde a aplica&amp;#231;&amp;#227;o estiver rodando. No C#, como n&amp;#227;o existe o My, teriamos o seguinte :&lt;br&gt;&lt;br&gt;string s=&amp;quot;Data Source=|DataDirectory|\bancoTeste.sdf;Temp Directory=&amp;quot; + System.IO.Path.GetTempPath();&lt;br&gt;&lt;br&gt;</description></item><item><link>http://www.bufaloinfo.com.br/dicas.asp?cod=947</link><title>VB.NET : Controlando a Altura de uma TextBox</title><description>&lt;br&gt;Apesar da largura de uma caixa de texto poder ser controlada livremente, isso n&amp;#227;o acontece com a altura. A altura &amp;#233; normalmente fixa, n&amp;#227;o conseguimos altera-la nem mesmo alterando a propriedade height do objeto.&lt;br&gt;&lt;br&gt;A &amp;#250;nica excess&amp;#227;o &amp;#233; quando a caixa de texto &amp;#233; definida como multi-line. Nesse caso podemos alterar a altura livremente mas teremos que lidar com a tecla enter dentro da caixa.&lt;br&gt;&lt;br&gt;Isso acontece porque a propriedade autosize da caixa de texto &amp;#233; definida como true por default e n&amp;#227;o aparece em design time. Desta forma n&amp;#227;o conseguimos manipular esta propriedade na janela de propriedades.&lt;br&gt;&lt;br&gt;Podemos facilmente criar uma nova textbox alterando esta caracter&amp;#237;stica :&lt;br&gt;&lt;br&gt;Public Class TextBoxEx&lt;br&gt;    Inherits TextBox&lt;br&gt;&lt;br&gt;   &amp;lt;EditorBrowsable(EditorBrowsableState.Always), Browsable(True), &lt;br&gt;DefaultValue(True)&amp;gt; _&lt;br&gt;  Public Overrides Property AutoSize() As Boolean&lt;br&gt;      Get&lt;br&gt;         Return MyBase.AutoSize&lt;br&gt;      End Get&lt;br&gt;      Set(ByVal value As Boolean)&lt;br&gt;         MyBase.AutoSize = value&lt;br&gt;      End Set&lt;br&gt;   End Property&lt;br&gt;&lt;br&gt;End Class&lt;br&gt;&lt;br&gt;Neste exemplo apenas adicionamos atributos na propriedade autosize da nossa nova textbox. Assim sendo, ao criarmos uma textbox no formul&amp;#225;rio, se criarmos nossa nova textbox ao inv&amp;#233;s da tradicional iremos encontrar a propriedade autosize, podendo defini-la como false e alterar a altura de uma textbox mesmo sem ter que mudar a propriedade multiline&lt;br&gt;&lt;br&gt;</description></item><item><link>http://www.bufaloinfo.com.br/dicas.asp?cod=885</link><title>VB.NET : Utilizando Button Columns na DataGridView</title><description>&lt;br&gt;A DataGridview para desenvolvimento Windows se tornou muito mais vers&amp;#225;til que antigas grids de outros ambientes. Temos v&amp;#225;rios tipos de colunas, como por exemplo uma coluna do tipo button.&lt;br&gt;&lt;br&gt;Mas para que uma coluna do tipo button na grid ?&lt;br&gt;&lt;br&gt;Simples, para que o usu&amp;#225;rio possa realizar uma tarefa com a clara percep&amp;#231;&amp;#227;o na interface de que a tarefa ser&amp;#225; feita sobre um registro espec&amp;#237;fico.&lt;br&gt;&lt;br&gt;O primeiro problema que surge &amp;#233; como preencher o texto do bot&amp;#227;o. Existe uma propriedade Text na Button Column, por&amp;#233;m o que &amp;#233; escrito nela n&amp;#227;o aparece de imediato como texto do bot&amp;#227;o. O truque &amp;#233; simples : Alterar a propriedade UseColumnTextForButtonValue&lt;br&gt;&lt;br&gt;Primeiro problema resolvido, agora precisamos programar o click do bot&amp;#227;o. Mas como ?&lt;br&gt;&lt;br&gt;Para programar o click deste bot&amp;#227;o devemos utilizar o evento cellcontentclick da datagridview. Este evento, por&amp;#233;m, n&amp;#227;o &amp;#233; restrito ao bot&amp;#227;o, mas a qualquer c&amp;#233;lula. Portanto dentro do evento CellContentClick precisamos testar se o tipo de coluna onde aconteceu o click &amp;#233; uma button column.&lt;br&gt;&lt;br&gt;Por&amp;#233;m caso voc&amp;#234; se empolgue e resolva utilizar mais de uma button column ser&amp;#225; necess&amp;#225;rio ainda testar o nome da button column para poder realizar cada a&amp;#231;&amp;#227;o.&lt;br&gt;&lt;br&gt;Veja como fica :&lt;br&gt;&lt;br&gt;    Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick&lt;br&gt;        If TypeOf DataGridView1.Columns(e.ColumnIndex) Is DataGridViewButtonColumn Then&lt;br&gt;            If DataGridView1.Columns(e.ColumnIndex).Name = &amp;quot;minhacoluna&amp;quot; Then&lt;br&gt;&lt;br&gt;            End If&lt;br&gt;        End If&lt;br&gt;    End Sub&lt;br&gt;&lt;br&gt;&lt;br&gt;</description></item><item><link>http://www.bufaloinfo.com.br/dicas.asp?cod=875</link><title>VB.NET : ToolStrip Container com MDI</title><description>&lt;br&gt;Se voc&amp;#234;s j&amp;#225; passaram por esta situa&amp;#231;&amp;#227;o, j&amp;#225; devem ter ficado desanimados com o fato de que n&amp;#227;o funciona. O Toolstrip Container preenche todo o form, sendo que a &amp;#225;rea de preenchimento dele fica sobre outros objetos do MDI.&lt;br&gt;&lt;br&gt;Assim sendo, quando abrimos um form MDI child, o form fica por tr&amp;#225;s do toolstrip container, ou seja, inutiliz&amp;#225;vel.&lt;br&gt;&lt;br&gt;Para resolver isso &amp;#233; simples : N&amp;#227;o usar o toolstripcontainer.&lt;br&gt;&lt;br&gt;Existe um outro objeto chamado ToolStrip Panel, que podemos utilizar no lugar do toolstripContainer.  O ToolStrip Panel &amp;#233; o objeto que existe internamente ao toolstripContainer e forma cada um dos lados do ToolstripContainer.&lt;br&gt;&lt;br&gt;O ToolStrip Panel n&amp;#227;o aparece por padr&amp;#227;o na toolbox, ent&amp;#227;o voc&amp;#234; precisa inseri-lo, clicando com o bot&amp;#227;o direito na toolbox, choose items e localizando o Toolstrip Panel.&lt;br&gt;&lt;br&gt;Feito isso, inserimos 4 toolStrip Panels. Devemos inserir um por um cuidadosamente, fazendo o dock de cada um em uma diferente lateral do formul&amp;#225;rio.&lt;br&gt;&lt;br&gt;Manipular os ToolStrip Panels pode ser algo um pouco chato, eventualmente pode at&amp;#233; mesmo ser necess&amp;#225;rio deixar a ToolStrip fora do Panel e fazer a liga&amp;#231;&amp;#227;o por c&amp;#243;digo, +/- assim : &lt;br&gt;&lt;br&gt;ToolStripPanel2.Controls.Add(ToolStrip1)&lt;br&gt;&lt;br&gt;Por&amp;#233;m com isso feito temos o efeito dos toolstrips podendo ser movimentados pela aplica&amp;#231;&amp;#227;o mesmo em um formul&amp;#225;rio MDI.&lt;br&gt;&lt;br&gt;</description></item><item><link>http://www.bufaloinfo.com.br/dicas.asp?cod=874</link><title>VB.NET : Cuidado com a pasta App_Data em aplicações windows</title><description>&lt;br&gt;Um problema recorrente em muitos f&amp;#243;runs &amp;#233; um problema com o diret&amp;#243;rio App_Data utilizado em aplica&amp;#231;&amp;#245;es windows.&lt;br&gt;&lt;br&gt;A pasta App_Data tem uso t&amp;#237;pico em aplica&amp;#231;&amp;#245;es web, mas seu uso n&amp;#227;o &amp;#233; muito recomend&amp;#225;vel em aplica&amp;#231;&amp;#245;es windows.&lt;br&gt;&lt;br&gt;Uma aplica&amp;#231;&amp;#227;o windows, quando &amp;#233; executada pelo Visual Studio, &amp;#233; compilada e seu execut&amp;#225;vel copiado para a pasta bin (podendo variar em uma sub pasta debug ou release).&lt;br&gt;&lt;br&gt;Ocorre que o banco de dados utilizado na pasta App_Data tamb&amp;#233;m &amp;#233; copiado para dentro da pasta bin.&lt;br&gt;&lt;br&gt;Consequencia : Todos os dados que voc&amp;#234; alterar, incluir,deletar enquanto est&amp;#225; usando a aplica&amp;#231;&amp;#227;o ser&amp;#227;o perdidos na execu&amp;#231;&amp;#227;o seguinte, pois todas as altera&amp;#231;&amp;#245;es s&amp;#227;o feitas no banco que est&amp;#225; abaixo do Bin, enquanto que na execu&amp;#231;&amp;#227;o seguinte o banco do App_Data ser&amp;#225; novamente copiado para a pasta abaixo do Bin, apagando os dados.&lt;br&gt;&lt;br&gt;Isso se tornou uma pergunta muito comum em f&amp;#243;runs, &amp;quot;minha aplica&amp;#231;&amp;#227;o n&amp;#227;o est&amp;#225; gravando nada !&amp;quot;.&lt;br&gt;&lt;br&gt;Todo esse equ&amp;#237;voco tem uma causa e uma solu&amp;#231;&amp;#227;o : As vers&amp;#245;es express que desenvolvem para windows (VB.NET Express, C# Express, etc.) n&amp;#227;o fazem acesso direto a um servidor SQL. As vers&amp;#245;es Express apenas permitem o acesso (usando os wizards, por c&amp;#243;digo tudo pode) a arquivos de dados do SQL Server (arquivos .MDF) sem v&amp;#237;nculo (n&amp;#227;o attachados) com um servidor.&lt;br&gt;&lt;br&gt;Para contornar este problema, ap&amp;#243;s criar o arquivo de banco de dados na pasta App_Data, copie-o para outro local, fora da pasta do projeto. Fa&amp;#231;a um v&amp;#237;nculo direto ao caminho onde o arquivo estiver.&lt;br&gt;&lt;br&gt;Fazendo isso o VB ir&amp;#225; perguntar se voc&amp;#234; deseja copiar o arquivo para dentro da sua aplica&amp;#231;&amp;#227;o (e ainda avisa, em letras mi&amp;#250;das, que isso tem consequencias), basta dizer n&amp;#227;o para n&amp;#227;o mais sofrer com este problema com o arquivo de dados.&lt;br&gt;&lt;br&gt;</description></item></channel></rss>