Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - insert sql in due tabelle
Forum - C# / VB.NET - insert sql in due tabelle

Avatar
spiderman (Normal User)
Newbie


Messaggi: 20
Iscritto: 18/06/2008

Segnala al moderatore
Postato alle 20:33
Giovedì, 28/04/2011
Salve a tutti,

vi spiego in due parole, progetto in visual basic 2008 e sql server 2005 ho una form_fattura collegata a due tabelle, cioè tabella _descrittiva e tabella_tabellare, dove tabella_descrittiva comprende i dati di un cliente tramite delle texbox, nella tabella_tabellare comprende i dati degli articoli (codarticolo, descrizione, iva e importo) tramite una datagridview,

ora nel buttone_salva faccio un for che mi scorre tutte le colonne della datagridview legendo i dati degli articoli è memorizzandole in variabili che poi uso nell' insert sql, all' uscita del for faccio insert nella tabella_descrittiva e tabella_tabellare (premetto che le due tabelle sono in relazione tramite numerofattura e data).

ma mi dà il seguente errore: "Riferimento a un oggetto non impostato su un'istanza di un oggetto",
se invece metto un insert per la tabella_tabellare dentro il for mi dà per errore che si verifica un conflitto nella tabella_descrittiva a causa della relazione (è mi pare ovvio), spero di essere stato chiaro se è il caso posto il codice.
Vi ringrazio in anticipo a chi mi da una mano.

PM
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Up
1
Down
V
Segnala al moderatore
Postato alle 19:03
Sabato, 30/04/2011
per eseguire una insert devi richiamare il metodo ExecuteNonQuery non ExecuteReader.

command1.ExecuteNonQuery()
command2.ExecuteNonQuery()


se usi la reader ovviamente ritornerà un valore nothing quindi quando vai a fare la close() operi su un oggetto non instanziato

PM
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Up
1
Down
V
Segnala al moderatore
Postato alle 9:53
Domenica, 01/05/2011
ascolta, però dovresti anche cercare di risolverli da solo gli errori.

Il messaggio mi pare chiarissimo: sta mettendo un Integer dentro ad un SqlDataReader. Con questo errore davanti, la prima cosa da fare è chiedersi: ma cosa ritorna la ExecuteNonQuery?

Il passo successivo è andare su google, cercare ExecuteNonQuery e cliccare sul link di MSDN
http://msdn.microsoft.com/it-it/library/system.data.sqlcli ... che è il primo risultato.
Noterai che nella sezione "Valore Resitutito" c'é scritto: Numero di righe interessate

Facendo 2+2 arriverai a capire che questo metodo ritornerà quante righe stai andando a modificare/ inserire nel db.


Sarebbe stato così difficile da fare come percorso? Prova ad impegnarti un pochettino di più altrimenti non imparerai mai....

vero hai ragione! è che sono entrato nel pallone... - spiderman - 01/05/11 11:04
ho risolto il problema era nel for "codicearticolo = TAB5_DOCUMENTI_VENDITA_FATTURE_IMMEDIATA_TABELLAREDataGridView.Rows(i).Cells("cod_articolo").Value.ToString" si deve togliere ToString. - spiderman - 01/05/11 23:35
PM
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Up
0
Down
V
Segnala al moderatore
Postato alle 13:30
Venerdì, 29/04/2011
la sfera di cristallo mi dice....si, di postare il codice, altrimenti non si capisce una mazz...

PM
Avatar
spiderman (Normal User)
Newbie


Messaggi: 20
Iscritto: 18/06/2008

Up
0
Down
V
Segnala al moderatore
Postato alle 18:54
Sabato, 30/04/2011
scusa per il ritardo posto il codice:

