DOR DE CABECA DEPOIS DE FORMATAR MEU PCBOA TARDE G
======================================================================
Citação:Public Function PegaCli(ByVal rCodigo As Integer) As NpgsqlDataReader
Try
Dim DR As NpgsqlDataReader
DR = ConsultaSQL([Ô]SELECT * FROM cliente WHERE codcli=[ô][Ô] & rCodigo & [Ô][ô][Ô])
Return DR
Catch ex As Exception
MsgBox([Ô]Erro na função: PegaCli[Ô] & vbNewLine & ex.Message)
End Try
End Function
============================================================================
Citação:Public Function ConsultaSQL(ByVal rComandoSQL As String) As NpgsqlDataReader
[ô]VERIFICA SE rComandoSQL TEM ALGUM CONTEUDO
If rComandoSQL = [Ô][Ô] Then
MsgBox([Ô]FUNÇÃO: ConsultaSQL[Ô] & vbNewLine & _
[Ô]Informar um comando SQL[Ô])
End If
AbreBanco()
DA = New NpgsqlDataAdapter(rComandoSQL, conn)
cmdSQL = New NpgsqlCommand(rComandoSQL, conn)
DR = cmdSQL.ExecuteReader()
FechaBanco()
Return DR
End Function
===========================================================
aqui esta os comando que estou usando no meu form, o engraçado é que ele nao da nenhum erro,
este código abaixo esta no load do form que abre o cadastro de cliente para edição e afins,
alguem pode me da uma ajuda???
===========================================================
Citação:Try
Dim DRCli As NpgsqlDataReader
Select Case wAcao
Case Is = [Ô]insert[Ô]
Me.Text = [Ô]INCLUSÃO DE CLIENTES[Ô]
Case Is = [Ô]update[Ô]
DRCli = PegaCli(wCodigo)
Me.Text = [Ô]ALTERAÇÃO DE CLIENTES[Ô]
While DRCli.Read()
Me.txtNome.Text = DRCli([Ô]nome[Ô]).ToString.Trim
Me.txtEndereco.Text = DRCli([Ô]endereco[Ô]).ToString.Trim
Me.txtBairo.Text = DRCli([Ô]bairro[Ô]).ToString.Trim
Me.mskFoneRes.Text = DRCli([Ô]foneres[Ô]).ToString.Trim
Me.mskFoneCom.Text = DRCli([Ô]fonecom[Ô]).ToString.Trim
Me.mskFoneCel.Text = DRCli([Ô]fonecel[Ô]).ToString.Trim
Me.txtEmail.Text = DRCli([Ô]email[Ô]).ToString.ToLower.Trim
End While
Case Is = [Ô]select[Ô]
DRCli = PegaCli(wCodigo)
MsgBox(DRCli.HasRows.ToString)
Me.Text = [Ô]VISUALIZAÇÃO DE CLIENTE[Ô]
Me.cmdOK.Enabled = False
While DRCli.Read()
Me.txtNome.Text = DRCli([Ô]nome[Ô]).ToString.Trim
Me.txtEndereco.Text = DRCli([Ô]endereco[Ô]).ToString.Trim
Me.txtBairo.Text = DRCli([Ô]bairro[Ô]).ToString.Trim
Me.mskFoneRes.Text = DRCli([Ô]foneres[Ô]).ToString.Trim
Me.mskFoneCom.Text = DRCli([Ô]fonecom[Ô]).ToString.Trim
Me.mskFoneCel.Text = DRCli([Ô]fonecel[Ô]).ToString.Trim
Me.txtEmail.Text = DRCli([Ô]email[Ô]).ToString.ToLower.Trim
End While
Case Is = [Ô]delete[Ô]
Me.Text = [Ô]EXCLUSÃO DE CLIENTE[Ô]
End Select
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Tente, só para matar as dúvidas, não utilizar um DataReader (que pode/deve estar vazio após ter sido encerrada a conexão), mas sim um DataTable, preenchido por um DataAdapter.
Mas não [Ô]mate[Ô] as suas rotinas, hehehe, é só para testar, e você visualizar as diferenças, ok?
O DataAdapter não requer uma conexão aberta, mas apenas a instrução SQL e a string de conexão. Com o método Fill, ele se conecta, preenche um DataTable ou DataSet com os dados da consulta e encerra a conexão.
Public Function ConsultaSQL(ByVal rComandoSQL As String) As DataTable
Dim dt As DataTable = Nothing
If rComandoSQL = [Ô][Ô] Then
MsgBox([Ô]FUNÇÃO: ConsultaSQL[Ô] & vbNewLine & [Ô]Informar um comando SQL[Ô])
Else
Try
[ô]Com Using / End Using, o próprio DataAdapter será destruÃdo após o uso.
Using mDA As New NpgsqlDataAdapter(rComandoSQL, conn.ConnectionString)
dt = New DataTable
mDA.Fill(dt)
End Using
Catch ex As Exception
dt = Nothing
MsgBox(String.Format([Ô]FUNÇÃO: ConsultaSQL{0}{1}[Ô], vbNewLine, ex.Message))
End Try
End If
Return dt
End Function
O DataReader é de fato mais rápido do que o DataAdapter, mas sua instância é dependente do conector. E se utilizar um DataAdapter com ele, estará apenas [Ô]dobrando o peso[Ô], pois é mais um componente á ser gerenciado. Assim, um DataTable carregado por um DataAdapter, ainda que um pouco mais lento, pode ser o mais adequado.
obrigado pela explicação [Ô]teacher[Ô]
feliz ano novo pra todos