CONEXAO COM BDS...
Minha dúvida é a seguinte:
Quando fazemos a conexão com algum tipo de banco de dados nós definimos a conexão, acessamos as tabelas e os campos.
Eu gostaria de saber se eu tenho que em cada formulário definir a conexão com o BD ou tem como fazer uma rotina genérica que abra o banco de dados no inÃcio de um dado formulário e ela fique aberta e antes de sair do sistema seja fechada a conexão, digo isso porque os códigos de abertura/fechando do BD estão ficando espalhados por todo os formulários que eu crio.
Algueém tem algum exemplo de como fazer isso.
Grato.
Você pode criar uma função que faz a conexão com o banco de dados e toda vez que for acessar o banco faça a chamada pelo nome dessa função.
Abaixo coloco o exemplo de uma função que faz a conexão com o PostgreSQL. A função a ser criada varia de banco para banco!
======================================================================
Private Function ObtemConexao() As ADODB.Connection
[ô]*******************************
[ô]* Dimensionamento de variáveis
[ô]*******************************
Dim conexao As ADODB.Connection
conexao = New ADODB.Connection
[ô]*******************************
[ô]* Define parâmetros de conexão
[ô]*******************************
conexao.CommandTimeout = 30
conexao.ConnectionTimeout = 60
conexao.CursorLocation = ADODB.CursorLocationEnum.adUseClient
conexao.ConnectionString = [Ô]Driver={PostgreSQL UNICODE};Server=localhost;Port=5432;Database=SEU_BD;Uid=postgres;Pwd=[ô]SENHA[ô];[Ô]
conexao.Open()
ObtemConexao = conexao
Exit Function
======================================================================
Esse outro exemplo foi tirado do site do Macoratti (www.macoratti.net). Nele não foi criada a função propriamente dita, a conexão com o banco foi feita após o clique de um botão que estava em um formulário, que acredito ser o mesmo que você está fazendo. De qualquer forma, essa conexão pode ser feita em um módulo separado como mostrado acima.
Dim ConexaoPG As String = [Ô]Server=localhost;Port=5432;UserId=postgres;Password=[ô]SENHA[ô];
Database=SEU_BD[Ô]
Dim conn As NpgsqlConnection = Nothing
Try
[ô]Instancia NpgsqlConnection na variavel conn
conn = New NpgsqlConnection(ConexaoPG)
[ô]Abre a conexão
conn.Open()
Nesse último exemplo foi utilizado para conexão com o PostgreSQL o Npgsql.
======================================================================
Abraço,
Alexandre
Citação::
Olá SPYDREX
Você pode criar uma função que faz a conexão com o banco de dados e toda vez que for acessar o banco faça a chamada pelo nome dessa função.
Abaixo coloco o exemplo de uma função que faz a conexão com o PostgreSQL. A função a ser criada varia de banco para banco!
======================================================================
Private Function ObtemConexao() As ADODB.Connection
[ô]*******************************
[ô]* Dimensionamento de variáveis
[ô]*******************************
Dim conexao As ADODB.Connection
conexao = New ADODB.Connection
[ô]*******************************
[ô]* Define parâmetros de conexão
[ô]*******************************
conexao.CommandTimeout = 30
conexao.ConnectionTimeout = 60
conexao.CursorLocation = ADODB.CursorLocationEnum.adUseClient
conexao.ConnectionString = [Ô]Driver={PostgreSQL UNICODE};Server=localhost;Port=5432;Database=SEU_BD;Uid=postgres;Pwd=[ô]SENHA[ô];[Ô]
conexao.Open()
ObtemConexao = conexao
Exit Function
======================================================================
Esse outro exemplo foi tirado do site do Macoratti (www.macoratti.net). Nele não foi criada a função propriamente dita, a conexão com o banco foi feita após o clique de um botão que estava em um formulário, que acredito ser o mesmo que você está fazendo. De qualquer forma, essa conexão pode ser feita em um módulo separado como mostrado acima.
Dim ConexaoPG As String = [Ô]Server=localhost;Port=5432;UserId=postgres;Password=[ô]SENHA[ô];
Database=SEU_BD[Ô]
Dim conn As NpgsqlConnection = Nothing
Try
[ô]Instancia NpgsqlConnection na variavel conn
conn = New NpgsqlConnection(ConexaoPG)
[ô]Abre a conexão
conn.Open()
Nesse último exemplo foi utilizado para conexão com o PostgreSQL o Npgsql.
======================================================================
Abraço,
Alexandre
Eu poderia colocar essa função dentro de um módulo ?
como ficaria a chamada dela dentro de um form ?
Grato.
Citação::
você usa conexão ODBC ou .NET?
.NET
Usando classe de persistência em VB.Net
http://www.youtube.com/watch?v=7M16jAoewUk
- No exemplo que eu fiz, criei um módulo para fazer a conexão com o BD (nesse caso especÃfico utilizo o MySQL) - [txt-color=#0000f0]Módulo[/txt-color] conexao.
- Depois criei outro módulo para realizar a Consulta. [txt-color=#0000f0]Módulo[/txt-color] consulta.
- Depois no evento Load do Form eu chamo a conexão e a consulta. Com isso não preciso fazer a conexão em cada um dos meus formulários.
=========================================================
================= Módulo da conexão =======================
=========================================================
Imports MySql.Data.MySqlClient
Module conexao
Public conn As New MySqlConnection
Public Sub conexaoBD()
conn = New MySqlConnection
conn.ConnectionString = [Ô]server=localhost;database=mysql;Uid=root;password=XXXXXXX;[Ô]
conn.Open()
End Sub
End Module
=========================================================
================= Módulo da consulta =======================
=========================================================
Imports MySql.Data.MySqlClient
Module consulta
Public myCommand As New MySqlCommand
Public myAdapter As New MySqlDataAdapter
Public myData As New DataTable
Public sql As String
Public Sub consultaBD()
sql = [Ô]SELECT * FROM alunos[Ô]
myCommand.Connection = conn
myCommand.CommandText = sql
myAdapter.SelectCommand = myCommand
myAdapter.Fill(myData)
Form1.DataGridView1.DataSource = myData
conn.Close()
conn.Dispose()
End Sub
End Module
=========================================================
================= Evento Load do Form =======================
=========================================================
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
conexaoBD()
consultaBD()
End Sub
End Class
=========================================================
Espero que tenha entendido.
Abraço,
Alexandre
Citação::
Olá SPYDREX
- No exemplo que eu fiz, criei um módulo para fazer a conexão com o BD (nesse caso especÃfico utilizo o MySQL) - [txt-color=#0000f0]Módulo[/txt-color] conexao.
- Depois criei outro módulo para realizar a Consulta. [txt-color=#0000f0]Módulo[/txt-color] consulta.
- Depois no evento Load do Form eu chamo a conexão e a consulta. Com isso não preciso fazer a conexão em cada um dos meus formulários.
=========================================================
================= Módulo da conexão =======================
=========================================================
Imports MySql.Data.MySqlClient
Module conexao
Public conn As New MySqlConnection
Public Sub conexaoBD()
conn = New MySqlConnection
conn.ConnectionString = [Ô]server=localhost;database=mysql;Uid=root;password=XXXXXXX;[Ô]
conn.Open()
End Sub
End Module
=========================================================
================= Módulo da consulta =======================
=========================================================
Imports MySql.Data.MySqlClient
Module consulta
Public myCommand As New MySqlCommand
Public myAdapter As New MySqlDataAdapter
Public myData As New DataTable
Public sql As String
Public Sub consultaBD()
sql = [Ô]SELECT * FROM alunos[Ô]
myCommand.Connection = conn
myCommand.CommandText = sql
myAdapter.SelectCommand = myCommand
myAdapter.Fill(myData)
Form1.DataGridView1.DataSource = myData
conn.Close()
conn.Dispose()
End Sub
End Module
=========================================================
================= Evento Load do Form =======================
=========================================================
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
conexaoBD()
consultaBD()
End Sub
End Class
=========================================================
Espero que tenha entendido.
Abraço,
Alexandre
Caro ENGALEXANDRE
Realmente achei muito interessante essa tua abordagem e acredito ser uma solução legal.
Tenho mais uma dúvida que acredito que gerará alguma discussão acalorada aqui, ela é a que segue:
Tenho visto em muitos exemplos que para fazer a conexão com os bancos de dados e colocado no código o Provider, ip, usr, passw, etc...
Não sei se é porque eu sou muito encanado com o assunto segurança, porque eu sou totalmente contra ter essas informações passados via linha de programa, pois qualquer descompilador pode recuperar o código e de posse dessas informações algum carinha mal intencionado pode fazer misérias na base de dados, tipo de sacanagem apagar todos os registros da tabela clientes por exemplo, já que tais login permitem execução de tais procedimentos no BD, eu entendo que ao invés de passar essas informações via linha de programação seja solicitada do usuário e depois enviada como complemento da string do Provider.
é claro que se o usuário tiver um daqueles keylogger no computador com certeza vai dar problema, mas você teria pelo menos como saber de onde partiu tal problema.
Mas o lado bom da coisa é que a segurança de login/senha será concentrada no BD, tirando essa responsabilidade das costas do programador.
O que você(s) acha(m) da idéia ?, Será que estou viajando ?, Existe alguma impementação assim ?, Existe algum exemplo para tirar algumas idéias.
Grato.
Essa sua questão é pertinente. Nos exemplos que eu coloquei, o fiz de forma [Ô]genérica[Ô], ou seja, passando a string de conexão direto no código fonte.
Uma das coisas que eu faço é utilizar um XML que guarda as informações dos parâmetros da conexão. Esse XML fica dentro de um diretório que eu quiser. Sendo assim, passo as informações da conexão com o BD via XML, não deixando nenhum dado como IP, Usuário e Senha de forma explÃcita no código fonte.
À noite mostro como faço isso em projetos que tenho. Onde estou não disponho do Visual Studio no momento.
Abraço,
Alexandre