Codice sorgente - presumibilmente C# / VB.NET

  1. Try          
  2.                 Conn.Open()
  3.  
  4.                 For i = 0 To TAB5_DOCUMENTI_VENDITA_FATTURE_IMMEDIATA_TABELLAREDataGridView.RowCount - 1
  5.                     codicearticolo = TAB5_DOCUMENTI_VENDITA_FATTURE_IMMEDIATA_TABELLAREDataGridView.Rows(i).Cells("cod_articolo").Value.ToString
  6.                     descriz = TAB5_DOCUMENTI_VENDITA_FATTURE_IMMEDIATA_TABELLAREDataGridView.Rows(i).Cells("descrizione").Value.ToString
  7.                     quanti = TAB5_DOCUMENTI_VENDITA_FATTURE_IMMEDIATA_TABELLAREDataGridView.Rows(i).Cells("quantita").Value.ToString
  8.                     unimisura = TAB5_DOCUMENTI_VENDITA_FATTURE_IMMEDIATA_TABELLAREDataGridView.Rows(i).Cells("unita_misura").Value.ToString
  9.                     prezzonetto = TAB5_DOCUMENTI_VENDITA_FATTURE_IMMEDIATA_TABELLAREDataGridView.Rows(i).Cells("prezzo_netto").Value.ToString
  10.                     scont = TAB5_DOCUMENTI_VENDITA_FATTURE_IMMEDIATA_TABELLAREDataGridView.Rows(i).Cells("sconto").Value.ToString
  11.                     iva1 = TAB5_DOCUMENTI_VENDITA_FATTURE_IMMEDIATA_TABELLAREDataGridView.Rows(i).Cells("iva").Value.ToString
  12.                     import = TAB5_DOCUMENTI_VENDITA_FATTURE_IMMEDIATA_TABELLAREDataGridView.Rows(i).Cells("importo").Value.ToString
  13.                    
  14.                    
  15.                 Next
  16.  
  17.                 Dim Command1 As SqlCommand = New SqlCommand("insert into dbo.TAB5_DOCUMENTI_VENDITA_FATTURE_IMMEDIATA_DESCRITTIVA(NUMERO_FATTURA,ID_CLIENTE,DATA,DENOMINAZIONE,INDIRIZZO_RESIDENZA,CITTA_RESIDENZA,CAP_RESIDENZA, NAZIONE_RESIDENZA,PROVINCIA_RESIDENZA,TELEFONO_RESIDENZA,PARTITA_IVA,COORD_BANCA,BANCA,NOTE,PAGAMENTO,DATA_ATTUALE,TOTALE_DOCUMENTO,TOTALE_NETTO,TOTALE_IVA) values ('" & CStr(NUMERO_FATTURATextBox.Text) & "','" & CStr(ID_CLIENTETextBox.Text) & "','" & CStr(DATAMaskedTextBox.Text) & "','" & Replace(CStr(DENOMINAZIONEComboBox.Text), "'", "''") & "','" & Replace(CStr(INDIRIZZO_RESIDENZATextBox.Text), "'", "''") & "','" & CStr(CITTA_RESIDENZATextBox.Text) & "','" & CStr(CAP_RESIDENZATextBox.Text) & "','" & CStr(NAZIONE_RESIDENZATextBox.Text) & "','" & CStr(PROVINCIA_RESIDENZATextBox.Text) & "','" & CStr(TELEFONO_RESIDENZATextBox.Text) & "','" & CStr(PARTITA_IVATextBox.Text) & "','" & CStr(COORD_BANCATextBox.Text) & "','" & CStr(BANCATextBox.Text) & "','" & CStr(NOTETextBox.Text) & "','" & CStr(PAGAMENTOComboBox.Text) & "','" & data & "','" & CStr(TOTALE_DOCUMENTOTextBox.Text) & "','" & CStr(TOTALE_NETTOTextBox.Text) & "','" & CStr(TOTALE_IVATextBox.Text) & "')", Conn)
  18.                
  19.    Dim Command2 As SqlCommand = New SqlCommand("insert into dbo.TAB5_DGV_DOCUMENTI_VENDITA_FATTURE_IMMEDIATA_TABELLARE (NUMERO_FATTURA,COD_ARTICOLO,ID_CLIENTE,DESCRIZIONE,CATEGORIA,SOTTO_CATEGORIA,PREZZO_LISTINO,UNITA_MISURA,QUANTITA,IMPORTO,SCONTO,IVA) values ('" & CStr(NUMERO_FATTURATextBox.Text) & "','" & codicearticolo & "','" & CStr(ID_CLIENTETextBox.Text) & "','" & descriz & "','" & CStr(CATEGORIATextBox.Text) & "','" & CStr(SOTTO_CATEGORIATextBox.Text) & "','" & prezzonetto & "','" & unimisura & "','" & quanti & "','" & import & "','" & scont & "','" & iva1 & "')", Conn)
  20.  
  21.                  
  22.  
  23.                 Dim reader1 As SqlDataReader = Command1.ExecuteReader
  24.                 reader1.Close()
  25.                 Dim reader2 As SqlDataReader = Command2.ExecuteReader
  26.                 reader2.Close()
  27.  
  28.  
  29.                 MessageBox.Show("Salvataggio fattura con successo!")
  30.  
  31.                                 Conn.Close()
  32. Catch ex As Exception
  33.             MessageBox.Show(ex.Message)
  34.  
  35.         End Try



in questo modo mi da un errore :"Riferimento a un oggetto non impostato su un'istanza di un oggetto"

se invece metto il Dim command2.... dentro il for  è faccio il salvataggio di una sola tabella è poi dopo il for dell'altra tabella tramite Dim command1 mi da un errore nella forekey dicendomi "si è verificato conflitto nella tabella"
spero di essere stato chiaro..

Ultima modifica effettuata da spiderman il 30/04/2011 alle 22:57
OMG OMG OMG Un identificatore con più di 60 caratteri OMG OMG OMG - Il Totem - 01/05/11 10:07
PM
Avatar
spiderman (Normal User)
Newbie


Messaggi: 20
Iscritto: 18/06/2008

Up
0
Down
V
Segnala al moderatore
Postato alle 22:53
Sabato, 30/04/2011
grazie Lorenzo per il tuo contributo,
Codice sorgente - presumibilmente VB.NET

  1. Dim reader1 As SqlDataReader = Command1.ExecuteNonQuery
  2.                 reader1.Close()
  3.                 Dim reader2 As SqlDataReader = Command2.ExecuteNonQuery
  4.                 reader2.Close()


mi da il seguente Errore:
    Impossibile convertire il valore di tipo 'Integer' in 'System.Data.SqlClient.SqlDataReader'

che significa?

Ultima modifica effettuata da spiderman il 01/05/2011 alle 23:31
PM