GRAVAR REGISTRO DE UM DATASET NO BANCO DE DADOS

MRSILVA 01/12/2015 23:55:40
#454669
Olá pessoal.
Estou tentando inserir registro no banco de dados através de um dataset, só que não estou conseguindo o pior que também não gera erro, dessa forma não consigo identificar o que preciso corrigir, fiz varias pesquisas tentei vários exemplos, só que os mesmos não são inseridos os registros, mas também não da erro, veja abaixo os códigos que estou utilizando.
A tabela no meu banco de dados e formada por seis colunas, sendo que chave primaria é do tipo inteiro incrementada automaticamente no meu banco de dados

Função para criar meu dataset, que está funcionando normalmente, não estou criando o campo Id auto incremento, mas também tentei criando não deu certo.
Public Function criarTblAcesso() As DataSet

Dim ds As New DataSet

ds.Tables.Add([Ô]tblAcessos[Ô])
ds.Tables(0).Columns.Add([Ô]Loguin[Ô], GetType(String))
ds.Tables(0).Columns.Add([Ô]Aplicativo[Ô], GetType(String))
ds.Tables(0).Columns.Add([Ô]DataAcessoEnt[Ô], GetType(DateTime))
ds.Tables(0).Columns.Add([Ô]DataAcessoSai[Ô], GetType(DateTime))
ds.Tables(0).Columns.Add([Ô]Validado[Ô], GetType(String))

Return ds

End Function

Sub que salva o dataset no banco de dados

Public Sub AtualizarDataSet1(ByVal db As DataTable, ByVal SQL As String)

Dim conn As New SqlConnection(ConectString)



conn.Open()
Dim TableAdapter As New SqlDataAdapter(SQL, conn)
TableAdapter.Fill(db)

Dim Tab_MinhaTabela As DataTable
Tab_MinhaTabela = db


Dim CmdBuilder As New SqlCommandBuilder(TableAdapter)
TableAdapter.Update(db)
conn.Close()
End Sub

Já tentei de varias formas mas não grava os registros mas também não da erro.
Desde já agradeço.
ACCIOLLY 02/12/2015 09:46:47
#454680
Resposta escolhida
Bom dia,
vou te passar outra solução que uso apenas com datatable
Na verdade criei uma classe de conexao com dois métodos, um de pesquisa outro de CRUD

Imports System
Imports System.Data
Imports System.Data.OleDb
Imports System.Windows.Forms

Public Class conexao

Private Banco As String = [Ô]Provider=Microsoft.ACE.OLEDB.12.0;Data Source=caminho_banco; Jet OLEDB:Database Password = senha_Banco;[Ô]

Public Function Pesquisar(ByVal SQL As String) As DataTable
Dim dados As New DataTable
Try
dados.Rows.Clear()
Dim conectar As New OleDbConnection(Banco)
conectar.Open()
Dim comando As New OleDbCommand(SQL, conectar)
Dim adapter As New OleDbDataAdapter(comando)
adapter.Fill(dados)
conectar.Close()

Catch ex As Exception
MessageBox.Show([Ô]Erro de Comando SQL: [Ô] & ex.Message)
End Try

Return dados
End Function

Public Sub CRUD(ByVal SQL As String)
Try
Dim conectar As New OleDbConnection(Banco)
conectar.Open()
Dim comando As New OleDbCommand(SQL, conectar)
comando.ExecuteNonQuery()
conectar.Close()
Catch ex As Exception
MessageBox.Show([Ô]Erro de Comando SQL: [Ô] & ex.Message)
End Try
End Sub



End Class


aí quando for pesquisar no banco só instancia a classe e manda o SQL

Dim Conn As New conexao()
Dim dados As New DataTable = Conn.Pesquisar([Ô]SELECT * FROM tabela[Ô])


daí é só saber como obter os valores desse DataTable

E pra INSERT, UPDATE ou DELETE também instancie a classe e passe o sql da operação desejada através do metodo CRUD

Dim Conn As New conexao()
Conn.CRUD([Ô]INSERT INTO...[Ô])


e assim em diante;
se seu banco não for access e for mysql muda pouca coisa na classe de conexao. se for mesmo access, atente-se para a string de conexão pois a que passei é pros bancos novos [Ô]accdb[Ô] a do [Ô]mdb[Ô] é outra string
MRSILVA 02/12/2015 13:58:03
#454695
Obrigado Accioly.

Mas onde passo meu Dataset já criado para atualizar meu banco de dados?

Você sabe me dizer o que está errado na minha sub AtualizarDataSet? Essa sub era para atualizar meu banco de dados.


Desde já agradeço.
OMAR2011 02/12/2015 17:18:14
#454708
Olha isto.Exemplo simples.
http://www.jorgepaulino.com/2008/04/vbnet-utilizando-o-controlo.html.
No site o Macoratti tem mais.
ACCIOLLY 02/12/2015 19:10:54
#454718
Que banco vc está utilizando?
Como vc está fazendo a conexão com o banco?
Já vou falando que tive as mesmas dificuldades quando tentei conectar com o data Soure do .net
Depois que passei a usar OLEDB na unha como te passei na última resposta tudo melhorou. Pq assim vc tem algo mais confiável
RICARDOCENTENO 04/12/2015 14:36:01
#454813
Citação:

:
Bom dia,
vou te passar outra solução que uso apenas com datatable
Na verdade criei uma classe de conexao com dois métodos, um de pesquisa outro de CRUD

Imports System
Imports System.Data
Imports System.Data.OleDb
Imports System.Windows.Forms

Public Class conexao

Private Banco As String = [Ô]Provider=Microsoft.ACE.OLEDB.12.0;Data Source=caminho_banco; Jet OLEDB:Database Password = senha_Banco;[Ô]

Public Function Pesquisar(ByVal SQL As String) As DataTable
Dim dados As New DataTable
Try
dados.Rows.Clear()
Dim conectar As New OleDbConnection(Banco)
conectar.Open()
Dim comando As New OleDbCommand(SQL, conectar)
Dim adapter As New OleDbDataAdapter(comando)
adapter.Fill(dados)
conectar.Close()

Catch ex As Exception
MessageBox.Show([Ô]Erro de Comando SQL: [Ô] & ex.Message)
End Try

Return dados
End Function

Public Sub CRUD(ByVal SQL As String)
Try
Dim conectar As New OleDbConnection(Banco)
conectar.Open()
Dim comando As New OleDbCommand(SQL, conectar)
comando.ExecuteNonQuery()
conectar.Close()
Catch ex As Exception
MessageBox.Show([Ô]Erro de Comando SQL: [Ô] & ex.Message)
End Try
End Sub



End Class


aí quando for pesquisar no banco só instancia a classe e manda o SQL

Dim Conn As New conexao()
Dim dados As New DataTable = Conn.Pesquisar([Ô]SELECT * FROM tabela[Ô])


daí é só saber como obter os valores desse DataTable

E pra INSERT, UPDATE ou DELETE também instancie a classe e passe o sql da operação desejada através do metodo CRUD

Dim Conn As New conexao()
Conn.CRUD([Ô]INSERT INTO...[Ô])


e assim em diante;
se seu banco não for access e for mysql muda pouca coisa na classe de conexao. se for mesmo access, atente-se para a string de conexão pois a que passei é pros bancos novos [Ô]accdb[Ô] a do [Ô]mdb[Ô] é outra string



Só um complemento ao post do ACCIOLLY.

Para o provider funcionar, terá de ter o Access Database Engine instalado no computador.
Tópico encerrado , respostas não são mais permitidas