CRIAR DATATABLE E SALVAR DADOS

VINICIUSVB 31/07/2012 13:47:46
#406942
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!
ROBSON220BASS 31/07/2012 14:30:26
#406943
qual banco de dados voce esta usando?
VINICIUSVB 31/07/2012 17:04:59
#406959
Estou usando SQL Server Express.
ROBSON220BASS 31/07/2012 18:06:07
#406963
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+

VINICIUSVB 01/08/2012 11:57:06
#407005
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)
ROBSON220BASS 01/08/2012 15:47:39
#407034
blz... valeu entaum...


consegiu resolver?
qualquer coisa, post novamente..ate+
VINICIUSVB 02/08/2012 13:46:52
#407091
Valeu cara! Ainda não consegui resolver. Estou estudando a forma de como irei fazer isso.
PEGUDO 03/08/2012 12:45:49
#407139
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:
        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.
VINICIUSVB 03/08/2012 13:07:42
#407141
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.
JABA 08/08/2012 15:32:22
#407516
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
Tópico encerrado , respostas não são mais permitidas