<?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; .NET</title>
	<atom:link href="http://diariodecodigos.info/category/net/feed/" rel="self" type="application/rss+xml" />
	<link>http://diariodecodigos.info</link>
	<description>Codigos Fonte, Artigos e Dicas</description>
	<lastBuildDate>Wed, 11 Apr 2012 18:56:43 +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>Criptografar Connection String (App.Confing / Web.Config)</title>
		<link>http://diariodecodigos.info/2010/10/criptografar-connection-string-app-confing-web-config/</link>
		<comments>http://diariodecodigos.info/2010/10/criptografar-connection-string-app-confing-web-config/#comments</comments>
		<pubDate>Sun, 03 Oct 2010 02:47:19 +0000</pubDate>
		<dc:creator>paulodiogo</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>

		<guid isPermaLink="false">http://diariodecodigos.info/?p=1109</guid>
		<description><![CDATA[public static void ProtectSection(String sSectionName) { // Open the app.config file. Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); // Get the section in the file. ConfigurationSection section = config.GetSection(sSectionName); // If the section exists and the section is not readonly, then protect the section. if (section != null) { if (!section.IsReadOnly()) { // Protect the section. section.SectionInformation.ProtectSection(&#38;quot;RsaProtectedConfigurationProvider&#38;quot;); section.SectionInformation.ForceSave]]></description>
			<content:encoded><![CDATA[<pre class="brush: csharp;">

public static void ProtectSection(String sSectionName)
 {
 // Open the app.config file.
 Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
 // Get the section in the file.
 ConfigurationSection section = config.GetSection(sSectionName);
 // If the section exists and the section is not readonly, then protect the section.
 if (section != null)
 {
 if (!section.IsReadOnly())
 {
 // Protect the section.
 section.SectionInformation.ProtectSection(&amp;quot;RsaProtectedConfigurationProvider&amp;quot;);
 section.SectionInformation.ForceSave = true;
 // Save the change.
 config.Save(ConfigurationSaveMode.Modified);
 }
 }

&lt;span id=&quot;more-1109&quot;&gt;&lt;/span&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://diariodecodigos.info/2010/10/criptografar-connection-string-app-confing-web-config/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>ASP.NET + Oracle &#8211; Parte 1</title>
		<link>http://diariodecodigos.info/2009/12/asp-net-oracle-parte-1/</link>
		<comments>http://diariodecodigos.info/2009/12/asp-net-oracle-parte-1/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 20:00:00 +0000</pubDate>
		<dc:creator>Alexandre Santos</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[ADO.NET]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://diariodecodigos.info/?p=775</guid>
		<description><![CDATA[Aprenda a instalar o ODAC (Oracle Data Access Component) no windows junto com o Visual Studio 2008 e construir um aplicativo ASP.NET consultando informações no Oracle Database]]></description>
			<content:encoded><![CDATA[<p><a href="http://diariodecodigos.info/wp-content/uploads/2009/12/ASPNET.png"><img class="aligncenter size-full wp-image-776" title="ASPNET" src="http://diariodecodigos.info/wp-content/uploads/2009/12/ASPNET.png" alt="ASPNET" width="550" height="57" /></a></p>
<p><span id="more-775"></span></p>
<p>Deixo claro que não irei a fundo sobre a Administração e a Instalação do Oracle Database , neste artigo estou usando a versão <strong>10g</strong> dentro de uma máquina virtual com <strong>CentOS 5.3, </strong>mas iremos abordar nesta primeira parte sobre a instalação do <strong>ODAC </strong>(Oracle Data Access Components) e alguns dos <em>principais conceitos sobre o Oracle Database</em>.</p>
<h2><span style="color: #0000ff;">Cenário Atual</span></h2>
<ul>
<li><strong>Oracle Database 10.2g</strong>
<ul>
<li>Enterprise Edition</li>
</ul>
</li>
<li><strong>Oracle 11g ODAC 11.1.0.7.20 with Oracle Developer Tools for Visual Studio </strong>
<ul>
<li>Oracle Developer Tools for Visual Studio 11.1.0.7.20</li>
<li>Oracle Data Provider for .NET 2.0 11.1.0.7.20</li>
<li>Oracle Providers for ASP.NET 11.1.0.7.20</li>
<li>Oracle Database Extensions for .NET 2.0 11.1.0.7.20 &#8212; Somente para upgrade</li>
<li>Oracle Provider for OLE DB 11.1.0.7.20</li>
<li>Oracle Objects for OLE 11.1.0.7.20</li>
<li>Oracle Services for Microsoft Transaction Server 11.1.0.7.20</li>
<li>Oracle ODBC Driver 11.1.0.7.0</li>
<li>Oracle SQL*Plus 11.1.0.7.0</li>
<li>Oracle Instant Client 11.1.0.7.0</li>
</ul>
</li>
<li><strong>Visual Studio 2008 </strong>
<ul>
<li>.NET Framework 3.5 SP1</li>
</ul>
</li>
</ul>
<h2><span style="color: #0000ff;">Instalando o ODAC</span></h2>
<p><strong>Passo 1 -&gt;</strong> Vamos fazer o download do ODAC no link <a href="http://www.oracle.com/technology/software/tech/windows/odpnet/index.html">http://www.oracle.com/technology/software/tech/windows/odpnet/index.html</a> &#8211; A última versão até o lançamento deste post era a 11.1.0.7.20, eu recomendo fazer o download da versão completa como descrita acima.</p>
<p><strong>Passo 2 -&gt;</strong> Descompacte o arquivo e instale-o com o OUI (Oracle Universal Installer).<br />
Nota: Não é recomendada a instalação em diretórios onde contenham espaços no nome da pasta como &#8220;Program Files&#8221; então eu recomendo colocar em &#8220;C:/Oracle&#8221;</p>
<p><strong>Passo 3 -&gt;</strong> Após instalado não está tudo pronto, é necessário fazer algumas configurações básicas:</p>
<ul>
<li><strong><span style="color: #0000ff;">1 &#8211; Variáveis:</span></strong>
<ul>
<li><strong><em><span style="color: #0000ff;"><span style="font-style: normal;">1.1 -</span></span> %ORACLE_HOME% </em></strong> é recomendável configurá-la (Ex. <em>C:\Oracle\product\11.1.0\client_2</em>)</li>
<li><strong><em><span style="color: #0000ff;"><span style="font-style: normal;">1.2 -</span></span> %PATH%</em></strong> se eu não estou muito enganado assim que você termina a instalação já é definida nessa variável um caminho similar a esse:<br />
<em>C:\Oracle\product\11.1.0\client_2\</em><br />
mas eu adicionei o caminho<br />
<em>C:\Oracle\product\11.1.0\client_2\bin</em><br />
é bom para quem gosta de usar o SQL-Plus</li>
</ul>
</li>
<li><strong><span style="color: #0000ff;">2 &#8211; SQL*NET Setup</span></strong>
<ul>
<li><strong><span style="color: #0000ff;">2.1 -</span> EZCONNECT</strong> &#8211; O <em>EZCONNECT</em> ou <em>TNSNAME</em> pode ser usado para conectar ao Oracle para execução dos scripts de confiuração do <em>Oracle Providers </em>ASP.NET bem como para utilizar os <em>Providers</em> após instalados conectando eles com o Oracle Database. Para conectar ao database usando qualquer abordagem, o arquivo <em><strong>%ORACLE_HOME%\Network\Admin\sqlnet.ora</strong> <span style="font-style: normal;">deve ser </span></em>criado contendo:
<pre class="brush: powershell;">
NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)
</pre>
<p>Para habilitar a autenticação usando o usuário do seu Sistema Operacional,  é necessário incluir a seguinte linha:</p>
<pre class="brush: powershell;">
SQLNET.AUTHENTICATION_SERVICES = (NTS)
</pre>
<p>Depois de configurado, você pode usar o <strong>EZCONNECT. </strong></p>
<p><strong> </strong>No  &#8220;<em><strong>data source</strong></em>&#8221; deve ser especificada no seguinte formato (Nenhum outro arquivo de configuração é necessário):</p>
<pre class="brush: powershell;">
[//]host[:port][/service_name][/server][/instance_name]
</pre>
</li>
<li><strong><span style="color: #000000;"><span style="color: #0000ff;">2.2 -</span>TNSNAME</span></strong> &#8211; É um arquivo de configuração que contém o <a title="Net Service Name" href="http://download.oracle.com/docs/cd/E11882_01/network.112/e10835/glossary.htm#BGBHHCEE" target="_blank">net service name</a> mapeado para o <a href="http://download.oracle.com/docs/cd/E11882_01/network.112/e10835/glossary.htm#BGBEDFBF" target="_blank">descritor do conector</a>. Resumindo, é utilizado para criar um <em>alias</em> para a conexão com o database. Para utilizar o <strong><em>TNSNAME</em></strong> é necessário criar o arquivo:<strong><em>%ORACLE_HOME%\Network\Admin\tnsnames.ora</em></strong> &#8211; Segue abaixo um exemplo de configuração de um alias:
<pre class="brush: sql;">
orcl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.113)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl.rio.com)
)
)
</pre>
<p>O <em><strong>protocolo</strong></em>, <em><strong>host</strong></em>, <em><strong>port</strong></em> e <strong><em>service name</em></strong> no exemplo a cima deve ser modificado apropriadamente. Nesse caso foi criado um <em>alias</em> chamado &#8220;<strong>orcl</strong>&#8221; que deve ser especificado no &#8220;<strong><em>data source</em></strong>&#8221; do string de conexão.</p>
<p>Na segunda parte deste artigo nós usaremos esse <em>TNSNAME</em> durante os exemplos.</li>
</ul>
</li>
<li><strong><span style="color: #0000ff;">3 &#8211; Executando o Script SQL</span></strong>
<ul>
<li><span style="color: #0000ff;"><strong>3.1 -</strong></span> Essa parte é importante se você for utilizar <strong><em>Providers<span style="font-weight: normal;"><span style="font-style: normal;"> no seu projeto</span></span>.</em></strong> Antes de você executar qualquer <em>Oracle Provider para ASP.NET</em> é necessário executar os <strong>scripts SQL</strong> de configuração.</li>
<li><span style="color: #0000ff;"><strong>3.2 -</strong></span> É importante informá-los que o script vai criar tabelas, stored procedures, views e roles. Eles vão pertencer ao usuário que estiver executando os scritps. Antes de mais nada, verifique se seu usuário tem os seguintes privilégios:
<ul>
<li>CHANGE NOTIFICATION</li>
<li>CREATE JOB</li>
<li>CREATE PROCEDURE</li>
<li>CREATE PUBLIC SYNONYM</li>
<li>CREATE ROLE</li>
<li>CREATE SESSION</li>
<li>CREATE TABLE</li>
<li>CREATE VIEW</li>
<li>DROP PUBLIC SYNONYM</li>
</ul>
</li>
<li><span style="color: #0000ff;"><strong>3.3 -</strong></span> Você pode executar os scripts com o SQL*Plus ou usar o<em> Oracle Developer Tools (ODT) para Visual Studio 2008. </em>se você for usar o SQL*Plus, segue uma boa dica nesse post: &#8220;<a href="http://diariodecodigos.info/2009/10/dica-prompt-do-dos-rapido/" target="_blank">Prompt do DOS Rápido</a>&#8220;, neste exemplo vamos usar o ODT.
<ul>
<li><strong><span style="color: #0000ff;">3.3.1 </span></strong>- Abra o Visual Studio 2008, vá em &#8220;<strong>tools&#8221;</strong> em seguida em &#8220;<strong><span style="color: #000000;">Run SQL*Plus Script</span></strong>&#8220;</li>
<li><strong><span style="color: #0000ff;">3.3.2 -</span></strong> Na janela do &#8220;<strong>Run SQL*Plus Script</strong>&#8221; clique no botão  &#8221;<strong>New Connection</strong>&#8220;.</li>
<li><strong><span style="color: #0000ff;">3.3.3 -</span></strong> Na janela &#8220;<strong>Connection Proprierties</strong>&#8221; selecione &#8221;<strong>Oracle Database Server (Oracle ODP.NET)</strong>&#8221; para <em>Data Source</em> e &#8220;<strong>Oracle Data Provider for .NET</strong>&#8221; para <em>Data Provider</em>. Selecione o alias TNS no <em>Data Source</em>. Se nenhum alias estiver no drop-down digite o seu <em>alias TNS</em> conforme configurado no item <strong><span style="color: #0000ff;">2.2</span></strong>. Digite o usuário e senha, ou selecione &#8220;<strong>Use Windows integrated authentication</strong>&#8220;. Clique no botão &#8220;Test Connection&#8221; para testar a conexão. Se retornar uma mensagem de sucesso! Clique no botão OK.</li>
<li><strong><span style="color: #0000ff;"> 3.3.4 -</span></strong> De volta para a janela do &#8216;<strong>Run SQL*Plus Script</strong>&#8216;, procure e selecione o script SQL a ser executado. Geralmente a localização desses scripts ficam em<br />
&#8220;<strong><em>%ORACLE_HOME%\ASP.NET\SQL</em></strong>&#8220;</li>
<li><span style="color: #0000ff;"><strong>3.3.5 -</strong></span> O script &#8220;<strong>InstallOracleASPNETCommon.sql</strong>&#8221; deve ser executado primeiro, antes de executar qualquer outro script para &#8221;<strong>Oracle Providers for ASP.NET</strong>&#8220;, depois disso não é mais necessário executar esse script novamente. Não é necessário executar todos os scripts. Por exemplo, se sua aplicação utilizar somente o &#8220;<strong>Oracle&#8217;s Membership provider</strong>&#8220;, execute somente o &#8220;<strong>InstallOracleASPNETCommon.sql</strong>&#8221; e o &#8220;<strong>InstallOracleMembership.sql</strong>&#8220;, nesta ordem.</li>
<li><strong><span style="color: #0000ff;">3.3.6 -</span></strong> Caso você deseje instalar todos os <strong>Providers</strong> execute unicamente o &#8220;<strong>InstallAllOracleASPNETProviders.sql</strong>&#8221; , para usuários do <strong>Oracle Database 9</strong> é necessário realizar algumas modificações dentro deste arquivo (abra e modifique).</li>
<li><strong><span style="color: #0000ff;">3.3.6 -</span></strong> Para a desinstalar os <strong>Providers</strong> o processo é exatamente o mesmo, os scripts &#8220;Uninstall&#8221; correspondem aos &#8220;Install&#8221;.</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2><span style="color: #0000ff;">Observações e Notas:</span></h2>
<ul>
<li><strong><span style="color: #0000ff;">4 &#8211; machine.config</span></strong><br />
Após a instalação do &#8220;Oracle Providers for ASP.NET&#8221;, o arquivo  &#8220;%windir%\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config&#8221; é modificado para atenderem aos requisitos dos novos <strong>ASP.NET providers</strong>. Um alias &#8220;<strong><em>connection string</em></strong>&#8221; é criado com o nome<br />
&#8220;<strong>OraAspNetConString</strong>&#8220;, do qual é referenciado por cada &#8220;<strong>Oracle<br />
Providers for ASP.NET</strong>&#8220;. A baixo segue o exemplo de uma típica configuração feita no arquivo &#8220;<strong>machine.config</strong>&#8220;:</p>
<pre class="brush: xml;">
&lt;configuration&gt;
...
&lt;connectionStrings&gt;
...
&lt;add name=&quot;OraAspNetConString&quot; providerName=&quot;Oracle.DataAccess.Client&quot; connectionString=&quot; &quot; /&gt;
&lt;/connectionStrings&gt;
...
&lt;system.web&gt;
...
&lt;membership&gt;
&lt;providers&gt;
&lt;add name=&quot;OracleMembershipProvider&quot; type=&quot;Oracle.Web.Security.OracleMembershipProvider, Oracle.Web, Version=2.111.7.20, Culture=neutral, PublicKeyToken=89b483f429c47342&quot; connectionStringName=&quot;OraAspNetConString&quot; applicationName=&quot;&quot; enablePasswordRetrieval=&quot;false&quot; enablePasswordReset=&quot;true&quot; requiresQuestionAndAnswer=&quot;true&quot; requiresUniqueEmail=&quot;false&quot; passwordFormat=&quot;Hashed&quot; maxInvalidPasswordAttempts=&quot;5&quot; minRequiredPasswordLength=&quot;7&quot; minRequiredNonalphanumericCharacters=&quot;1&quot; passwordAttemptWindow=&quot;10&quot; passwordStrengthRegularExpression=&quot;&quot; /&gt;
...
&lt;/providers&gt;
&lt;/membership&gt;
...
&lt;/system.web&gt;
...
&lt;/configuration&gt;
</pre>
<p>O exemplo a cima mostra somente a entrada do &#8220;<strong>Oracle Membership Provider</strong>&#8220;. Os outros Providers vão ter uma sintax semelhante a esta.</p>
<p>Se o alias &#8220;OraAspNetConString&#8221; no <strong>machine.config</strong> vai ser usado pelo seu aplicativo, você deve atribuir uma &#8220;connection string&#8221; válida no &#8220;machine.config&#8221; ou sobrescrever essas configurações no  &#8220;web.config&#8221;.</li>
<li><strong><span style="color: #0000ff;">5 &#8211; Web.config </span></strong>Você pode usar o arquivo de configuração &#8220;web.config&#8221; para sobrescrever as configurações atuais do arquivo &#8220;machine.config&#8221; como mencionado anteriormente. Alguns exemplos são apresentados no &#8220;<a title="em inglês" href="http://diariodecodigos.info/o102s/ASPNET-Oracle.pdf" target="_blank">Oracle Providers for ASP.NET Developer&#8217;s Guide</a>&#8221; (pdf).</li>
</ul>
<h2><span style="color: #0000ff;">Links</span></h2>
<ul>
<li><a title="em português" href="http://www.bufaloinfo.com.br/artigos/coluna32.asp" target="_blank">Configurando Providers no ASP.NET</a></li>
<li><a href="http://otn.oracle.com" target="_blank">OTN Oracle</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://diariodecodigos.info/2009/12/asp-net-oracle-parte-1/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Restaurar banco do MySQL em C# (2/2)</title>
		<link>http://diariodecodigos.info/2009/10/restaurar-banco-do-mysql-em-c/</link>
		<comments>http://diariodecodigos.info/2009/10/restaurar-banco-do-mysql-em-c/#comments</comments>
		<pubDate>Sat, 24 Oct 2009 10:59:10 +0000</pubDate>
		<dc:creator>paulodiogo</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[C# Dicas]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://diariodecodigos.info/?p=640</guid>
		<description><![CDATA[Process.Start(&#34;cmd.exe&#34;, &#34;/c /*CAMINHO DO MYSQL.EXE*/ + &#34; -u/*usuario*/ -p/*senha*/ /*banco*/ &#60; &#34;+/*CAMINHO DO ARQUIVO .SQL*/); Para fazer backup já fiz aqui. Simples assim.]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.4linux.com.br/files/imagecache/pic-02/cursos/images/imagem-412.jpg" alt="MySql" /></p>
<pre class="brush: csharp;">
Process.Start(&quot;cmd.exe&quot;, &quot;/c /*CAMINHO DO MYSQL.EXE*/ +
                          &quot; -u/*usuario*/ -p/*senha*/ /*banco*/ &lt; &quot;+/*CAMINHO DO ARQUIVO .SQL*/);</pre>
<p><span id="more-640"></span></p>
<p>Para fazer backup já fiz <a href="http://diariodecodigos.info/2009/09/fazendo-backup-do-mysql-com-c/">aqui</a>.</p>
<p>Simples assim.</p>
]]></content:encoded>
			<wfw:commentRss>http://diariodecodigos.info/2009/10/restaurar-banco-do-mysql-em-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Classes de Coleção + Queue e Stack</title>
		<link>http://diariodecodigos.info/2009/10/classes-de-colecao-queue-e-stack/</link>
		<comments>http://diariodecodigos.info/2009/10/classes-de-colecao-queue-e-stack/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 00:06:23 +0000</pubDate>
		<dc:creator>Alexandre Santos</dc:creator>
				<category><![CDATA[C# Linguagem]]></category>
		<category><![CDATA[Array]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[collection]]></category>

		<guid isPermaLink="false">http://diariodecodigos.info/?p=626</guid>
		<description><![CDATA[Nesse post apredemos a utilizar as Classes Queue e Stack]]></description>
			<content:encoded><![CDATA[<p><a rel="attachment wp-att-482" href="http://diariodecodigos.info/2009/09/mudanca-de-planos/c-2/"><img class="aligncenter size-full wp-image-482" title="C#" src="http://diariodecodigos.info/wp-content/uploads/2009/09/C.png" alt="C#" width="550" height="57" /></a></p>
<p>Já vimos diversos tipos de Array a já aprendemos o que são Classes de Coleção, se você não viu ou não conhece procure nos Posts Relacionados no final da página.</p>
<p>Hoje vamos ver a Classe de Coleção <strong>Queue</strong> e <strong>Stack</strong>.</p>
<p><span id="more-626"></span><br />
<h2>Queue</h2>
<p>Essa classe utiliza o famoso conceito <em>FIFO</em> (First-in, First-out: primeiro a entrar, primeira a sair).</p>
<p>Imagine 3 potes vc enche o <em><strong>pote 1</strong></em>, o <strong><em>pote 2</em></strong> e o <em><strong>pote 3</strong></em>, o<em><strong> pote 1</strong></em> foi o primeiro a ser preenchido, agora você vai esvaziar o <strong><em>pote 1</em></strong> depois o <strong><em>pote 2</em></strong> e em seguida o <strong><em>pote 3</em></strong>. Pronto!</p>
<pre class="brush: csharp;">
using System;
using System.Collections;

// instânciamos uma nova fila
 Queue novaFilaN = new Queue();

 // Criamos um array com valores
 int[] nums = new int[]{2, 4, 6, 7, 8, 9};

 // inserimos valores na fila
 foreach (int numeros in nums)
 {
     novaFilaN.Enqueue(numeros);
     Console.WriteLine(numeros + &amp;amp;quot;&amp;amp;lt;- Enfileramos\n&amp;amp;quot;);
 }

 Console.WriteLine(&amp;amp;quot;\n Nossa Fila está assim: &amp;amp;quot;);

 // percorremos a fila
 foreach (int num in novaFilaN)
 {
     Console.WriteLine(num);
 }

 Console.WriteLine(&amp;amp;quot;\n --- Agora vamos retirar os valores da fila --- \n&amp;amp;quot;);
 // esvaziamos a fila

 while (novaFilaN.Count &amp;amp;gt; 0)
 {
     int number = (int)novaFilaN.Dequeue();
         /** O casting é nesessário pois a Classe de Coleção Queue
          *  é uma classe Generalizada e armazena os valores como object
          *  OBS: Não confundam classes Generalizadas com classes Genéricas
          */
     Console.WriteLine(number + &amp;amp;quot; &amp;amp;lt;- Retiramos &amp;amp;quot;);
 }
</pre>
<p>A saída vai ser essa:</p>
<p><a href="http://diariodecodigos.info/wp-content/uploads/2009/10/Queue1.jpg"><img class="aligncenter size-full wp-image-630" title="Queue" src="http://diariodecodigos.info/wp-content/uploads/2009/10/Queue1.jpg" alt="Queue" width="385" height="359" /></a></p>
<h2>Stack</h2>
<p>A classe Stack implementa o mecanismo LIFO (Last-In, First-Out, último a entrar é o primeiro a sair).</p>
<p>É como uma pilha de pratos, o último prato colocado é o primeiro a ser retirado da pilha =D</p>
<pre class="brush: csharp;">
Stack pilha = new Stack();

 int[] numeros = new int[] { 2, 4, 6, 7, 8, 9 };

 foreach (int num in numeros)
 {
pilha.Push(num);
Console.WriteLine(num + &amp;amp;quot; &amp;amp;lt;- empilhamos\n&amp;amp;quot;);
 }

 Console.WriteLine(&amp;amp;quot;\n Nossa Pilha está assim: &amp;amp;quot;);

 // percorremos a pilha
 foreach (int numbs in pilha)
 {
Console.WriteLine(numbs);
 }

 Console.WriteLine(&amp;amp;quot;\n --- Agora vamos retirar os valores da fila --- \n&amp;amp;quot;);

 //esvaziamos a pilha
 while (pilha.Count &amp;amp;gt; 0)
 {
int number = (int)pilha.Pop();
Console.WriteLine(number + &amp;amp;quot; &amp;amp;lt;- Retiramos da Pilha&amp;amp;quot;);
 }
</pre>
<p>A saída será essa:</p>
<p><a href="http://diariodecodigos.info/wp-content/uploads/2009/10/stack.png"><img class="aligncenter size-full wp-image-632" title="stack" src="http://diariodecodigos.info/wp-content/uploads/2009/10/stack.png" alt="stack" width="393" height="299" /></a></p>
<p>Até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://diariodecodigos.info/2009/10/classes-de-colecao-queue-e-stack/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Converter List para DataSet</title>
		<link>http://diariodecodigos.info/2009/09/converter-list-para-dataset/</link>
		<comments>http://diariodecodigos.info/2009/09/converter-list-para-dataset/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 14:23:47 +0000</pubDate>
		<dc:creator>paulodiogo</dc:creator>
				<category><![CDATA[C# Dicas]]></category>
		<category><![CDATA[Tecnicas de Programação]]></category>
		<category><![CDATA[Converter]]></category>
		<category><![CDATA[DataSet]]></category>
		<category><![CDATA[IList]]></category>

		<guid isPermaLink="false">http://diariodecodigos.info/?p=457</guid>
		<description><![CDATA[Opa! olha eu ai novamente =D, tentando passar algo de (INUTIL) UTIL pra vocês. Hoje vou mostrar como converter uma List para DataSet, é Super Simples, vamos lá: public static class ListConvertor { public static DataSet ConvertToDataSet&#60;T&#62;(IList list) { DataSet dataSet = new DataSet(); CreateDataSet(dataSet, typeof(T), false); FillDataSet(typeof(T), list, dataSet, -1); CreateRelations(dataSet, typeof(T), null); return]]></description>
			<content:encoded><![CDATA[<p><img src="http://diariodecodigos.info/wp-content/uploads/2009/08/C.gif" alt="" /></p>
<p>Opa! olha eu ai novamente =D, tentando passar algo de <span style="text-decoration: line-through;">(INUTIL</span>) UTIL pra vocês.</p>
<p><span id="more-457"></span></p>
<p>Hoje vou mostrar como converter uma List para DataSet, é Super Simples, vamos lá:</p>
<pre class="brush: csharp;">

public static class ListConvertor
 {
 public static DataSet ConvertToDataSet&lt;T&gt;(IList list)
 {
 DataSet dataSet = new DataSet();

 CreateDataSet(dataSet, typeof(T), false);
 FillDataSet(typeof(T), list, dataSet, -1);
 CreateRelations(dataSet, typeof(T), null);

 return dataSet;
 }

 ///
 /// Create the structure for all the tables in the data set
 ///
 /// Data set in which tables will be created
 /// Type of which dataset has to be created
 /// Whether current type is a child table
 private static void CreateDataSet(DataSet dataSet, Type type, bool isChildTable)
 {
 DataTable dataTable = new DataTable(type.Name);

 //Create the ID columns for having relation in the tables
 dataTable.Columns.Add(new DataColumn(&quot;ID2&quot;, typeof(int)));
 if (isChildTable)
 {
 dataTable.Columns.Add(new DataColumn(&quot;ParentID2&quot;, typeof(int)));
 }

 // Create the structure for the data tables to be
 // added in the the data set
 foreach (PropertyInfo pInfo in type.GetProperties())
 {
 if (pInfo.PropertyType.IsGenericType &amp;&amp;
 (pInfo.PropertyType.GetGenericTypeDefinition() == typeof(List&lt;&gt;)
 || pInfo.PropertyType.GetGenericTypeDefinition() == typeof(IList&lt;&gt;)))
 {
 // If associate lists are there make then another table
 CreateDataSet(dataSet,pInfo.PropertyType.GetGenericArguments()[0],true);
 }
 else
 {
 dataTable.Columns.Add(new DataColumn(pInfo.Name, pInfo.PropertyType));
 }
 }

 //Add the table to the dataset
 dataSet.Tables.Add(dataTable);
 }

 ///
 /// Fill all the tables of data set with data in the respective list
 ///
 /// Type of which datatable is to be filled
 /// List of data
 /// Data Set in which data tables will be filled with data
 /// ID of parent record. If -1 one then no parent
 private static void FillDataSet(Type type, IList list, DataSet dataSet, int parentID)
 {
 PropertyInfo[] propertyInfos = type.GetProperties();
 DataTable dataTable = dataSet.Tables[type.Name];
 int id = dataTable.Rows.Count + 1;

 foreach (object item in list)
 {
 DataRow row = dataTable.NewRow();

 // Set new id and related parent id
 row[&quot;ID&quot;] = id;
 if (parentID != -1)
 row[&quot;ParentID&quot;] = parentID;

 // Load all the data from the properties of the type
 // and save them into the datatable
 foreach (PropertyInfo info in propertyInfos)
 {
 if (info.PropertyType.IsGenericType &amp;&amp;
 (info.PropertyType.GetGenericTypeDefinition() == typeof(List&lt;&gt;)
 || info.PropertyType.GetGenericTypeDefinition() == typeof(IList&lt;&gt;)))
 {
 IList subList = (IList)info.GetValue(item, null);
 if (subList != null &amp;&amp; subList.Count &gt; 0)
 {
 FillDataSet(subList[0].GetType(),
 subList,
 dataSet, id);
 }
 }
 else
 {
 row[info.Name] = info.GetValue(item, null);
 }
 }

 dataTable.Rows.Add(row);
 id++;
 }
 }

 ///
 /// Creates the relation between the tables according to the
 /// type and parent table on field ID and ParentID
 ///
 /// Data set containing parent and child table
 /// Type of the list
 /// Parent table to which relations has to be done
 private static void CreateRelations(DataSet dataSet, Type type, DataTable parentTable)
 {
 DataTable dataTable = dataSet.Tables[type.Name];

 // If parent table exsits then create relation
 // with child table on field Parent ID
 if (parentTable != null)
 {
 dataSet.Relations.Add(
 new DataRelation(parentTable.TableName + &quot;_ID_&quot;
 + &quot;PARENTID_&quot; + dataTable.TableName,
 parentTable.Columns[&quot;ID&quot;],
 dataTable.Columns[&quot;ParentID&quot;]));
 }

 // Check for other lists under current object
 // go for another relation if exists
 foreach (PropertyInfo pInfo in type.GetProperties())
 {
 if (pInfo.PropertyType.IsGenericType &amp;&amp;
 (pInfo.PropertyType.GetGenericTypeDefinition() == typeof(List&lt;&gt;)
 || pInfo.PropertyType.GetGenericTypeDefinition() == typeof(IList&lt;&gt;)))
 {
 // If associate lists are there make then another table
 CreateRelations(dataSet,pInfo.PropertyType.GetGenericArguments()[0],dataTable);
 }
 }
 }
 }
</pre>
<p>Vamos para as explicações:</p>
<pre class="brush: csharp;">

ArrayList sequence = new ArrayList();
 IList list = (IList)sequence;
 DataSet ds = ListConvertor.ConvertToDataSet&lt;LancamentosDetalhado&gt;(list);
</pre>
<p>Como nos queremos passar uma List para DataSet, vamos forçar um ArrayList ser uma lista, já que ele extend de IList, estamos fazendo isso com o cast (IList), logo após aplicamos o metodo STATIC, <strong>ListConvertor.ConvertToDataSet&lt;LancamentosDetalhado&gt;(list);,</strong></p>
<p>pois a assinatura do metodo esta como static, logo só pode ser chamado a partir da classe.</p>
<p>Simples assim.</p>
]]></content:encoded>
			<wfw:commentRss>http://diariodecodigos.info/2009/09/converter-list-para-dataset/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Usando Dictionary no C#</title>
		<link>http://diariodecodigos.info/2009/09/usando-dictionary-no-c/</link>
		<comments>http://diariodecodigos.info/2009/09/usando-dictionary-no-c/#comments</comments>
		<pubDate>Sat, 12 Sep 2009 12:54:29 +0000</pubDate>
		<dc:creator>paulodiogo</dc:creator>
				<category><![CDATA[C# Linguagem]]></category>
		<category><![CDATA[Arrays]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Collections]]></category>

		<guid isPermaLink="false">http://diariodecodigos.info/?p=454</guid>
		<description><![CDATA[Vamos lá&#8230; vou falar sobre o Dictionary do c#, eu falaria que se parece muito com o HashMap do Java, pelo que eu usei&#8230; private Dictionary&#38;lt;String, int&#38;gt; table = new Dictionary&#38;lt;String, int&#38;gt;(); O Dictionary trabalha como o HashMap do java, que tem uma chave e um valor, no nosso caso a chave vai ser uma]]></description>
			<content:encoded><![CDATA[<p><img src="http://diariodecodigos.info/wp-content/uploads/2009/08/C.gif" alt="" /><br />
Vamos lá&#8230; vou falar sobre o Dictionary do c#, eu falaria que se parece muito com o HashMap do Java, pelo que eu usei&#8230;</p>
<p><span id="more-454"></span></p>
<pre class="brush: csharp;">

private Dictionary&amp;lt;String, int&amp;gt; table = new Dictionary&amp;lt;String, int&amp;gt;();
</pre>
<p>O Dictionary trabalha como o HashMap do java, que tem uma chave e um valor, no nosso caso a chave vai ser uma String e o valor um inteiro.</p>
<p>Adicionando itens no Dictionary.</p>
<pre class="brush: csharp;">
this.table.Add(&amp;quot;PAULO&amp;quot;,21);
this.table.Add(&amp;quot;Alexandre&amp;quot;,24);
</pre>
<p>No caso de se tentar adicionar e ja existir a chave, não vamos conseguir pois as chaves nao podem se repetir, como em um dicionario.</p>
<p>Removendo itens de um Dictionary:</p>
<pre class="brush: csharp;">
this.table.Remove(&amp;quot;PAULO&amp;quot;);
</pre>
<p>No caso da remoção de um elemento, temos que passar uma chave, se a chave não existir vamos tomar uma Exceção na cara. =D</p>
<p>Simples assim.</p>
]]></content:encoded>
			<wfw:commentRss>http://diariodecodigos.info/2009/09/usando-dictionary-no-c/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Fazendo backup do MySql com C# (1/2)</title>
		<link>http://diariodecodigos.info/2009/09/fazendo-backup-do-mysql-com-c/</link>
		<comments>http://diariodecodigos.info/2009/09/fazendo-backup-do-mysql-com-c/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 14:23:18 +0000</pubDate>
		<dc:creator>paulodiogo</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[C# Dicas]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://diariodecodigos.info/?p=441</guid>
		<description><![CDATA[Agora vamos ver um método prático e sagaz de se fazer um backup em código do banco de dados. try { Process.Start(&#34;CAMINHO DO MYSQL NA SUA MAQUINA/bin/mysqldump.exe&#34;, &#34;-u USER --password=SENHA -B BANCO &#62; -r &#34; + arq).WaitForExit(5000); if (File.Exists(arq)) return true; else return false; } catch { throw new Exception(&#34;Backup não pode ser realizado nessa]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" src="../wp-content/uploads/2009/08/C.gif" alt="" /></p>
<p>Agora vamos ver um método prático e sagaz de se fazer um backup em código do banco de dados.</p>
<p><span id="more-441"></span></p>
<pre class="brush: csharp;">
try
 {
 Process.Start(&quot;CAMINHO DO MYSQL NA SUA MAQUINA/bin/mysqldump.exe&quot;,
 &quot;-u USER --password=SENHA -B BANCO  &gt; -r &quot; + arq).WaitForExit(5000);
 if (File.Exists(arq))
 return true;
 else
 return false;
 }
 catch
 {
 throw new Exception(&quot;Backup não pode ser realizado nessa maquina.&quot;);
 }
</pre>
<p>Util pra mim&#8230; não sei pra vocês&#8230;</p>
<p>Simples Assim.</p>
]]></content:encoded>
			<wfw:commentRss>http://diariodecodigos.info/2009/09/fazendo-backup-do-mysql-com-c/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Pegar endereço a partir de CEP</title>
		<link>http://diariodecodigos.info/2009/09/pegar-endereco-a-partir-de-cep/</link>
		<comments>http://diariodecodigos.info/2009/09/pegar-endereco-a-partir-de-cep/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 14:18:43 +0000</pubDate>
		<dc:creator>paulodiogo</dc:creator>
				<category><![CDATA[C# Dicas]]></category>

		<guid isPermaLink="false">http://diariodecodigos.info/?p=439</guid>
		<description><![CDATA[Depois de 2 semanas sem postar nada voltei =D Hoje vamos ver como pegar um endereço a partir de um cep&#8230; e ajudar os usuários. public String[] pegaEnderecoPeloCEP(String cep) { String[] aux = { &#34;&#34;, &#34;&#34;, &#34;&#34;, &#34;&#34;, &#34;&#34; }; aux[4] = &#34;Não foi encontrado um resultado&#34;; if (cepExiste(cep)) { string urlSite = string.Format( @&#34;http://www.buscarcep.com.br/?cep={0}&#38;amp;formato=xml&#34;]]></description>
			<content:encoded><![CDATA[<p><img src="http://diariodecodigos.info/wp-content/uploads/2009/08/C.gif" alt="C#" /></p>
<p>Depois de 2 semanas sem postar nada voltei =D</p>
<p><span id="more-439"></span></p>
<p>Hoje vamos ver como pegar um endereço a partir de um cep&#8230; e ajudar os usuários.</p>
<pre class="brush: csharp;">

public String[] pegaEnderecoPeloCEP(String cep)
 {
 String[] aux = { &quot;&quot;, &quot;&quot;, &quot;&quot;, &quot;&quot;, &quot;&quot; };
 aux[4] = &quot;Não foi encontrado um resultado&quot;;
 if (cepExiste(cep))
 {
 string urlSite = string.Format(
 @&quot;http://www.buscarcep.com.br/?cep={0}&amp;amp;formato=xml&quot;
 , cep);

 // Variavel para ler o XML.
 XmlTextReader lerXML = new XmlTextReader(urlSite);

 // Strins que vão receber o nó e o valor do XML
 string sNode;
 string sValue;
 // Retorno da ação da busca
 string sResultado = &quot;&quot;;

 // Verifica se o nó atual é um conteúdo de nó.
 lerXML.MoveToContent();

 do
 {
 sNode = lerXML.Name;
 if (lerXML.NodeType == XmlNodeType.Element)
 {
 lerXML.Read();
 sValue = lerXML.Value;
 // Recebe o nome do campo strTempName
 switch (sNode)
 {
 case &quot;tipo_logradouro&quot;:
 aux[0] = sValue + &quot; &quot;;
 break;
 // pega o logradouro
 case &quot;logradouro&quot;:
 //atribui valor ao componente
 aux[0] += sValue;
 break;
 // pega o bairro
 case &quot;bairro&quot;:
 //atribui valor ao componente
 aux[1] = sValue;
 break;
 // pega a cidade
 case &quot;cidade&quot;:
 //atribui valor ao componente
 aux[2] = sValue;
 break;
 // pega o uf
 case &quot;uf&quot;:
 //atribui valor ao componente
 aux[3] = sValue;
 break;
 // pega o resultado
 case &quot;resultado&quot;:
 //atribui valor a string que será tratada
 sResultado = sValue;
 break;
 }

 // Aqui damos um tratamento no resultado
 switch (sResultado)
 {
 // esses valores são retornos possiveis do site BuscaCEP
 case &quot;1&quot;:
 aux[4] = &quot;Cep encontrado!&quot;;
 break;
 case &quot;-1&quot;:
 aux[4] = &quot;Cep não encontrado!&quot;;
 break;
 case &quot;-2&quot;:
 aux[4] = &quot;Formato de CEP inválido&quot;;
 break;
 case &quot;-3&quot;:
 aux[4] = @&quot;Busca de CEP congestionada.
 Aguarde alguns segundos e tente novamente.&quot;;
 break;
 case &quot;&quot;:
 aux[4] = &quot;Não foi encontrado um resultado&quot;;
 break;
 }
 }
 } while (lerXML.Read()); // ate chegar no final do XML faça!
 return aux;
 }

 return aux;
 }
</pre>
<p>qualquer duvida me pergunte =D muito facil usar isso ai&#8230;</p>
<p>Simples assim.</p>
]]></content:encoded>
			<wfw:commentRss>http://diariodecodigos.info/2009/09/pegar-endereco-a-partir-de-cep/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Percorrendo Todos TextBox</title>
		<link>http://diariodecodigos.info/2009/08/percorrendo-todos-textbox/</link>
		<comments>http://diariodecodigos.info/2009/08/percorrendo-todos-textbox/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 01:54:27 +0000</pubDate>
		<dc:creator>Alexandre Santos</dc:creator>
				<category><![CDATA[Visual Studio 2008]]></category>
		<category><![CDATA[as]]></category>
		<category><![CDATA[boxing]]></category>
		<category><![CDATA[casting]]></category>
		<category><![CDATA[is]]></category>
		<category><![CDATA[Null]]></category>
		<category><![CDATA[object]]></category>
		<category><![CDATA[textbox]]></category>
		<category><![CDATA[Tipo-Referência]]></category>
		<category><![CDATA[Tipo-Valor]]></category>
		<category><![CDATA[unboxing]]></category>

		<guid isPermaLink="false">http://diariodecodigos.info/?p=384</guid>
		<description><![CDATA[Essa técnica consiste em trabalhar com a classe Object e fazer Casting Seguro. O código para percorrer todos os TextBox é o seguinte: /* ------------------------------------------------------------- */ // O &#38;quot;varContainer&#38;quot; nesse caso é o Grid de WPF // Mas pode ser um Panel.Controls por exemplo // Na verdade a classe Grid é derivada da Panel //]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-351" title="C#" src="http://diariodecodigos.info/wp-content/uploads/2009/08/C.gif" alt="C#" width="550" height="57" /></p>
<p>Essa técnica consiste em trabalhar com a classe <strong>Object </strong>e fazer <strong>Casting Seguro</strong>.</p>
<p>O código para percorrer todos os TextBox é o seguinte:<span id="more-384"></span></p>
<pre class="brush: csharp;">
/* ------------------------------------------------------------- */
// O &amp;quot;varContainer&amp;quot; nesse caso é o Grid de WPF
// Mas pode ser um Panel.Controls por exemplo
// Na verdade a classe Grid é derivada da Panel
// O importante é obter uma Classe de Coleção chamada UIElementsCollections
/* ------------------------------------------------------------- */
foreach (object ob in varContainer.Children)
 {
    TextBox caixaTexto = ob as TextBox;

    if (caixaTexto != null)
     {
        caixaTexto.Text = &amp;quot;S&amp;quot;;
    }
 }
</pre>
<ul>
<li>Para cada objeto retornado do Array de Controles (<strong>UIElementCollection)</strong> a referência dele é colocada na variável <strong>ob</strong> (<em>object</em>)</li>
<li>Com a variável <strong>ob</strong> referenciando um objeto fazemos o <strong>Casting</strong> <strong>Seguro</strong> com o operador &#8220;<strong>as</strong>&#8220;<strong><br />
</strong></li>
<li>Se a variável <strong>caixaTexto</strong> (tipo <em>TextBox</em>) não for <strong>NULL</strong> o <strong>Casting</strong> foi executado com sucesso, isso quer dizer que o objeto pego no <strong>UIElementCollection</strong> realmente era um objeto do tipo <strong>TextBox</strong> e que a referência daquele objeto agora foi passada para a variável <strong>caixaTexto</strong>.</li>
<li>Atribuímos &#8220;S&#8221; à propriedade <strong>Text</strong> do <strong>TextBox</strong></li>
</ul>
<p><strong>P.S</strong> Não esqueçam de trocar o <strong>varContent</strong> pelo objeto que contém os TextBox na sua aplicação, pode ser por um <strong>Panel</strong> por exemplo. Você também pode trabalhar também com <strong>Labels</strong>, <strong>ComboBox</strong>, <strong>Buttons</strong> e etc é so fazer o <strong>Casting</strong> determinando o tipo desejado, use a sua imaginação.</p>
<h2><span style="color: #0000ff;">O Que é esse Tal de Object?</span></h2>
<p>Primeiro você deve entender o que é um <a href="http://diariodecodigos.info/2009/07/tipos-valor-e-tipo-referencia-no-c/" target="_self">tipo-referência</a>, já entendido do assunto você agora tem que ter em mente que o <em>tipo-referência</em> mais importante no <strong>C#</strong> é o tipo <strong>OBJECT</strong> meu amigo&#8230;. que na verdade é um alias para <strong>System.Object</strong>!</p>
<p>Todos as classes existentes no <strong>C#</strong> são herdados do <strong>System.Object</strong> e uma variável tipo <strong>Object</strong> pode referenciar qualquer objeto existente!</p>
<h2><span style="color: #0000ff;">Boxing</span></h2>
<p>Quando você usa o <strong>Object</strong> para referenciar algo, você pode referenciar um <strong>tipo-valor</strong></p>
<pre class="brush: csharp;">
int numero = 8;
object o = numero;
</pre>
<p>Valores do tipo <strong>int</strong> ficam na pilha da memória, o <strong>object</strong> fica no heap. Todas referências obrigatoriamente devem apontar para o <strong>heap</strong> e não para a pilha, se o <strong>C#</strong> permitisse criar referencia para a pilha poderíamos ter sérios problemas de segurança.</p>
<p>Então o <strong>runtime</strong> aloca uma parte da memória no <strong>heap</strong> copia o valor da variável <strong>numero</strong> e agora sim ele faz o objeto &#8220;<strong>o</strong>&#8221; referenciar o valor no <strong>heap</strong>, essa cópia automática de um valor na pilha para o <strong>heap</strong> é chamado de <strong>boxing</strong>.</p>
<h2><span style="color: #0000ff;">Unboxing (casting)</span></h2>
<p>Depois de fazer o<strong> Boxing</strong> naturalmente você gostaria em alguma hora devolver esse valor que está no <strong>heap</strong> para uma variável <strong>tipo-valor</strong>:</p>
<pre class="brush: csharp;">
int numero = 8;
object o = numero;
int n2 = o; // ERRO!
</pre>
<p>Se tentar fazer isso você terá um erro em tempo de compilação, naturalmente isso não funcionará porque o compilador não confia em você!</p>
<p>Nós sabemos que o valor na variável &#8220;<strong>o</strong>&#8221; é equivalente a um inteiro, mas poderia ser qualquer outra coisa, como uma <strong>Classe </strong>criado por você, resumindo qualquer outra coisa mesmo! E isso não seria nada legal.</p>
<p>Para obter o valor referenciado pelo &#8220;<strong>o</strong>&#8221; será necessário fazer o <strong>unboxing</strong> (<strong>casting</strong>) dizendo o runtime que é seguro converter aquele valor referenciado, caso você esteja errado o casting lançará um <strong>exception</strong> (<strong>InvalodCastException</strong>), veja um exemplo:</p>
<pre class="brush: csharp;">
int numero = 8;
object o = numero;
int n2 = (int)o; // Agora sim!
</pre>
<p><strong>OBS:</strong> O boxing e unboxing são processos caros para o runtime, ele aloca bastante memória e faz muitas verificações, então procure não utilizar muito e utilize ele com atenção.</p>
<p><strong>OBS2:</strong> Você deverá estar preparado para capturar o <strong>exception</strong> lançado e trata-lo corretamente aí entra os operadores &#8220;<strong>is</strong>&#8221; e &#8220;<strong>as</strong>&#8221; para amenizar o nosso sofrimento!</p>
<h2><span style="color: #0000ff;">Casting de Dados Seguro</span></h2>
<p><strong><span style="text-decoration: underline;">Operador is</span></strong></p>
<p>Utilize o operador <em>is</em> para verificar se o tipo de objeto é o esperado:</p>
<pre class="brush: csharp;">
int numero = 8;
object o = numero;

if(o is int){
    int numero2 = (int)o; // Isso é seguro! o objeto &amp;quot;o&amp;quot; é um inteiro
}
</pre>
<p><span style="text-decoration: underline;"><strong>Operador as</strong></span></p>
<p>O operador <em>is</em> retorna <em>true</em> ou <em>false</em> já o operador <em>as</em> trabalha um pouco diferente.</p>
<p>Assim como o operador <em>is</em> no lado esquerdo recebe um objeto <em>tipo-referência</em> e à direita o tipo especificado. Se o casting for bem sucedido o operador &#8220;<strong><em>as</em></strong>&#8221; retornará o objeto se não retornará <strong>NULL</strong>.</p>
<pre class="brush: csharp;">
int numero = 8;
object o = numero;
int numero2 = o as int;
if(numero2 != null){
    Console.WriteLine(&amp;quot;Casting OK!&amp;quot;);
}
</pre>
<p>Até a próxima&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://diariodecodigos.info/2009/08/percorrendo-todos-textbox/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

