CONCEITUAL - FORMA DE ACESSO AO BANCO DE DADOS

MORDOR 23/04/2007 20:36:54
#213451
Citação:

FELIPECABRERA escreveu:
Mordor,

Obrigado pela colaboração. Tenho algumas dúvidas quanto a seus comentários...

1. Se criar novas conexões é custoso para o sistema, então sua sugestão é manter a conexão com o banco de dados aberta?

2. O Data Access Application Block da Enterprise Library é uma biblioteca que deve ser adquirida ou é nativa no .Net? Onde eu posso consegui-la para realizar testes?

3. Eu geralmente crio uma varivael reader (antigamente um recordset), uma connection e uma command.Utilizo apenas elas em todo os sistema. Hoje, no VB6, eu mantenho-as instanciadas e apenas abro o SQL no recordset quando vou utilizar e uso o método execute da conexao para os inserts, updates e deletes. No . Net já ví que a coisa é diferente... Mas manter apenas 1 variável de cada tipo vc considera que seja adequado? Quanto às funções, desconheço outras maneiras de mante-las exceto nos módulos. Vc tem alguma sugestão?

4. O dispose seria semelhante a um set classe = nothing?

5. Fiz a conexão da seguinte maneira:

[txt-color=#3333ff]Sub AbrirBanco()

Sql = Provider=PostgreSQL;data source=192.168.0.2;location=sistema;User ID=felipe;password=1234
DbConn = New OleDb.OleDbConnection(Sql)
DbConn.Open()

End Sub[/txt-color]

O que você acha?

Muito obrigado novamente pela colaboração!

Abraço

Felipe Cabrera



1- Não mantenha a conexão aberta, utilizando connection pooling você elimina esse processo custoso ao criar conexões a todo momento, pois sempre que você fechar uma conexão ela volta para o pool e já fica disponível para ser usada novamente.

3- Crie uma classe responsável pelas operações de consulta com métodos estáticos como passei anteriormente para não precisar ficar criando instâncias para utilizá-la, funciona como módulos. Crie os commands e readers dentro de cada método.

4- Não, o Dispose elimina recursos extras que uma determinada classe pode estar utilizando como nas conexões com banco de dados. Marcando como Nothing, você apenas define que a instância pode ser coletada pelo GC, mas ele não executa o método Dispose automaticamente para você. Sempre que disponível utilize o Dispose quando acabar de trabalhar com algum recurso.

5- Sinceramente não gosto de trabalhar assim, eu faço todos meus sistemas da mesma forma seguindo padrões que o tornem escalonáveis e de fácil manutenção. Do jeito que está fazendo, compartilhando a conexão em todo projeto seu sistema perde completamente a escalabilidade, imagine se precisar mover para o ambiente web, todos os usuários utilizarão a mesma conexão e isto é impraticável. Se seguir um padrão como esse que passei, numa migração de ambiente você reaproveita toda a camada de dados, precisando apenas adaptá-la a camada de apresentação que vai consumí-la. Lógico que tudo isso depende da sua necessidade.

Citação:

FELIPECABRERA escreveu:
Mordor,

Essa biblioteca não é compatível com a versão express?

Obrigado

Felipe Cabrera



Sim, é compatível. Essa biblioteca te permite trabalhar com o novo modelo de ProviderFactories do .NET 2.0 de forma bem mais simples que o usual e tornar sua aplicação independente do BD. Ele vem com um assistente de configuração que facilita a criação do app/web.config que ele utilizará para funcionar. Além do DAAB, existem diversos outros application blocks que facilitam o desenvolvimento como Caching, tratamento de exceções, log, criptografia, etc.
USUARIO.EXCLUIDOS 24/04/2007 19:44:38
#213592
Mordor,

Obrigado mais uma vez pela ajuda!

Vou pesquisar as soluções indicadas.

Um abraço

Felipe Cabrera
USUARIO.EXCLUIDOS 25/04/2007 18:10:11
#213766
Eu instalei o firebird esses dias na minha máquina. Eu não cheguei a estudar de maneira aprofundada o esse bando de dados, mas segundo uma análise que eu li, o Postgres, Oracle, SQL Server e DB2 são superiores a ele, sendo que o DB2 foi o banco mais bem avaliado. Até agora eu fiz apenas uma conexão utilizando OLEDB... Nesse momento estou estudando o ADO.Net. Estou com dificuldades em utilizar o DAAB, mas provavelmente pela pouca vivência no ambiente .Net. Estou pensando em participar de um treinamento, do curriculum oficial da Microsoft. Alguém tem alguma referência sobre esses cursos? Também estou procurando algum livro que seja bom... Aceito sugestões!

Obrigado mais uma vez!

Felipe Cabrera
MORDOR 25/04/2007 18:48:09
#213774
é bem simples utilizar o DAAB. Baixe no link que passei e após a instalação faça o seguinte.

No menu iniciar abra o assistente de configuração da Enterprise Library:

Microsoft patterns & practices -> Enterprise Library 3.0 - April 2007 -> Enterprise Library Configuration. No menu 'File' clique para criar uma nova aplicação. Depois em 'Application Configuration' abra o menu de contexto e selecione 'New -> Data Access Application Block'.

Em 'Connection strings' informe o provider que utilizará para fazer o acesso e a string de conexão. Se definir mais de uma string em 'Data Access Application Block' selecione qual string você usará para 'Default Database'. Salve a configuração como app.config para Windows Forms.

Crie um novo projeto e adicione as seguintes referências:
Enterprise Library Data Access Application Block
Enterprise Library Shared Library

Adicione no projeto o arquivo app.config que você criou anteriormente. Para testar use o código abaixo adaptando ao seu BD.

using System.Data;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data;

private void Form1_Load(object sender, EventArgs e)
{
Database database = DatabaseFactory.CreateDatabase();

using (DbCommand command = database.GetSqlStringCommand("select * from tabela"))
{
DbDataReader reader = (DbDataReader) database.ExecuteReader(command);

while (reader.Read())
Console.WriteLine((string) reader["campo1"]);

reader.Close();
}
}
USUARIO.EXCLUIDOS 25/04/2007 23:11:48
#213789
Mordor,

Obrigado mais uma vez pela dica. Sem querer abusar, ficaria muito grato por mais uma dica.

Quando eu vou criar um DAAB no meu sistema estão disponibilizadas as conexões para SQL Server, Oracle, OleDB e ODBC. Percebo que na imagem que você anexou está sendo disponibilizado também o driver do MySQL. Eu percebi que existe um arquivo para o Postgresql especial para o .NET. Eu baixei e registrei no GAC, seguindo as instruções do MSDN e do próprio arquivo. Porém, parece-me que a forma de utilização é diferente. Como eu devo fazer para que seja disponibilizado nesta lista drivers para outros bancos de dados?

Obrigado e um abraço

Felipe Cabrera
MORDOR 26/04/2007 01:00:55
#213791
Felipe, o último driver do MySql para o .NET já disponibiliza as features da versão 2.0 para trabalhar com as ProviderFactories. Ao instalar esse provider (MySql/Connector 5.0.6) é adicionado no arquivo machine.config no diretório do Framework a chave indicando que ele está instalado no sistema. O configurador da Enterprise Library carrega deste arquivo as Factories instaladas. Você precisa ver se há uma versão do driver do PostgreSql para o .NET 2.0 com esse recursos. Caso não haja, utilize as Factories Oledb ou Odbc para conectá-lo configurando no DAAB informando a string de conexão.

machine.config
  <system.data>
<DbProviderFactories>
<add name="Odbc Data Provider" invariant="System.Data.Odbc" description=".Net Framework Data Provider for Odbc" type="System.Data.Odbc.OdbcFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<add name="OleDb Data Provider" invariant="System.Data.OleDb" description=".Net Framework Data Provider for OleDb" type="System.Data.OleDb.OleDbFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<add name="OracleClient Data Provider" invariant="System.Data.OracleClient" description=".Net Framework Data Provider for Oracle" type="System.Data.OracleClient.OracleClientFactory, System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<add name="SqlClient Data Provider" invariant="System.Data.SqlClient" description=".Net Framework Data Provider for SqlServer" type="System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<add name="SQL Server CE Data Provider" invariant="Microsoft.SqlServerCe.Client" description=".NET Framework Data Provider for Microsoft SQL Server 2005 Mobile Edition" type="Microsoft.SqlServerCe.Client.SqlCeClientFactory, Microsoft.SqlServerCe.Client, Version=9.0.242.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=5.0.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
Página 2 de 2 [17 registro(s)]
Tópico encerrado , respostas não são mais permitidas