CRIAR DATATABLE E SALVAR DADOS
Olá galera boa tarde
Alguém poderia me indicar um exemplo ou me ajudar a criar via código DataTable, Lanar os dados no grid e salvar no banco? Estou fazendo uma tela de Ordem de Compra onde tenho os dados iniciais e um grid onde lançarei os produtos. Comecei desta forma mas não sei como salvar os dados do grid via código:
Dim dt As New DataTable
[ô]Criar as colunas no datatable
dt.Columns.Add(New DataColumn([Ô]CODIGO[Ô], GetType(String)))
dt.Columns.Add(New DataColumn([Ô]NOME[Ô], GetType(String)))
dt.Columns.Add(New DataColumn([Ô]BITOLA[Ô], GetType(String)))
dt.Columns.Add(New DataColumn([Ô]MARCA[Ô], GetType(String)))
dt.Columns.Add(New DataColumn([Ô]QTDE[Ô], GetType(String)))
dt.Columns.Add(New DataColumn([Ô]VALOR UNITARIO[Ô], GetType(String)))
dt.Columns.Add(New DataColumn([Ô]VALOR TOTAL[Ô], GetType(String)))
[ô]Define o datasoure do grid com o datatable
Me.GridPRODUTOS.DataSource = dt
Agora depois de digitar os dados no grid preciso salvar o DataTable no banco.
Valeu!
Alguém poderia me indicar um exemplo ou me ajudar a criar via código DataTable, Lanar os dados no grid e salvar no banco? Estou fazendo uma tela de Ordem de Compra onde tenho os dados iniciais e um grid onde lançarei os produtos. Comecei desta forma mas não sei como salvar os dados do grid via código:
Dim dt As New DataTable
[ô]Criar as colunas no datatable
dt.Columns.Add(New DataColumn([Ô]CODIGO[Ô], GetType(String)))
dt.Columns.Add(New DataColumn([Ô]NOME[Ô], GetType(String)))
dt.Columns.Add(New DataColumn([Ô]BITOLA[Ô], GetType(String)))
dt.Columns.Add(New DataColumn([Ô]MARCA[Ô], GetType(String)))
dt.Columns.Add(New DataColumn([Ô]QTDE[Ô], GetType(String)))
dt.Columns.Add(New DataColumn([Ô]VALOR UNITARIO[Ô], GetType(String)))
dt.Columns.Add(New DataColumn([Ô]VALOR TOTAL[Ô], GetType(String)))
[ô]Define o datasoure do grid com o datatable
Me.GridPRODUTOS.DataSource = dt
Agora depois de digitar os dados no grid preciso salvar o DataTable no banco.
Valeu!
qual banco de dados voce esta usando?
Estou usando SQL Server Express.
eu faço assim.. mas voce pode adaptar depois pro seu jeito
Imports System.Data.OleDb
Public Sub Gravar()
Dim cn As New OleDbConnection()
cn.ConnectionString = [Ô]PROVIDER=sqloledb;SERVER=.\SQLEXPRESS;DATABASE=seubanco;UID=usuario;PWD=senha[Ô]
cn.Open()
Dim cmd As OleDbCommand = cn.CreateCommand
With Me.GridPRODUTOS
For i = 0 To Me.GridPRODUTOS.RowCount - 1
cmd.CommandText = [Ô]INSERT INTO tabela (coluna1, coluna2, coluna2) [Ô] & _
[Ô]VALUES ([ô][Ô] + .Rows(i).Cells(0).Value + [Ô][ô], [Ô] & _
[Ô][ô][Ô] + .Rows(i).Cells(1).Value + [Ô][ô], [Ô] & _
[Ô][ô][Ô] + .Rows(i).Cells(2).Value + [Ô][ô]) [Ô]
Try
cmd.ExecuteNonQuery()
Catch erro As Exception
MsgBox([Ô]Erro [Ô] & vbCrLf & erro.ToString, MsgBoxStyle.Critical, [Ô]Erro ao inseir dados [Ô])
End Try
Next
cn.Close()
End With
End Sub
[ô]ai e so chamar a rotina da forma que achar melhor, ou pelo click do botao
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Gravar()
End Sub
qualquer coisa, poste novamente.
ate+
Imports System.Data.OleDb
Public Sub Gravar()
Dim cn As New OleDbConnection()
cn.ConnectionString = [Ô]PROVIDER=sqloledb;SERVER=.\SQLEXPRESS;DATABASE=seubanco;UID=usuario;PWD=senha[Ô]
cn.Open()
Dim cmd As OleDbCommand = cn.CreateCommand
With Me.GridPRODUTOS
For i = 0 To Me.GridPRODUTOS.RowCount - 1
cmd.CommandText = [Ô]INSERT INTO tabela (coluna1, coluna2, coluna2) [Ô] & _
[Ô]VALUES ([ô][Ô] + .Rows(i).Cells(0).Value + [Ô][ô], [Ô] & _
[Ô][ô][Ô] + .Rows(i).Cells(1).Value + [Ô][ô], [Ô] & _
[Ô][ô][Ô] + .Rows(i).Cells(2).Value + [Ô][ô]) [Ô]
Try
cmd.ExecuteNonQuery()
Catch erro As Exception
MsgBox([Ô]Erro [Ô] & vbCrLf & erro.ToString, MsgBoxStyle.Critical, [Ô]Erro ao inseir dados [Ô])
End Try
Next
cn.Close()
End With
End Sub
[ô]ai e so chamar a rotina da forma que achar melhor, ou pelo click do botao
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Gravar()
End Sub
qualquer coisa, poste novamente.
ate+
ROBSON220BASS valeu pela dica. Uma parecida já tinha visto e ainda não tinha tentado adaptar. Na verdade estava tentando entender o UPDATE quando tudo é criado via Wizard, onde apenas colocamos o código TBxxxTableAdapter.Update(BDadosDataSet.TBxxx)
blz... valeu entaum...
consegiu resolver?
qualquer coisa, post novamente..ate+
consegiu resolver?
qualquer coisa, post novamente..ate+
Valeu cara! Ainda não consegui resolver. Estou estudando a forma de como irei fazer isso.
Eu utilizo só o DataAdapter para comando do tipo UPDATE, INSERT ou DELETE, como mostro abaixo:
Eu criei esta propriedade onde eu apenas passo a String SQL que eu chamei de QualstrSQL:
Esta propriedade está dentro de uma [txt-color=#0000f0]Class[/txt-color] que eu chamei de [Ô][txt-color=#0000f0]Classes[/txt-color][Ô], então quando eu quiser usá-la eu digito:
Então a única coisa que se deve fazer, para o teu exemplo, é configurar o comendo SQL com as variáveis que você quer atualizar, por exemplo:
Assim, você só precisa enviar a string com os comandos de UPDATE, INSERT ou DELETE para a propriedade ManipulaDados.
Antigamente eu também usava o DatTable para fazer este tipo de ação, mas vi que assim meu programa teve um desempenho melhor.
Espero ter sido bem claro e que tenha ajudado.
Eu criei esta propriedade onde eu apenas passo a String SQL que eu chamei de QualstrSQL:
Public WriteOnly Property ManipulaDados As String
Set(QualstrSQL As String)
Using DataAdapter = New OleDb.OleDbDataAdapter
Try
If QualstrSQL.Contains([txt-color=#e80000][Ô]INSERT INTO[Ô][/txt-color]) Then
DataAdapter.InsertCommand = C.CreateCommand
DataAdapter.InsertCommand.CommandText = QualstrSQL
DataAdapter.InsertCommand.ExecuteNonQuery()
ElseIf QualstrSQL.Contains([txt-color=#e80000][Ô]UPDATE[Ô][/txt-color]) Then
DataAdapter.UpdateCommand = C.CreateCommand
DataAdapter.UpdateCommand.CommandText = QualstrSQL
DataAdapter.UpdateCommand.ExecuteNonQuery()
ElseIf QualstrSQL.Contains([txt-color=#e80000][Ô]DELETE[Ô][/txt-color]) Then
DataAdapter.DeleteCommand = C.CreateCommand
DataAdapter.DeleteCommand.CommandText = QualstrSQL
DataAdapter.DeleteCommand.ExecuteNonQuery()
End If
Catch ex As Exception
Console.WriteLine()
End Try
End Using
End Set
End Property
Esta propriedade está dentro de uma [txt-color=#0000f0]Class[/txt-color] que eu chamei de [Ô][txt-color=#0000f0]Classes[/txt-color][Ô], então quando eu quiser usá-la eu digito:
Dim strSQL As String = [txt-color=#e80000][Ô]UPDATE tblTabela SET Idade = 35 WHERE Codigo = 1[Ô][/txt-color] [txt-color=#007100][ô]Aqui eu configuro o comando SQL[/txt-color]
ObjClasses.ManipulaDados = strSQL [txt-color=#007100][ô]ObjClasses eu declarei em um módulo, deste jeito: Public ObjClasses As New Classes[/txt-color]
Então a única coisa que se deve fazer, para o teu exemplo, é configurar o comendo SQL com as variáveis que você quer atualizar, por exemplo:
Dim strSQL As String = [txt-color=#e80000][Ô]UPDATE tblDados SET ColunaNome = @Nome, ColunaBitola = @Bitola, ColunaMarca = @Marca WHERE Codigo = @Codigo[Ô][/txt-color]
ObjClasses.ManipulaDados = strSQL
Assim, você só precisa enviar a string com os comandos de UPDATE, INSERT ou DELETE para a propriedade ManipulaDados.
Antigamente eu também usava o DatTable para fazer este tipo de ação, mas vi que assim meu programa teve um desempenho melhor.
Espero ter sido bem claro e que tenha ajudado.
Valeu PEDUGO! Seu exemplo para o meu caso acho que não vai servir. Meu problema é que estou com dificuldades de salvar dados de um grid no banco de dados. Então eu criei via código um DataTable e defini o DataSource do grid como este DT. Queria preencher o grid e salvar os dados no banco.
O problema é que eu estou usando componentes DevExpress, e a manipulação dos dados e referência à s celulas do grid não é a mesma do grid nativo do VS2010. Encontrei uma outra forma de fazer isso aqui e estou implementando. Pelo menos no Insert deu certo, agora quero ver como vou resolver isso no Updade!
De qualquer forma seu exemplo é muito bom. Obrigado.
O problema é que eu estou usando componentes DevExpress, e a manipulação dos dados e referência à s celulas do grid não é a mesma do grid nativo do VS2010. Encontrei uma outra forma de fazer isso aqui e estou implementando. Pelo menos no Insert deu certo, agora quero ver como vou resolver isso no Updade!
De qualquer forma seu exemplo é muito bom. Obrigado.
Veja se isso te ajuda:
http://www.macoratti.net/11/04/c_sql_1.htm
http://www.macoratti.net/08/04/aspn_gmc.htm
Me pontue se te ajudei. vlw
http://www.macoratti.net/11/04/c_sql_1.htm
http://www.macoratti.net/08/04/aspn_gmc.htm
Me pontue se te ajudei. vlw
Tópico encerrado , respostas não são mais permitidas