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.006 ]

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

Usando MySQL na linguagem C - Exemplo 3

Funções PosgreSQL - func_pg

Ordenação por inserção direta

Jogo da forca com banco de dados MySQL

Agenda eletrônica em C + SQL


  

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