<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Diário de Códigos &#187; ADO.NET</title>
	<atom:link href="http://diariodecodigos.info/category/net/ado-net/feed/" rel="self" type="application/rss+xml" />
	<link>http://diariodecodigos.info</link>
	<description>Codigos Fonte, Artigos e Dicas</description>
	<lastBuildDate>Tue, 03 May 2011 17:42:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Editando, Salvando e Atualizando o App.Config em Execução</title>
		<link>http://diariodecodigos.info/2010/02/editando-salvando-e-atualizando-o-app-config-em-execucao/</link>
		<comments>http://diariodecodigos.info/2010/02/editando-salvando-e-atualizando-o-app-config-em-execucao/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 17:15:03 +0000</pubDate>
		<dc:creator>Alexandre Santos</dc:creator>
				<category><![CDATA[ADO.NET]]></category>
		<category><![CDATA[App.config]]></category>
		<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://diariodecodigos.info/?p=885</guid>
		<description><![CDATA[Problema: Ao montar um aplicativo de relatório, consultando o banco de dados (MySQL) eu precisava iniciar a conexão com o banco de dados mostrando em uma label (&#8220;status&#8221;) se o aplicativo tinha conseguido acessar o database ou não. Caso não, o usuário poderá trocar o endereço do servidor, usuário, senha e schema manualmente. Se ao]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><a href="http://diariodecodigos.info/wp-content/uploads/2009/09/C.png"><img class="aligncenter size-full wp-image-482" style="margin-top: 2px; margin-bottom: 2px;" title="C#" src="http://diariodecodigos.info/wp-content/uploads/2009/09/C.png" alt="" width="550" height="57" /></a><strong>Problema:</strong> Ao montar um aplicativo de relatório, consultando o banco de dados (MySQL) eu precisava iniciar a conexão com o banco de dados mostrando em uma label (&#8220;status&#8221;) se o aplicativo tinha conseguido acessar o database ou não.</p>
<p style="text-align: left;">Caso não, o usuário poderá trocar o endereço do servidor, usuário, senha e schema manualmente.</p>
<p style="text-align: left;">Se ao trocar os dados a conexão for efetuada com sucesso, salvar uma connectionString no app.config com os novos dados de conexão, para relembrar ao reiniciar o aplicativo.</p>
<p style="text-align: left;">Agora vamos por a mão na massa:<span id="more-885"></span></p>
<ol>
<li>Cria a interface do usuário, no meu caso fico da seguinte maneira:<br />
Figura 1</li>
<li>Criar o arquivo <strong>app.config</strong>:
<pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;
&lt;configuration&gt;

  &lt;!-- A sessão a baixo armazena os valores de conexão para serem amostrados nos textBox   --&gt;
  &lt;appSettings&gt;
    &lt;add key=&quot;hostDB&quot; value=&quot;nevada&quot; /&gt;
    &lt;add key=&quot;userDB&quot; value=&quot;alexandre&quot; /&gt;
    &lt;add key=&quot;passwdDB&quot; value=&quot;123456&quot; /&gt;
    &lt;add key=&quot;schemaDB&quot; value=&quot;ddc&quot; /&gt;
  &lt;/appSettings&gt;

  &lt;!-- A sessão abaixo armazena a connectionString utilizada para efetuar a conexão --&gt;
  &lt;connectionStrings&gt;
    &lt;add  name =&quot;ddcConnectionString&quot;
          connectionString =&quot;server=nevada;User Id=alexandre;password=123456;Persist Security Info=True;database=ddc&quot;
          providerName =&quot;MySql.Data.MySqlClientt&quot;  /&gt;
  &lt;/connectionStrings&gt;

&lt;/configuration&gt;
</pre>
</li>
<li>No meu caso eu dei preferência a criar uma classe chamada &#8220;<strong>Database</strong>&#8221; para se uma espécie de &#8220;Connection Factory&#8221;. Mas só tomei essa decisão por estar trabalhando com <strong>ADO.NET</strong>
<pre class="brush: csharp;">
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Configuration;
using System.Data;
using System.Data.Common;
using MySql.Data;
using MySql.Data.MySqlClient;

namespace Relatorios.Classes
{
    class Database
    {
        /// &lt;summary&gt;
        /// Variável onde fica armazenado o Objeto da classe, para ser utilizado no padrão singleton
        /// &lt;/summary&gt;
        private static Database instance;
        String strConn = ConfigurationManager.ConnectionStrings[&quot;awuConnectionString&quot;].ConnectionString;
        MySqlConnection conn = new MySqlConnection();
        MySqlConnectionStringBuilder myCSB = new MySqlConnectionStringBuilder();

        /// &lt;summary&gt;
        /// Propriedade que armazena a instância da classe
        /// &lt;/summary&gt;
        private Database() { }

        /// &lt;summary&gt;
        /// Método get que fornece a instância da classe (Padrão Singleton, lembrando que não existe o método 'set' neste caso)
        /// &lt;/summary&gt;
        public static Database Instance
        {
            get
            {
                if (instance == null)
                {
                    instance = new Database();
                }
                return instance;
            }
        }

        // Fim da implementação do padrão singleton

        /// &lt;summary&gt;
        /// Endereço do servidor do Banco de Dados
        /// &lt;/summary&gt;
        public String hostDB { get; set; }
        /// &lt;summary&gt;
        /// Usuário do Banco de dados
        /// &lt;/summary&gt;
        public String userDB { get; set; }
        /// &lt;summary&gt;
        /// Senha para acessar o Banco de Dados
        /// &lt;/summary&gt;
        public String passwdDB { get; set; }
        /// &lt;summary&gt;
        /// Schema a ser acessado no Banco de Dados
        /// &lt;/summary&gt;
        public String schemaDB { get; set; }

        /// &lt;summary&gt;
        /// Cria a conexão com o banco de dados e retorna um objeto do tipo DBConnection (System.Data.Common)
        /// &lt;/summary&gt;
        /// &lt;returns&gt;DbConnection&lt;/returns&gt;
        public DbConnection connectar()
        {

            try
            {
                conn.ConnectionString = strConn;
                conn.Open(); // Abrindo conexão...
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
                // Se a conexão ñ for bem sucedida, tenta usar os parâmetros da classe
                if (conn.State != ConnectionState.Open)
                {
                    // Cria uma nova string de conexão com o MySQLConnectionStringBuilder
                    myCSB.Server = this.hostDB;
                    myCSB.UserID = this.userDB;
                    myCSB.Password = this.passwdDB;
                    myCSB.Database = this.schemaDB;

                    // Passa a nova ConnectionString para o objeto de conexão
                    conn.ConnectionString = myCSB.ConnectionString;
                    try
                    {
                        conn.Open(); // Tenta se conectar novamente
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }

            return conn;
        }

        /// &lt;summary&gt;
        /// Cria uma string de conexão e retorna-o
        /// &lt;/summary&gt;
        /// &lt;returns&gt;string&lt;/returns&gt;
        public string createStringConnection()
        {

            myCSB.Server = this.hostDB;
            myCSB.UserID = this.userDB;
            myCSB.Password = this.passwdDB;
            myCSB.Database = this.schemaDB;

            return myCSB.ConnectionString;
        }
    }
}
</pre>
</li>
<li>Nesse projeto, eu estou utilizando windows form, abaixo segue a imagem do Form principal (o primeiro a ser aberto), mapeado com o nome dos objetos mais importantes:<br />
<a href="http://diariodecodigos.info/wp-content/uploads/2010/02/windowsForm.jpg"><img class="aligncenter size-full wp-image-895" style="margin-top: 1px; margin-bottom: 1px; border: 1px solid black;" title="windowsForm" src="http://diariodecodigos.info/wp-content/uploads/2010/02/windowsForm.jpg" alt="" width="492" height="386" /></a></li>
<li>Agora segue o código do form, fazendo a mágica&#8230;
<pre class="brush: csharp;">
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Common;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Configuration;
using MySql.Data;
using MySql.Data.MySqlClient;

namespace Relatorios
{
    public partial class FMain : Form
    {

        public FMain()
        {
            InitializeComponent();
        }

        // Busca o arquivo de configuração
        Configuration configFile = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

       // Ao abrir a janela principal, executar:
        private void FMain_Load(object sender, EventArgs e)
        {
            // Pucha as variáveis pré definidas do app.config
            txtServer.Text = ConfigurationManager.AppSettings[&quot;hostDB&quot;];
            txtUser.Text = ConfigurationManager.AppSettings[&quot;userDB&quot;];
            txtPassword.Text = ConfigurationManager.AppSettings[&quot;passwdDB&quot;];
            txtDatabase.Text = ConfigurationManager.AppSettings[&quot;schemaDB&quot;];

            // Tentar se conectar
            Classes.Database db = Classes.Database.Instance;
            DbConnection conn = db.connectar();

            if (conn.State == ConnectionState.Open)
            {
                lblStatus.Text = &quot;Conectado&quot;;
                lblStatus.ForeColor = Color.Blue;
            }
            else
            {
                lblStatus.Text = &quot;Não foi possível conectar ao Banco de Dados&quot;;
                lblStatus.ForeColor = Color.Red;
            }

        }

        /** Ao clicar no botão &quot;connectar&quot;, criar a conexão com os parâmetros
         *   passados pelo usuário na janela principal
        */
        private void button1_Click(object sender, EventArgs e)
        {
            AppSettingsSection appSetSec = configFile.AppSettings;

            Classes.Database db = Classes.Database.Instance;
            db.hostDB = txtServer.Text;
            db.userDB = txtUser.Text;
            db.passwdDB = txtPassword.Text;
            db.schemaDB = txtDatabase.Text;

            DbConnection conn = db.connectar();

            if (conn.State == ConnectionState.Open)
            {
                lblStatus.Text = &quot;Conectado&quot;;
                lblStatus.ForeColor = Color.Blue;
                appSetSec.Settings[&quot;hostDB&quot;].Value = txtServer.Text;
                appSetSec.Settings[&quot;userDB&quot;].Value = txtUser.Text;
                appSetSec.Settings[&quot;passwdDB&quot;].Value = txtPassword.Text;
                appSetSec.Settings[&quot;schemaDB&quot;].Value = txtDatabase.Text;

                // Retorna a seção do connectionStrings.
                ConnectionStringsSection csSection = configFile.ConnectionStrings;

                // apaga a connectionString atual
                csSection.ConnectionStrings.Remove(&quot;awuConnectionString&quot;);

                // adiciona a nova connectionString
                csSection.ConnectionStrings.Add(new ConnectionStringSettings(&quot;awuConnectionString&quot;, &quot;server=&quot; + txtServer.Text + &quot;;User Id=&quot; + txtUser.Text + &quot;;password=&quot; + txtPassword.Text + &quot;;Persist Security Info=True;database=&quot; + txtDatabase.Text + &quot;&quot;, &quot;MySql.Data.MySqlClient&quot;));

                // Salva a nova connectionStriong
                configFile.Save();

                // Atualiza a nova seção (faz o aplicativo reler do HD a connectionString se for utilizada novamente
                ConfigurationManager.RefreshSection(&quot;connectionStrings&quot;);
                // Atualiza a seção do appString também
                ConfigurationManager.RefreshSection(&quot;appSettings&quot;);
            }
            else
            {
                lblStatus.Text = conn.ConnectionString;
            }

        }

        // Item do menu da caixa de dialogo &quot;Sobre&quot;
        private void sobreToolStripMenuItem_Click(object sender, EventArgs e)
        {
            AboutBox abox = new AboutBox();
            abox.ShowDialog();
        }

        // Item do menu da janela de relatório &quot;Resumo Financeiro Angolano&quot;
        private void angolanoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Academicos.frmResumoFinanceiroAng frmReport = new Relatorios.Academicos.frmResumoFinanceiroAng();
            frmReport.Show();
        }

    }
}
</pre>
</li>
</ol>
<p>Pronto!</p>
<p>Quero agradecer e dar créditos também ao nosso amigo <strong>Paulo Diogo</strong> que me ajudou muito a fazer isso.</p>
<p>Abraços&#8230;.</p>
]]></content:encoded>
			<wfw:commentRss>http://diariodecodigos.info/2010/02/editando-salvando-e-atualizando-o-app-config-em-execucao/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Breve Introdução a Arquitetura ADO.NET</title>
		<link>http://diariodecodigos.info/2009/07/breve-introducao-a-arquitetura-ado-net/</link>
		<comments>http://diariodecodigos.info/2009/07/breve-introducao-a-arquitetura-ado-net/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 16:49:00 +0000</pubDate>
		<dc:creator>Alexandre Santos</dc:creator>
				<category><![CDATA[ADO.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Visual Studio 2008]]></category>

		<guid isPermaLink="false">http://diariodecodigos.wordpress.com/2009/07/09/breve-introducao-a-arquitetura-ado-net/</guid>
		<description><![CDATA[A arquitetura ADO.NET foi criada com o objetivo de tratar o acesso aos dados e a manipulação deles, todos os componentes estão inclusos no Namespace System.Data, dentro dela temos basicamente duas principais atrações que são o DataSet e o Provedor .NET que é um conjunto de componentes onde inclui os objetos Connection, Command, DataReader e]]></description>
			<content:encoded><![CDATA[<p>A arquitetura <strong>ADO.NET</strong> foi criada com o objetivo de tratar o acesso aos dados e a manipulação deles, todos os componentes estão inclusos no Namespace <strong>System.Data</strong>, dentro dela temos basicamente duas principais atrações que são o DataSet e o Provedor .NET que é um conjunto de componentes onde inclui os objetos <strong>Connection</strong>, <strong>Command</strong>, <strong>DataReader</strong> e <strong>DataAdapter</strong>.</p>
<p><span id="more-21"></span></p>
<p>Ao instalar o Visual Studio você tem basicamente três maneiras de acesso a base de dados são elas o: <strong>OLE DB</strong>, <strong>SQL</strong> e <strong>OBDC</strong>.</p>
<p>Cada objeto do <strong>ADO.NET</strong> tem uma versão para cada driver de acesso dados, sendo assim se você for usar <strong>SQL Server</strong> vai ter o objeto <strong>SqlConnection</strong>, o <strong>OLE</strong> vai ter o <strong>OleDBConnection</strong> e assim por diante.</p>
<p>Todos os recursos da arquitetura <strong>.NET</strong> podem ser acessados através de <strong>Namespaces</strong>:</p>
<p><strong>System.Data</strong> – essa você vai usar em 100% das vezes, obtém as classes principais pra usar DataSet e DataRelation.</p>
<p><strong>System.Data.Common</strong> – Essa como o próprio nome disse são calsses comuns</p>
<p><strong>System.Data.OleDb</strong> – classes para conexão com o fornecedor OLE DB.</p>
<p>E essa lista se estende, principalmente quando é instalado drivers de outros banco de dados, para conhecer não só essas, mas todas as classes e namespaces disponíveis no seu Visual Studio pressione <strong>CTRL + W + J</strong> para abrir o Object Browser.</p>
<p style="text-align: center;">Esse é uma imagem sobre a Arquitetura <strong>ADO.NET</strong> retirada da documentação oficial.</p>
<div id="attachment_113" class="wp-caption aligncenter" style="width: 413px"><img class="size-full wp-image-113" title="Arquitetura ADO.NET" src="http://diariodecodigos.info/wp-content/uploads/2009/07/Arquitetura-NET1.png" alt="Arquitetura ADO.NET" width="403" height="209" /><p class="wp-caption-text">Arquitetura ADO.NET</p></div>
<p><strong>Descrevendo os principais componentes:</strong></p>
<p>Antes de mais nada é necessário entender que esses componentes são comuns a todos os tipos de conexões com o banco de dados, se você for se conectar a um servidor <strong>SQL Server</strong> vai usar o <strong>SqlConnection</strong>, ao <strong>Mysql</strong> vai utilizar o <strong>MySqlconenction</strong>, o <strong>Oracle</strong> o <strong>OracleConnection</strong> e assim por diante.</p>
<p><strong>Connection</strong> -&gt; Como você já deve ter adivinhado esse objeto serve somente para fazer a conexão com o Banco de Dados, cada conexão com qualquer Banco de dados Requer um String de Conexão, você pode consultar esse site <a href="http://www.connectionstrings.com" target="_blank">http://www.connectionstrings.com/</a> para ver as mais variadas Connection String para diversos Banco de Dados.</p>
<p><strong>Command</strong> -&gt; Esse objeto representa um Statement SQL ou Stored Procedure para ser excutado no banco de dados, normalmenete você indica a ele qual conexão vi utilizar e passa a Query para ser executada no banco de dados, simples assim.</p>
<p><strong>DataReader</strong> -&gt; Esse objeto é excelente para leitura de dados rápida, com ele você fica limitado a ler os dados somente para frente, read-only, não pode ser usado desconectado e é ultra rápido.</p>
<p><strong>DataAdapter</strong> -&gt; Este objeto é o oposto do DataReader, com ele você pode obter dados de seu Banco de Dados, Fazer consultas, acessar a fonte de dados através de uma conexão, preencher um DataSet, ler os dados do DataSet, Verificar quais dados foram alterados, enviar ao banco de dados os dados para atualizar na fonte os mesmo, uff.. pelo que você já viu vai utilizar bastante ele.</p>
<p><strong>DataSet</strong> -&gt; Á.. esse objeto “é o que há” dentro da arquitetura ADO.NET (bem é o que diz a Microsoft) ele é a representação ou cópia fiel de seu banco de dados dentro da aplicação! Isso mesmo dentro dele você tem uma tabela, um relacionamento, linhas, colunas, assim como um banco de dados, o legal de tudo é que você pode combinar diferentes fonte de dados no mesmo DataSet, assim você pode ter tabelas do MySql, junto com “tabelas” de um arquivo do Excel, junto com mais um monte de coisas!!</p>
<p>Você normalmente utiliza o DataAdapter para preencher um DataSet, depois disso você pode até fechar sua conexão e modificar os dados sem estar ligado diretamente com a sua fonte de dados! Muito legal né? Imagina o quanto isso deve consumir de memória se não for feito um bom planejamento?!?! Rsrsrs… mas é muito interessante!</p>
<p>Bem.. isso é um pequena introdução a arquitetura, na próxima vamos ver alguns exemplos práticos. para os microsoftianos já deixo avisado que não utilizarei o SQL Server.. na maioria das vezes usaremos o MySql, SQLite e Oracle…</p>
<p><strong>Links úteis:</strong></p>
<p><a href="http://msdn.microsoft.com/en-us/library/h43ks021(VS.71).aspx" target="_blank">http://msdn.microsoft.com/en-us/library/h43ks021(VS.71).aspx</a> (Documentação Oficial do ADO.NET)</p>
<p><a href="http://www.connectionstrings.com/" target="_blank">http://www.connectionstrings.com/</a> (Exemplos de String de Conexão)</p>
<p><a href="http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28844/toc.htm" target="_blank">http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28844/toc.htm</a> (Guia do Desenvolvedor .NET da Oracle)</p>
<p><a href="http://dev.mysql.com/doc/refman/5.1/en/connector-net.html" target="_blank">http://dev.mysql.com/doc/refman/5.1/en/connector-net.html</a> (Manual de Referência do MySql para conexão com .NET)</p>
]]></content:encoded>
			<wfw:commentRss>http://diariodecodigos.info/2009/07/breve-introducao-a-arquitetura-ado-net/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

