CONCEITUAL - FORMA DE ACESSO AO BANCO DE DADOS
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.
Obrigado mais uma vez pela ajuda!
Vou pesquisar as soluções indicadas.
Um abraço
Felipe Cabrera
Obrigado mais uma vez!
Felipe Cabrera
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();
}
}
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
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>