Construindo uma classe de conexão com banco de dados em C# utilizando design pattern Singleton

Publicado por Claudio Rocha de Jesus (última atualização em 31/10/2009)

[ Hits: 19.032 ]

Homepage: www.zambotecnologia.com.br

Download ConnectSQL.cs




Este arquivo contém duas classes de conexão com banco de dados, uma para o banco de dados PostgreSQL e outro para Microsoft SQL Server. As duas classes implementam o design pattern singleton, onde somente pode ser criada uma única instância da classe.

A primeira não utiliza lock e nem lazy initialization já a segunda (MSSQL) implementa.

Para montar a string de conexão utilizei outra classe que passarei em outro post.

  



Esconder código-fonte

/**
 * Este arquivo contém duas classes de conexão com banco de dados,
 * uma para o banco de dados PostgreSQL e outro para Microsoft SQL Server.
 * As duas classes implementam o design pattern singleton, onde somente
 * pode ser criada uma única instância da classe.
 * A primeira não utiliza lock e nem lazy initialization já a segunda
 * (MSSQL) implementa.
 * 
 * @category Biblioteca
 * @package  DataAccesLayer
 * @author   Claudio Rocha de Jesus <crochadejesus@yahoo.com.br>
 * @since    0.1
 */
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Npgsql;
using System.Data.SqlClient;

namespace DataAccessLayer
{
   /// <summary>
   /// Usa padrão Singleton para obter uma única instância do PostgreSQL.
   /// Utilizando thread-safe sem usar locks e not lazy.
   /// </summary>
   public sealed class ConnectPGSQL
   {
      //Cria instância da classe internamente
      private static readonly ConnectPGSQL _Instance = new ConnectPGSQL();
      
      //Construtor privado, não pode ser instanciado diretamente.
      private ConnectPGSQL()
      {
      }

      public static ConnectPGSQL getInstance()
      {
         return _Instance;
      }

      public NpgsqlConnection openConnection()
      {
         //Utilizando classe que gera string de conexão do xml
         OpenConfig openPGSQL = new OpenConfig();
         string stConnPGSQL = openPGSQL.readDriverPGSQL();
         NpgsqlConnection pgsql = new NpgsqlConnection(stConnPGSQL);
         pgsql.Open();
         return(pgsql);
      }
   }

   /// <summary>
   /// Usa padrão Singleton para obter uma única instância do Microsot SQL Server.
   /// Utilizando thread-safe usando locks e lazy initialization e o modelo
   /// Double Check Lock.
   /// </summary>
   public sealed class ConnectMSSQL
   {
      //Cria instância da classe internamente, inicialmente como nula
      private static volatile ConnectMSSQL _Instance = null;

      //Construtor privado, não pode ser instanciado diretamente.
      private ConnectMSSQL()
      {
      }

      public static ConnectMSSQL getInstance()
      {
         if (_Instance == null)
            {
               lock (typeof(ConnectMSSQL))
               {
                  if (_Instance == null)
                     _Instance = new ConnectMSSQL();
               }
            }
            return _Instance;
      }

      public SqlConnection openConnection()
      {
         //Utilizando classe que gera string de conexão do xml
         OpenConfig openMSSQL = new OpenConfig();
         string stConnMSSQL = openMSSQL.readDriverMSSQL();
         //Conectando no banco de dados
         SqlConnection mssql = new SqlConnection(stConnMSSQL);
         mssql.Open();
         return(mssql);
      }
   }
}

Scripts recomendados

Ordenação por seleção direta

Usando MySQL na linguagem C - Exemplo 5

Usando MySQL na linguagem C - Exemplo 1

Jogo da forca com banco de dados MySQL

Bubble Sort


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts