none
Duda sobre singleton RRS feed

  • Pregunta

  • Hola a todos,

    encontré una clase que usa el patrón singleton para realizar consultas a la base de datos y guardar los datos, esta es la clase:

    using System;
    using System.Data.SqlClient;
    using System.Data;
    using System.Configuration;
    
    public class Data
    {
        private static Data instance = null;
    
        private static DataTable tableResult;
        private static String messageError;
    
        protected Data()
        {
            tableResult = new DataTable();
            messageError = String.Empty;
        }
    
        public static Data Instance
        {
            get
            {
                if (instance == null)
                    instance = new Data();
    
                return instance;
            }
        }
    
        public DataTable TableResult
        {
            get
            {
                return tableResult;
            }
            set
            {
                tableResult = value;
            }
        }
    
        public void TableResultDispose()
        {
            TableResult.Dispose();
        }
    
        public String Error
        {
            get
            {
                return messageError;
            }
            set
            {
                messageError = value;
            }
        }
    
        private bool ExecuteQuery(string Query)
        {
            using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["DB"].ConnectionString))
            {
                using (SqlCommand command = new SqlCommand(Query, connection))
                {
                    DataTable DataTable = new DataTable();
                    try
                    {
                        connection.Open();
                        command.ExecuteReader();
                        return true;
                    }
                    catch (SqlException ex)
                    {
                        this.Error = ex.Message;
                        return false;
                    }
                    finally
                    {
                        connection.Close();
                    }
                }
            }
        }
    
        public bool GetDataTable(string Query)
        {
            using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["DB"].ConnectionString))
            {
                using (SqlDataAdapter dbAdapter = new SqlDataAdapter(Query, connection))
                {
                    DataTable DataTable = new DataTable();
                    try
                    {
                        connection.Open();
                        dbAdapter.Fill(DataTable);
                        this.TableResult = DataTable;
                        return true;
                    }
                    catch (Exception e)
                    {
                        this.Error = e.Message;
                        return false;
                    }
                    finally
                    {
                        connection.Close();
                    }
                }
            }
        }
    }

    Pero tengo una duda, esto en un ambiente web, donde se conectan varios usuarios ¿puede traer consecuencias negativas?, ¿como cuales?

    y para hacer uso de la clase hace esto (supongamos en Home.aspx.cs):

        protected void Page_Load(object sender, EventArgs e)
        {
            if (Data.Instance.GetDataTable("select * from customer"))
            {
                gridview1.DataSource = Data.Instance.TableResult;
                gridview1.DataBind();
            }
            else
            {
                Response.Write("Error : " + Data.Instance.Error);
            }
        }
    utiliza la misma clase para guardar los datos que arroja la consulta select * from customer, como funcionaria esta clase con multiples usuarios conectados al mismo tiempo?

    saludos,

    viernes, 1 de agosto de 2014 16:33

Respuestas