Torna indietro   Hardware Upgrade Forum > Software > Programmazione

WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
Un mondo affollato e vivo, personaggi destinati a sparire a fine test e nessuno a inseguire l'oggetto giusto. Beta e stress test di World of Warcraft: Forever hanno fatto emergere un roleplay spontaneo, tra danze a Goldshire e code ordinate ai PNG
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
In tre giorni a Las Vegas Oracle ha presentato agenti che eseguono il lavoro, l'alleanza con OpenAI e un cloud aperto agli acceleratori di tutti. Ma i clienti europei chiedono garanzie prima ancora delle funzionalità
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
Fino a 740 km WLTP con la batteria da 97,2 kWh, sospensioni che leggono la strada con una telecamera e un abitacolo da salotto parigino. La nuova DS N°7 raccoglie l'eredità della DS 7 e la porta, per la prima volta, nel mondo 100% elettrico. Ecco come è fatta, cosa offre e quanto costa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-04-2004, 16:24   #1
mangzeus
Senior Member
 
L'Avatar di mangzeus
 
Iscritto dal: Sep 2003
Messaggi: 1025
[vb.net] Dataset

Sono disperato...voglio chiedere una cosa...

io devo modificare dei dati all'interno di un database access...con il datareader riesco a visualizzare i dati all'interno dei controlli ma ovviamente non posso aggiungere righe o aggiornarle...volevo sapere come fare ad associare il mio database al dataset per poter modificarne i dati, aggiungere righe, fare delle select sui rispettivi campi e visualizzare i dati all'interno dei controlli del form...
mangzeus è offline   Rispondi citando il messaggio o parte di esso
Old 07-04-2004, 16:56   #2
Geen
Member
 
Iscritto dal: Jul 2002
Città: TV
Messaggi: 125
Penso valga più di mille parole..

Esempio per provider dati Sql

dim cn as SqlClient.SqlConnection

If Cn.State = ConnectionState.Closed Then
ConnettiDatabase(User) 'mia funz. x la connessione al db
End If
If Cn.State = ConnectionState.Open Then
Da.SelectCommand = New SqlCommand
With (Da.SelectCommand)
.Connection = Cn
.CommandText = Query
.CommandType = CommandType.Text
.ExecuteNonQuery()
End With
Da.Fill(Ds, NomeTbl)
Da.FillSchema(Ds.Tables(NomeTbl), SchemaType.Mapped)
If CaricaCommand Then
Dim cb As SqlCommandBuilder = New SqlCommandBuilder(Da)
Da.UpdateCommand = cb.GetUpdateCommand
Da.InsertCommand = cb.GetInsertCommand
Da.DeleteCommand = cb.GetDeleteCommand
End If
If UseForEvents Then Dt = Ds.Tables(NomeTbl)
End If
Catch err As SqlClient.SqlException
'gestione errore
Finally
Cn.Close()
End Try
End Function

idem se usi un altro provider dati(tipo Oledb o Odbc come nel tuo caso).Riassumo..

imports System.Data.OleDb

Dim conn As New System.Data.OleDb.OleDbConnection(connection)
Dim adapter As New System.Data.OleDb.OleDbDataAdapter
Dim Dataset As DataSet

adapter.SelectCommand = New OleDbCommand(query, conn)
adapter.Fill(dataSet, "NomeTbl")


Ora hai la tua/le tue datatable(dataset.Tables(NomeTbl).ecc...) in memoria.Non ti resta che fare il binding come hai fatto con il datareader.
Per aggiunta/modifica/salvataggio ci sono i relativi metodi all'interno del datatable o nel dataadapter.


Spero di essere stato chiaro e se hai domande..posta
Geen è offline   Rispondi citando il messaggio o parte di esso
Old 07-04-2004, 17:10   #3
mangzeus
Senior Member
 
L'Avatar di mangzeus
 
Iscritto dal: Sep 2003
Messaggi: 1025
Quote:
Originariamente inviato da Geen
Penso valga più di mille parole..

Esempio per provider dati Sql

dim cn as SqlClient.SqlConnection

If Cn.State = ConnectionState.Closed Then
ConnettiDatabase(User) 'mia funz. x la connessione al db
End If
If Cn.State = ConnectionState.Open Then
Da.SelectCommand = New SqlCommand
With (Da.SelectCommand)
.Connection = Cn
.CommandText = Query
.CommandType = CommandType.Text
.ExecuteNonQuery()
End With
Da.Fill(Ds, NomeTbl)
Da.FillSchema(Ds.Tables(NomeTbl), SchemaType.Mapped)
If CaricaCommand Then
Dim cb As SqlCommandBuilder = New SqlCommandBuilder(Da)
Da.UpdateCommand = cb.GetUpdateCommand
Da.InsertCommand = cb.GetInsertCommand
Da.DeleteCommand = cb.GetDeleteCommand
End If
If UseForEvents Then Dt = Ds.Tables(NomeTbl)
End If
Catch err As SqlClient.SqlException
'gestione errore
Finally
Cn.Close()
End Try
End Function

idem se usi un altro provider dati(tipo Oledb o Odbc come nel tuo caso).Riassumo..

imports System.Data.OleDb

Dim conn As New System.Data.OleDb.OleDbConnection(connection)
Dim adapter As New System.Data.OleDb.OleDbDataAdapter
Dim Dataset As DataSet

adapter.SelectCommand = New OleDbCommand(query, conn)
adapter.Fill(dataSet, "NomeTbl")


Ora hai la tua/le tue datatable(dataset.Tables(NomeTbl).ecc...) in memoria.Non ti resta che fare il binding come hai fatto con il datareader.
Per aggiunta/modifica/salvataggio ci sono i relativi metodi all'interno del datatable o nel dataadapter.


Spero di essere stato chiaro e se hai domande..posta



scusami ma sono inesperto al massimo...voglio chiederti un enorme piacere...ho un database di prova, in access sul quale devo svolgere delle ricerche aggiungere righe eliminarle e modificarle...se te lo mando per via email anche con calma avresti il tempo di farmi un piccolo esempio con questo database??se ti creo io il form e ti invio anvìche quello me lo potresti collegare tu...??mi faresti un enorme piacere.
mangzeus è offline   Rispondi citando il messaggio o parte di esso
Old 08-04-2004, 08:56   #4
mangzeus
Senior Member
 
L'Avatar di mangzeus
 
Iscritto dal: Sep 2003
Messaggi: 1025
dim conn as new System.data.oledb.oledbconnection(connessione
dim dataset as dataset
oledbdataadapter1.selectcomand = new oledbcommand_(comando, connessione)

oledbdataadapter.fill(dataset11)


Sono Arrivato fin qua adesso dovrei inserire una nuova riga all'interno del database access il quale l'ho riferito ad un dataset...come faccio ad inserire un nuovo record???
mangzeus è offline   Rispondi citando il messaggio o parte di esso
Old 08-04-2004, 09:31   #5
Geen
Member
 
Iscritto dal: Jul 2002
Città: TV
Messaggi: 125
Posto

Dim ds As DataSet
Dim da As System.Data.OleDb.OleDbDataAdapter

ds.Tables("NomeTbl").Rows.Add(<row o singoli valori>)
ds.Tables("NomeTbl").Rows(0).Delete()
da.Update(ds.Tables("NomeTbl"))

Attenzione che per eseguire l'update devono essere settati i command di update,delete e add.Questo o lo fai manualmente o devi usare l'oggetto CommandBuilder specifico del provider che stai usando:

Dim CmbBld As New OleDb.OleDbCommandBuilder(da)
da.DeleteCommand = CmbBld.GetDeleteCommand
da.InsertCommand = CmbBld.GetInsertCommand
da.UpdateCommand = CmbBld.GetUpdateCommand


ricordando che questo comodissimo oggetto funziona solo per delle select semplici(niente join ecc..) e che la tabella risultante della query deve avere obbligatoriamente un campo che fa da chiave primaria.
Dai che ti manca quasi solo il bind dopo
Geen è offline   Rispondi citando il messaggio o parte di esso
Old 08-04-2004, 09:37   #6
mangzeus
Senior Member
 
L'Avatar di mangzeus
 
Iscritto dal: Sep 2003
Messaggi: 1025
non ho capito bene a cosa serve il commandbuilder...io nelle proprietà del data adapter vedo che ci sono questi:

insertcommand
deletecommand
update command

con la rispettiva commandtext...
mangzeus è offline   Rispondi citando il messaggio o parte di esso
Old 08-04-2004, 09:47   #7
Geen
Member
 
Iscritto dal: Jul 2002
Città: TV
Messaggi: 125
Si nel DataAdapter ci sono i 3 command contenenti le query per eseguire le operazione di modifica nel db.Verifica se dopo aver fatto il fill della table sono già valorizzate.Se si tanto meglio,non ti serve fare nulla più..ma se esegui solo la Select quelle tre property dovrebbero essere vuote e quindi ti può tornare utile usare il command builder per riempirle automaticamente..
Geen è offline   Rispondi citando il messaggio o parte di esso
Old 08-04-2004, 09:58   #8
mangzeus
Senior Member
 
L'Avatar di mangzeus
 
Iscritto dal: Sep 2003
Messaggi: 1025
scusami adesso ti posto quello che sto facendo sono arrivato quì:


Dim conn As New System.Data.OleDb.OleDbConnection_(OleDbConnection1.ConnectionString)
Dim dataset As DataSet
OleDbDataAdapter1.SelectCommand = New OleDbCommand_(OleDbCommand1.CommandText, conn)
OleDbDataAdapter1.Fill(DataSet11)
OleDbDataAdapter1.FillSchema(DataSet11,_ SchemaType.Mapped, "ArcImpiegati")
Dim cb As OleDbCommandBuilder = New OleDbCommandBuilder_(OleDbDataAdapter1)
dataset.Tables("ArcImpiegati").Rows.Add()

io all'interno del mio database devo inserire 'nome utente','telefono','nome ufficio' come faccio a dirglielo di aggiungerlo...dove inserisco questi valori...mi serve un data row perchè così come mi hai scritto tu non me lo lascia fare.
mangzeus è offline   Rispondi citando il messaggio o parte di esso
Old 08-04-2004, 10:12   #9
mangzeus
Senior Member
 
L'Avatar di mangzeus
 
Iscritto dal: Sep 2003
Messaggi: 1025
ho fatto cosi e ci sono riuscito però nel mio database access non vedo la riga nuova che ho inserito...

Dim conn As New System.Data.OleDb.OleDbConnection(OleDbConnection1.ConnectionString)
Dim dataset As DataSet
Dim row As DataRow
OleDbDataAdapter1.SelectCommand = New OleDbCommand(OleDbCommand1.CommandText, conn)
OleDbDataAdapter1.Fill(DataSet11)
OleDbDataAdapter1.FillSchema(DataSet11, SchemaType.Mapped, "ArcImpiegati")
Dim cb As OleDbCommandBuilder = New OleDbCommandBuilder(OleDbDataAdapter1)
row = DataSet11.ArcImpiegati.NewRow
row.Item("IDimpiegato") = "23"
row.Item("impiegato") = "luigi"
DataSet11.ArcImpiegati.Rows.Add(row)
mangzeus è offline   Rispondi citando il messaggio o parte di esso
Old 08-04-2004, 12:08   #10
Geen
Member
 
Iscritto dal: Jul 2002
Città: TV
Messaggi: 125
Mmm mi sa che c'e' un pò di confusione.
Da quanto posso capire hai usato mezzi controlli data trascinati sulla form e mezzo via codice,questo perche' una cosa cosi " DataSet11.ArcImpiegati" non potrebbe mai funzionarti con gli esempi che ti ho fatto io.


Dim cb As OleDbCommandBuilder = New OleDbCommandBuilder(OleDbDataAdapter1)

questo poi non serve a nulla se non ci aggiungi le istruzioni che ti ho postato sopra.
Segui passo passo il codice che ti ho allegato e leggi i commenti che ti ho lasciato per la spiegazione.

row = DataSet11.ArcImpiegati.NewRow
row.Item("IDimpiegato") = "23"
row.Item("impiegato") = "luigi"
DataSet11.ArcImpiegati.Rows.Add(row)

"ho fatto cosi e ci sono riuscito però nel mio database access non vedo la riga nuova che ho inserito... "

chiaro!Ado.Net lavora in modalità disconnessa..quindi in quel modo hai aggiunto una riga sulla table in memoria non sulla tabella sul db.
Il "trasferimento" di tutte le modifiche sul db avviene quando esegui
il dataadapter.update(<param>).

Cmq ti allego il codice per fare tutto questo,devi solo cambiare nome del db,query e la funzione di add con le tue colonne e i tuoi dati..
Allegati
File Type: zip dbaccess.zip (15.9 KB, 7 visite)
Geen è offline   Rispondi citando il messaggio o parte di esso
Old 08-04-2004, 12:35   #11
mangzeus
Senior Member
 
L'Avatar di mangzeus
 
Iscritto dal: Sep 2003
Messaggi: 1025
dice che è una versione precedente a quella che ho io di vb.net e non me lo apre il file che mi hai postato..
mangzeus è offline   Rispondi citando il messaggio o parte di esso
Old 08-04-2004, 12:42   #12
Geen
Member
 
Iscritto dal: Jul 2002
Città: TV
Messaggi: 125
Io ho la versione 2003,probabilmente hai la precedente.Crea un nuovo progetto vuoto e includi i Form1.vb e Form1.resx
Geen è offline   Rispondi citando il messaggio o parte di esso
Old 08-04-2004, 12:54   #13
mangzeus
Senior Member
 
L'Avatar di mangzeus
 
Iscritto dal: Sep 2003
Messaggi: 1025
grazie mille...sei stato chiarissimo...io comunque ho trovato anche il modo diaggiungere modificare direttamente sul database con nnstruzione sql...solo che in questo caso lavoro sempre connesso giusto??se voglio lavorare disconnesso devo utilizzare il tuo metodo...


devo ancora capire l'utilità del commandbuilder...ho guardato anche nella guida ma non riesco a capire niente...
mangzeus è offline   Rispondi citando il messaggio o parte di esso
Old 08-04-2004, 14:20   #14
Geen
Member
 
Iscritto dal: Jul 2002
Città: TV
Messaggi: 125
Si si può lavorare anche in maniera connessa,un esempio e' il datareader o eseguendo direttamente una query di modifica,ad esempio,"INSERT INTO..".Mi puoi postare il codice sul metodo che hai implementato?

CommandBuilder

Quando esegui la select per riempire la tabella il dataadapter,che e' il tuo ponte tra il dataset e la fonte dati,non conosce a priori i comandi sql per l'inserimento,l'update e la cancellazione rispetto alla tua fonte dati.
Infatti se tu dopo il fill,in runtime,vai a verificare il valore ad esempio del dataadapter.InsertCommand vedrai che e' nothing.
Questo significa che il dataadapter non sa come fare l'insert delle tue righe nel db.
Qui interviene il commandbuilder(con il codice che ho postato) che valorizza i tuoi command di modifica.Se infatti verifichi il valore
di dataadapter.InsertCommand dopo l'esecuzione delle 4 righe righe relative al command builder vedrai che non sarà più a nothing ma varra una cosa simile a

"INSERT INTO Anagrafica( IdArchivio , Codice , Nome , PersonaFisica , Cognome , Titolo , NascitaLoc , NascitaProv , NascitaNaz , NascitaData , PartitaIVA , CodFiscale , IdTipoAnagrafica , Note , NoteView ) VALUES ( ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? )"

che e' il tuo comando di Insert per la tua select.Più chiaro ora?
Geen è offline   Rispondi citando il messaggio o parte di esso
Old 08-04-2004, 15:08   #15
mangzeus
Senior Member
 
L'Avatar di mangzeus
 
Iscritto dal: Sep 2003
Messaggi: 1025
esatto infatti io quel codice lì c'è l'ho già impostato quindi non dovrebbe servirmi....il metodo che ho impementato sono istruzioni sql dirette come hai detto tu, come INSERT TO ECC..

Volevo sapere le ultime 2 cose...io devo fare un inserimento in un campo di un determinato record con un parametro (che è il text di una textbox) volevo sapere dove e come devo inserire il parametro...io sono arrivato quì...


Dim cmInsPrestito As New OleDbCommand("INSERT INTO ArcImpiegati(Data, Impiegato, NumTelefono, Prestito, Utente) VALUES ("", "", "", 'si', "")", CnProva) dove Impiegato = textbox1.text in modo tale che lui mi inserisca "si" nel campo prestito solo dell'impiegato che c'è nella text...
mangzeus è offline   Rispondi citando il messaggio o parte di esso
Old 08-04-2004, 15:18   #16
Geen
Member
 
Iscritto dal: Jul 2002
Città: TV
Messaggi: 125
Dim cmInsPrestito As New OleDbCommand("INSERT INTO ArcImpiegati(Data, Impiegato, NumTelefono, Prestito, Utente) VALUES ("", "", "", '" & textbox1.text & "', "") WHERE Impiegato=' & <nomeimpiegato> & "'"", CnProva)

Cmq se usi query dirette stai sbagliando metodo di lavoro e complicando decisamente la vita.
Dal codice da me postato ti bastava bindare una listbox per l'elenco impiegati e,ad esempio,una checkbox per il campo prestito e avevi già tutto sto lavoro fatto in automatico..
Geen è offline   Rispondi citando il messaggio o parte di esso
Old 08-04-2004, 15:23   #17
mangzeus
Senior Member
 
L'Avatar di mangzeus
 
Iscritto dal: Sep 2003
Messaggi: 1025
Adesso provo anche con il tuo codice...Devo seguire sempre quello che mi hai postato vero??


poi io ho bisogno di fare delle select sul database per andare a vedere cosa valgono specifici campi relativi ad una record...

per esempio io voglio fare una select per vedere se in quel impiegato il campo prestito è vuoto o ha un valore, insomma voglio visualizzare il contenuto che c'è nel campo prestito...posso fare con un datareader??

come si faceva in vb6

recordset!nome campo = textbox.text mi sono spiegato??
mangzeus è offline   Rispondi citando il messaggio o parte di esso
Old 08-04-2004, 15:55   #18
mangzeus
Senior Member
 
L'Avatar di mangzeus
 
Iscritto dal: Sep 2003
Messaggi: 1025
Dim cmInsPrestito As New OleDbCommand("INSERT INTO ArcImpiegati (Data, Impiegato, NumTelefono, Prestito, Utente) VALUES ("","", "", '" & txtTitolo.Text & "', "")WHERE Impiegato =' & txtTitolo.text & """, CnProva)
cmInsPrestito.ExecuteNonQuery()


non mi funziona
mangzeus è offline   Rispondi citando il messaggio o parte di esso
Old 08-04-2004, 16:31   #19
Geen
Member
 
Iscritto dal: Jul 2002
Città: TV
Messaggi: 125
Quote:
Originariamente inviato da mangzeus
Adesso provo anche con il tuo codice...Devo seguire sempre quello che mi hai postato vero??


poi io ho bisogno di fare delle select sul database per andare a vedere cosa valgono specifici campi relativi ad una record...

per esempio io voglio fare una select per vedere se in quel impiegato il campo prestito è vuoto o ha un valore, insomma voglio visualizzare il contenuto che c'è nel campo prestito...posso fare con un datareader??

come si faceva in vb6

recordset!nome campo = textbox.text mi sono spiegato??
in generale

ds.tables("ArcImpiegati").Rows(indice).item(Prestito) = textbox.text

se ti tieni un oggetto CurRow di tipo Datarow che rappresenta la riga corrente nella tua datatable basta

CurRow.item(Prestito)= textbox.text

Se invece e' una riga generica puoi usare il metodo Select sulla datatable

Row=ds.tables("ArcImpiegati").Select(<criterio>)
Row.item(Prestito)= textbox.text

o,se hai la chiave primaria

Row=ds.tables("ArcImpiegati").Rows.Find(<ValoreChiavePrimaria>)
Row.item(Prestito)= textbox.text

ma questi metodi valgono per un approcio disconnesso mentre,a quanto sembra,hai implementato il tutto in altra maniera..

[/quote] non mi funziona[/quote]

dimmi almeno che errore ti da..

Ultima modifica di Geen : 08-04-2004 alle 16:33.
Geen è offline   Rispondi citando il messaggio o parte di esso
Old 09-04-2004, 09:04   #20
mangzeus
Senior Member
 
L'Avatar di mangzeus
 
Iscritto dal: Sep 2003
Messaggi: 1025
non mi da nessun errore in particolare...penso non gli piacciano degli argomenti sul WHERE perchè ho fatto la stessa cosa senza il parametro e funziona...

cosa intendi per (<criterio>) un'istruzione come "select acrImpiegati...ecc
mangzeus è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
Gli USA dipendono dai robot stranieri: T...
Volkswagen non ha più soldi per l...
Telescopio spaziale Hubble: la NASA cerc...
Più sottile e potente: le nuove i...
Il JPL estende la vita operativa della s...
DAZN Full è in offerta: tutta la ...
GTA 6 su PC potrebbe arrivare prima del ...
Da zero al tracciato in secondi: LibreCo...
Il regista Rian Johnson lancia a 12,99 d...
Microsoft stravolge l'app Sicurezza di W...
Mercato smartphone in caduta libera: -20...
Android 17 QPR3 Beta 3 riporta il blocco...
Le 10 offerte TOP in Amazon del weekend:...
Dyson, doppio crollo su Amazon: purifica...
Il 70% delle imprese non vede effetti de...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 22:07.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v