Usuário com melhor resposta
Função para conectar em BD access2000

Pergunta
-
Estou usando uma função para conectar em um BD. Esta função esta dentro da CamadaDeNegocios ela é do tipo publica. Por favor se alguem puder dar uma olhada e conferir para ver se ela esta certa, desde já obrigada. Outra coisa estou com duvida tambem de como capturar e passar mensagem de erro da camadadenegocios para a camadadeapresentacao.
Public Function Conecta_Smadb() As OleDbConnection
var_conectaDB.CreateCommand()
var_conectaDB.ConnectionString = "Provider=Microsoft.JET.OLEDB.4.0; Data Source=C:\teste\testeDB.mdb"
End Function
Respostas
-
Camila,
Faltou você fornecer o Connection para o Command:
With comand_salva
.Connection = var_conectaDB
.CommandText = "INSERT INTO PessoaTB(Nome, Endereco, Fone) VALUES (?,?,?)"Abraços,
Francisco
Ok,Computer - http://thespoke.net/blogs/fbcjunior/default.aspx- Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 3 de dezembro de 2010 23:38
Todas as Respostas
-
Camila,
O CreateCommand no seu código não tem função alguma, ele não é necessário aí. CreateCommand serve para devolver um objeto OleDbCommand instanciado e com a propriedade Connection já informada.
Basicamente o que você está fazendo é fornecer uma ConnectionString a um objeto aparentemente de escopo de classe, a partir daí você poderá invocar o método Open dele para estabelecer a conexão. Outra coisa, você criou um Function então você deve devolver um valor - no caso um OleDbConnection. Se não há o que devolver como valor, deveria ser uma Sub, não uma Function.
Normalmente eu deixo minhas exceptions ir subindo pelos métodos e camadas e se o objetivo é só exibir/logar o erro eu só o trato na camada de apresentação. A menos, é claro, que exista um código onde uma providência pode ser tomada antes ou que a avaliação do erro me coloque em condição de tentar um outro tratamento. Se não é o caso, eu deixo ele sair sem tratamento e o logo/exibo quando bater lá em cima, na apresentação.
Abraços,
Francisco
Ok,Computer - http://thespoke.net/blogs/fbcjunior/default.aspx -
Francisco, tentei fazer do jeito que vc passou. Não entendi o esquema das exceptions, segue abaixo uma parte do codigo, se vc puder conferir desde ja obrigada.
Private Sub Conecta_Smadb()
var_conectaDB.ConnectionString = "Provider=Microsoft.JET.OLEDB.4.0; Data Source=C:\teste\testeDB.mdb"
End Sub
Public Sub Salva_Cliente(ByVal var_nome As String, ByVal var_endereco As String, ByVal var_fone As String)
Dim comand_salva As New OleDbCommand
Conecta_Smadb() 'chama função
Try
var_conectaDB.Open()
With comand_salva.CommandText = "INSERT INTO PessoaTB(Nome, Endereco, Fone) VALUES (?,?,?)"
.Parameters.Add(
New OleDbParameter("Nome", OleDbType.VarChar, 40)).Value = var_nome.Parameters.Add(
New OleDbParameter("Endereco", OleDbType.VarChar, 40)).Value = var_endereco.Parameters.Add(
New OleDbParameter("Fone", OleDbType.VarChar, 40)).Value = var_fone.ExecuteNonQuery()
End Withvar_conectaDB.Close()
Catch mErro As Exception"aqui como eu faço"
If var_conectaDB.State.Open Then
var_conectaDB.Close()
End If End Try End Sub -
Camila,
Então, o que eu vou falar abaixo é o que eu faria, alguma empresas tem políticas diferentes quanto a isto:
- Nas camadas mais abaixo (business, data, etc...), neste caso eu faria um Try...Finally:
Try
' Código passível de erro
Finally
' Providências para fechar recursos, mudar variáveis de controle, etc...
End TryEu não faria o Catch nas camadas mais abaixo, eu deixo o erro se propagar para o chamador, pois não há o que fazer aqui. Na camada de apresentação sim eu colocaria o Catch:
Try
' Chamada de métodos de negócio passíveis de erro....
Catch ex As Exception ' Ou outra exceção em específico...
' Trato o erro, seja logando ou o exibindo
End TryQue é onde me faz sentido, pois eu posso exibir o erro e/ou logá-lo. Óbvio, há condições em que eu uso o Catch nas camadas mais abaixo, como quando eu posso reverter o erro ou quando eu quero mandar um erro meu para fora, algo que me confira mais informações no tratamento, mas normalmente a situação que eu descrevi acima é a mais recorrente.
Abraços,
Francisco
Ok,Computer - http://thespoke.net/blogs/fbcjunior/default.aspx -
Francisco, agora eu entendi +/-. Só que ao executar o codigo esta dando um erro no "executenonquery". "system.invalid operation: executenonquery: connection property has not been initialized". Se vc dar uma olhada no codigo acima e conferir para ver se esta certo, obrigada.
-
Camila,
Faltou você fornecer o Connection para o Command:
With comand_salva
.Connection = var_conectaDB
.CommandText = "INSERT INTO PessoaTB(Nome, Endereco, Fone) VALUES (?,?,?)"Abraços,
Francisco
Ok,Computer - http://thespoke.net/blogs/fbcjunior/default.aspx- Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 3 de dezembro de 2010 23:38
-
-
Francisco, aconteceu uma duvida. Atraves das mensagens que vc me passou tentei montar a rotina, só que aconteceu uma duvida, como passar para a CamadaDeApresentacao que os dados foram incluidos com sucesso, por exemplo. Daí montei da forma abaixo e queria sua opnião. Desde já obrigada.
... 'codigo do programa que esta na CamadaDeNegocios
.ExecuteNonQuery()
End Withvar_conectaDB.Close()
mErro = "OK" 'criei esta variavel do tipo string e que receberá "OK" se o codigo chegar aqui e será
filtrada pela CamadaDeApresentacao
Finally If var_conectaDB.State.Open Thenvar_conectaDB.Close()
End If End Try -
Camila,
Respondi para você na outra thread que você abriu, ok? :-)
Abraços,
Francisco
Ok,Computer - http://thespoke.net/blogs/fbcjunior/default.aspx