Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Thiago_ASP

Camada de acesso a dados

Recommended Posts

Fala galera... beleza?

Então... tenho uma Classe responsável pelo acesso a base de dados, ela possui basicamente dois metodos:

ExecuteQuerySelect -> Executa querys com Retorno de Dados.(datatable)

ExecuteNonQuery -> Executa querys sem Retorno de Dados.

 

andei pesquisando na web a melhor forma de aumentar a performance e segurança da minha aplicação começando por essa classe, descobri alguns artigos, que aconselhavam a usar o "using (sqlConnection)" na minha conexão, pra indicar quando ela deve ser aberta ou fechada, resumindo, não sei se estou fazendo da maneira correta, e se existem outra formas/técnicas para deixar o acesso a dados mais rápido!.... o que vcs fariam para melhorar essa classe? :rolleyes:

 

obrigado pela força!!! http://forum.imasters.com.br/public/style_emoticons/default/grin.gif

abraços!

Thiago

 

using System;
using System.Data;
using System.Data.SqlClient;
using System.Web.Configuration;
namespace CORE.DAL
{
	/// <summary>
	/// Classe DBHelper (Camada de acesso a dados)
	/// Esta classe possui dois métodos responsáveis pelas ações de Seleção, Inserção, Exclusão, Alteração na base de dados.
	/// </summary>
	public class DBHelper
	{
		//Região de Atributos
		#region <Atributos>
		private SqlConnection sqlConnection;
		#endregion

		//Região de propriedades
		#region<Propriedades>

		//Get que retorna a String de conexão ao banco de dados alocada no arquivo WEBCONFIG.	   
		private string gs_connectionString
		{
			get
			{
				return WebConfigurationManager.ConnectionStrings["StringConexao"].ToString();
			}
		}

		//Get que abre (caso esteja fechada) e retorna a String de conexão ao banco de dados. 
		private SqlConnection gs_Conexao
		{
			get
			{
				if (sqlConnection == null || sqlConnection.State.ToString() == "Closed")
				{
					sqlConnection = new SqlConnection(gs_connectionString);
					sqlConnection.Open();
				}

				return sqlConnection;
			}
		}
		#endregion

		//Região de Métodos
		#region<Métodos>
		
		/// <summary>
		/// Método para executar e retornar querys de Select na base de dados.
		/// </summary>
		/// <param name="sql">slq - query SELECT a ser executada.</param>
		/// <returns>DataTable - Tabela com os dados solicitados.</returns>
		public DataTable ExecuteQuerySelect(string sql)
		{
			using (sqlConnection)
			{
				//Cria um atributo do tipo "Comando Sql" que Recebe a query solicidade e a Conexão.
				SqlCommand oCommand = new SqlCommand(sql, gs_Conexao);

				//Cria um atributo do tipo "Adaptador de Dados" com "Comando Sql"
				SqlDataAdapter oDa = new SqlDataAdapter(oCommand);

				//Cria uam coleção de dados (DataSet)
				DataSet oDs = new DataSet();

				//Preenche a Coleção de dados com o "Adaptador de Dados"
				oDa.Fill(oDs);

				//fecha Conexão
				sqlConnection.Close();

				//Caso a Coleção de Dados(oDS) contenha dados, e esses dados sejam equivalentes a uma tabela.
				if (oDs != null && oDs.Tables.Count > 0)
				{
					//Retorna a Tabela da Coleção de Dados.
					return oDs.Tables[0];
				}
			}
			//Caso a Coleção de Dados(oDS) esteja Nula, Retorna uma Tabela vazia.(DataTable = Null)
			return null;
		}
		
		/// <summary>
		/// Método para executar ações sem retorno na base de dados. (Delete, Insert, Update) 
		/// </summary>
		/// <param name="sql">slq - query (Delete, Insert ou Update) a ser executada.</param>
		public void ExecuteNonQuery(string sql)
		{
			using (sqlConnection)
			{
				//Cria um atributo do tipo "Comando Sql" que Recebe a query solicidade e a Conexão.
				SqlCommand oCommand = new SqlCommand(sql, gs_Conexao);

				//Executa sem retorno o "Comando Sql" no Banco de dados.
				oCommand.ExecuteNonQuery();

				//fecha Conexão
				sqlConnection.Close();
			}
		}

		#endregion
	
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Thiago vou deixar uma dica simples, mas pode contribuir um pouco com a performance da sua aplicação.

Depois que você utilizou procure destruir os SqlCommand, SqlDataAdapter e seus DataSets utilizando o Dispose ou o Close. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

valeu Quintelab, mais uma vez pela força....

mas a minha pergunta é: essa minha classe de acesso a dados... está correta?

se você fosse fazer uma com o mesmo objetivo, faria assim? se não... tem exemplos??

grande abraço!

Thiago

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na minha opnião esta Ok. Tenho algo parecido, o que eu fiz foi separar em classes diferentes a parte responsável por executar comandos diretos no banco da classe responsável por criar a conexão. Mas para mim sua classe esta OK.

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.