Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Registrare i dati di un datagrid
giovedì 24 luglio 2014 - 16.42
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
VB.NET
zolamia
Profilo
| Newbie
36
messaggi | Data Invio:
gio 24 lug 2014 - 16:42
Ciao a tutti, ho bisogno di un vostro aiuto. Sto registrando i dati di una bolla in 2 tabelle differenti , una per i dati della bolla e l'altra il corpo con i riferimenti degli articoli del documento che vengono inseriti man mano in un datagridview.
il mio problema è registrare i dati delle riche del datagrid
Vi posto il codice
Private Sub RegistraDocumento()
Dim data As New Date
data = Date.Today
Dim AnnoRiferimento As String
AnnoRiferimento = data.Year.ToString
Dim x As Integer
Dim codArt As Integer
'inizio transazione
Using connection As New SqlConnection(My.Settings.WeaGestDBConnectionString & "xxxxxxxxx")
connection.Open()
Dim command As New SqlCommand, commandart As New SqlCommand
With command
.Connection = connection
.CommandText = "INSERT INTO MovimentiMagazzino(R_NumeroDocumento,R_AnnoDocumento,R_DataDocumento,R_DataOperazione,ID_Fornitore,R_NumeroDettagli,R_ImponibileIva,R_ImportoIva,R_TotaleDocumento) VALUES (@R_NumeroDocumento, @R_AnnoDocumento, @R_DataDocumento, @R_DataOperazione, @ID_Fornitore, @R_NumeroDettagli,@R_ImponibileIva, @R_ImportoIva,@R_TotaleDocumento)"
.Parameters.AddWithValue("@R_NumeroDocumento", TextBoxNumBolla.Text)
.Parameters.AddWithValue("@R_AnnoDocumento", AnnoRiferimento)
.Parameters.AddWithValue("@R_DataDocumento", FormatDateTime(DateTimePickerDataBolla.Value, DateFormat.ShortDate))
.Parameters.AddWithValue("@R_DataOperazione", FormatDateTime(TextBoxDataReg.Text, DateFormat.ShortDate))
.Parameters.AddWithValue("@ID_Fornitore", TextBoxIdFornitore.Text)
.Parameters.AddWithValue("@R_NumeroDettagli", TextBoxNumPezzi.Text)
.Parameters.AddWithValue("@R_ImponibileIva", TextBoxImponibileIva)
.Parameters.AddWithValue("@R_ImportoIva", TextBoxImportoIva.Text)
.Parameters.AddWithValue("@R_TotaleDocumento", TextBoxTotale.Text)
End With
With commandart
For x = 0 To DataGridViewDettagli.RowCount - 1
.Connection = connection
.CommandText = "INSERT INTO MovimentiMagazzino_Dettagli(R_CodiceArticolo) VALUES (@R_CodiceArticolo)
Next
End With
command.ExecuteNonQuery()
connection.Close()
End Using
MessageBox.Show("Ok")
End Sub
Ragazzi , non riesco ad andare avanti, non riesco a registrare nella seconda tabella i dati del datagridview.
Mi potete indirizzare ?
Grazie mille
:::...Truly madly deeply...:::
AntCiar
Profilo
| Expert
936
messaggi | Data Invio:
ven 25 lug 2014 - 00:08
Ciao.
hai fatto un po di confusione con le variabili e il "quando" usarle.
In poche parole hai usato due Command (Command e CommandArt).
Il primo lo valorizzi con la connessione, l'istruzione parametrica e i comandi (e questo è corretto) ma poi invochi ExecuteNonQuery nel momento sbagliato.
Il secondo invece ne valorizzi solo la connessione e l'istruzione parametrica (ma senza valorizzare i parametri e questo è sbagliato) e poi invochi ExecuteNonQuery nel momento sbagliato.
Alla fine puoi utilizzare anche un solo command ma per non complicarti la vita aggiusto un po il tuo codice:
(ometto la parte iniziale perchè sembra andare bene)
With command
.Connection = connection
.CommandText = "INSERT INTO MovimentiMagazzino(R_NumeroDocumento,R_AnnoDocumento,R_DataDocumento,R_DataOperazione,ID_Fornitore,R_NumeroDettagli,R_ImponibileIva,R_ImportoIva,R_TotaleDocumento) VALUES (@R_NumeroDocumento, @R_AnnoDocumento, @R_DataDocumento, @R_DataOperazione, @ID_Fornitore, @R_NumeroDettagli,@R_ImponibileIva, @R_ImportoIva,@R_TotaleDocumento)"
''qui devi togliere gli eventuali parametri già presenti
.Parameters.Clear()
.Parameters.AddWithValue("@R_NumeroDocumento", TextBoxNumBolla.Text)
.Parameters.AddWithValue("@R_AnnoDocumento", AnnoRiferimento)
.Parameters.AddWithValue("@R_DataDocumento", FormatDateTime(DateTimePickerDataBolla.Value, DateFormat.ShortDate))
.Parameters.AddWithValue("@R_DataOperazione", FormatDateTime(TextBoxDataReg.Text, DateFormat.ShortDate))
.Parameters.AddWithValue("@ID_Fornitore", TextBoxIdFornitore.Text)
.Parameters.AddWithValue("@R_NumeroDettagli", TextBoxNumPezzi.Text)
.Parameters.AddWithValue("@R_ImponibileIva", TextBoxImponibileIva)
.Parameters.AddWithValue("@R_ImportoIva", TextBoxImportoIva.Text)
.Parameters.AddWithValue("@R_TotaleDocumento", TextBoxTotale.Text)
''Qui devi invocare la conferma del comando
.ExecuteNonQuery()
End With
poi passiamo alla parte del salvataggio delle righe:
With commandart
For x = 0 To DataGridViewDettagli.RowCount - 1
.Connection = connection
.CommandText = "INSERT INTO MovimentiMagazzino_Dettagli(R_CodiceArticolo) VALUES (@R_CodiceArticolo)
''qui devi togliere i vecchi parametri prima di inserire in nuovi
.Parameters.Clear()
''qui devi valorizzare il parametro (come hai fatto nel precedente command)
.Parameters.AddWithValue("@R_CodiceArticolo", ..........)
''poi qui devi invocare la conferma del command
.ExecuteNonQuery()
Next
End With
''poi chiudi la connessione
connection.Close()
Dal codice che hai scritto devo farti una domanda: come fai a legare la "testata" del documento con il "corpo" (righe del datagridview) visto che nel commandArt scrivi solo l'articolo senza nessun riferimento a qualche valore che possa ricondurre alla testata?
Cristian Barca
zolamia
Profilo
| Newbie
36
messaggi | Data Invio:
lun 28 lug 2014 - 11:47
Ciao e grazie per la tua risposta.
ho fatto come dicevi tu la alla prima connessione, al .ExecuteNonQuery mi da l'errore "Nessun mapping esistente dal tipo di oggetto System.Windows.Forms.TextBox a un tipo nativo di provider gestito noto."
Cosa Vuol dire?
Poi per quanto riguarda legare le due tabelle lo faccio tramite un Id_Movimento che registrerò .
Poi volevo chiederti: Perché usi il .clear? a me non serve pulire i dati..
Grazie tante
:::...Truly madly deeply...:::
AntCiar
Profilo
| Expert
936
messaggi | Data Invio:
lun 28 lug 2014 - 14:50
>Ciao e grazie per la tua risposta.
>ho fatto come dicevi tu la alla prima connessione, al .ExecuteNonQuery
>mi da l'errore "Nessun mapping esistente dal tipo di oggetto
>System.Windows.Forms.TextBox a un tipo nativo di provider gestito
>noto."
>Cosa Vuol dire?
Vuol dire che una textBox (intesa come oggetto nel suo insieme) non può essere passata come parametro.
si riferisce a questa riga:
.Parameters.AddWithValue("@R_ImponibileIva", TextBoxImponibileIva)
perchè dovrebbe essere
.Parameters.AddWithValue("@R_ImponibileIva", TextBoxImponibileIva.Text)
Alla fine non ti dava errore di compilazione perchè l'Add dei parametri prevedono come valori dei tipi Object e 'TextBoxImponibileIva' e 'TextBoxImponibileIva.Text' sono a tutti gli effetti degli object validi.
>Poi per quanto riguarda legare le due tabelle lo faccio tramite
>un Id_Movimento che registrerò .
ok.
>Poi volevo chiederti: Perché usi il .clear? a me non serve pulire
>i dati..
Non serve a pulire i dati nel database ma all'interno del commad.
Il tuo commad è dichiarato al di fuori del ciclo for.
Subito dopo la creazione del commad non vi sono parametri.
Al primo giro aggiungi N parametri con i propri valori.
Se non fai il .Clear() al secondo giro ti ritroveresti 2*N parametri con i rispettivi valori e la query ti va in errore perchè hai un numero di parametri superiori a quello richiesto (anzi non ho provato ma mi sa che nemmeno te li fa aggiungere perchè li vedrebbe già presenti).
Detto questo nel tuo ciclo al secondo giro o superiore avresti due possibilità:
1 - cercare il parametro precedentemente inserito (tramite il nome): se esiste gli cambi il valore; se non esiste lo crei (operazione lenta e sprecata)
2 - cancellare i vecchi parametri e aggiungerli sempre "a nuovo" con i rispettivi valori (cosa molto più veloce e sicura)
Cristian Barca
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !