Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura
Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura
Il primo Micro RGB di Samsung per il salotto è il 65 pollici da 2.749 euro. Sul banco di misura abbiamo rilevato 2.000 nit di picco, nero assoluto con il local dimming e il 91,4% del BT.2020, il colore più ampio che abbiamo misurato su un LCD
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
Apple ha rinnovato iPhone 18 Pro soprattutto dentro: chip A20 Pro a 2 nm con memoria affiancata al SoC, camera di vapore tre volte più ampia, Dynamic Island più piccola del 25% grazie a Face ID sotto il display e fotocamera principale con diaframma variabile da f/1.48 a f/4. Lo abbiamo misurato al colorimetro e nei benchmark, usato con iOS 27 e messo alla prova in fotografia tra laghi, borghi e interni poco illuminati
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
A Londra, per il trentennale dei Toughbook, Panasonic ha presentato il tablet G3 e il 2-in-1 34. Con Jon Tucker, a capo dell'ingegneria europea, abbiamo parlato di ciò che non si vede: batterie, antenne, porte seriali e accorgimenti nati sul campo
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 03-09-2007, 09:31   #1
voyager18
Member
 
Iscritto dal: Aug 2007
Messaggi: 138
[C#] Visualizzare dati da DB Access in DataGridView

Sto cercando di visualizzare i dati presenti in un DB di Access in un controllo DataGridView in C#. Ho usato i controlli DataSet, BindingSource e BindingNavigator.

Il codice che ho scritto per la visualizzazione è questo:
Codice:
            OleDbConnection Conn = new OleDbConnection();
            OleDbCommand Cmd = new OleDbCommand();
            OleDbDataAdapter Adptr = new OleDbDataAdapter();

            string sConn = "Provider=Microsoft.Jet.OLEDB.4.0; " +
                           "Data source=C:\\Users\\Matteo\\Desktop\\Stramaledetta Cartuccia.mdb";
            string SQL = "SELECT * FROM Vendite";

            Conn.ConnectionString = sConn;
            Conn.Open();
            Cmd.CommandText = SQL;
            Cmd.CommandType = CommandType.Text;
            Cmd.Connection = Conn;
            DataTable Table = new DataTable("Vendite");
            datasetStramaledettacartuccia.Tables.Add(Table);
            Adptr.SelectCommand = Cmd;
            Adptr.Fill(Table);
            Conn.Close();
            bindingSourceVendite.DataMember = "Vendite";
            dataGridView1.DataMember = "Vendite";
Il compilatore non mi restituisce nessun errore però i dati non si visualizzano sulla datagrid. Qualcuno mi sa spiegare perchè?
voyager18 è offline   Rispondi citando il messaggio o parte di esso
Old 03-09-2007, 09:35   #2
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
a 'orecchio' credo che manchi il DataSource per la tua griglia:

Codice:
tuaDataGridView.DataSource = tuoDataTable o tuoDataSet
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 03-09-2007, 11:49   #3
voyager18
Member
 
Iscritto dal: Aug 2007
Messaggi: 138
Quote:
Originariamente inviato da RaouL_BennetH Guarda i messaggi
a 'orecchio' credo che manchi il DataSource per la tua griglia:
Si hai ragione mancava il DataSource della griglia. Un'altra cosa.

Io in un campo del database devo scrivere un numero più grande di un Int32, mi ci vuole un tipo a precisione doppia. Come faccio a cambiare da codice il tipo di dato di un campo del database?

Poi nella stringa di connessione al DB come faccio a indicare la cartella dell'applicazione? Ad esempio |AppDir|\\mioDatabase.mdb

Ultima modifica di voyager18 : 03-09-2007 alle 11:54.
voyager18 è offline   Rispondi citando il messaggio o parte di esso
Old 04-09-2007, 14:45   #4
voyager18
Member
 
Iscritto dal: Aug 2007
Messaggi: 138
Io in un campo del database devo scrivere un numero più grande di un Int32, mi ci vuole un tipo a precisione doppia. Come faccio a cambiare da codice il tipo di dato di un campo del database?

Poi nella stringa di connessione al DB come faccio a indicare la cartella dell'applicazione? Ad esempio |AppDir|\\mioDatabase.mdb

Poi per aggiornare il database Access con i dati che ho immesso nella datagrid ho scirtto questo codice:

Codice:
        private void bindingNavigatorSaveItem_Click(object sender, EventArgs e)
        {
            bindingSource.EndEdit();
            string SQL = "INSERT INTO [Vendite] VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
            string sConn = "Provider=Microsoft.Jet.OLEDB.4.0; " +
                           "Data source=C:\\Users\\Matteo\\Desktop\\Stramaledetta Cartuccia.mdb";

            Conn.ConnectionString = sConn;
            Conn.Open();
            Cmd.CommandText = SQL;
            Cmd.CommandType = CommandType.Text;
            Cmd.Connection = Conn;
            Adatt.InsertCommand = Cmd;
            Adatt.Update(dataSet, "Vendite");
            Conn.Close();
        }
Il compilatore mi restituisce un errore a Adatt.Update(dataSet, "Vendite"); e il messaggio di errore è questo: "Nessun valore specificato per alcuni parametri necessari."

Che parametri mancherebbero???
voyager18 è offline   Rispondi citando il messaggio o parte di esso
Old 04-09-2007, 15:28   #5
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da voyager18 Guarda i messaggi
Io in un campo del database devo scrivere un numero più grande di un Int32, mi ci vuole un tipo a precisione doppia. Come faccio a cambiare da codice il tipo di dato di un campo del database?
Il modo più semplice che mi viene in mente è usare il metodo: Convert.ToDouble() ricordandoti però che il valore che devi passare al metodo è una stringa, quindi al tuo Int32 devi a sua volta passare il metodo ToString(); per esempio:

Codice:
int mioNumero;

double d = Convert.ToDouble(mioNumero.ToString());
Quote:
Poi nella stringa di connessione al DB come faccio a indicare la cartella dell'applicazione? Ad esempio |AppDir|\\mioDatabase.mdb
Codice:
//esempio:

tuaDir = @"mioDatabase.mdb";

//perchè di default se non metti un path diverso, i file che cerchi di aprire
//o ai quali cerchi di accedere sono già di base nella cartella dell'applicazione.
//il carattere "@" ti permette di risparmiare i doppi slash
Quote:
Poi per aggiornare il database Access con i dati che ho immesso nella datagrid ho scirtto questo codice:


Codice:
        private void bindingNavigatorSaveItem_Click(object sender, EventArgs e)
        {
            bindingSource.EndEdit();
            string SQL = "INSERT INTO [Vendite] VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
            string sConn = "Provider=Microsoft.Jet.OLEDB.4.0; " +
                           "Data source=C:\\Users\\Matteo\\Desktop\\Stramaledetta Cartuccia.mdb";

            Conn.ConnectionString = sConn;
            Conn.Open();
            Cmd.CommandText = SQL;
            Cmd.CommandType = CommandType.Text;
            Cmd.Connection = Conn;
            Adatt.InsertCommand = Cmd;
            Adatt.Update(dataSet, "Vendite");
            Conn.Close();
        }
Il compilatore mi restituisce un errore a Adatt.Update(dataSet, "Vendite"); e il messaggio di errore è questo: "Nessun valore specificato per alcuni parametri necessari."

Che parametri mancherebbero???
Innanzitutto se usi SqlServer i parametri devi passarli con "@" e non con "?".
Questi ultimi sono relativi a MySql. L'esempio che ti faccio è con SqlServer

Si chiamano SqlParameter e devono essere definiti prima:

Devi decidere o se creare un array di parametri o di trattarli uno alla volta:

Codice:
//ti consiglio l'array
SqlParameter[] parameters = new SqlParameter[3];

//definiamo prima che tipo di dato è
parameters[0] = new SqlParameter("@nome_campo_tua_tabella", SqlDbType.TipoDiDatoDelDatabase); //per esempio un Intero o una stringa..

//poi definiamo da dove deve prendere il valore
parameters[0].Value = tuaGriglia.Rows[numero_riga].Cells[numero_di_cella].Value;

//e questo per ogni parametro;

//poi questi parametri li devi aggiungere al tuo insert command, per es.:

cmd.Parameters.Add(parameters[0]);

//oppure puoi ciclarli con un for od un foreach:

for(int i = 0; i < numeroParametri; i++)
{
    cmd.Parameters.Add(parameters[i]);
}
Tieni presente però che le mie sono solo indicazioni, non sono molto bravo a programmare.

Ciao.

RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 04-09-2007, 16:33   #6
voyager18
Member
 
Iscritto dal: Aug 2007
Messaggi: 138
Ho seguito il tuo metodo con l'array e ha funzionato. C'è però un modo per salvare nel database Access solo i dati che sono stati modificati dopo l'ultimo salvataggio?
voyager18 è offline   Rispondi citando il messaggio o parte di esso
Old 04-09-2007, 16:36   #7
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da voyager18 Guarda i messaggi
Ho seguito il tuo metodo con l'array e ha funzionato. C'è però un modo per salvare nel database Access solo i dati che sono stati modificati dopo l'ultimo salvataggio?
Beh, in questo caso devi fare una query di aggiornamento, cioè, invece di fare:

Codice:
string SQL = "INSERT INTO blablabla...";

//devi fare:

string SQL = "UPDATE nomeTuaTabella SET campo1 = nuovo_valore, campo2 = nuovo_valore WHERE condizione_per_la_sostituzione... ";
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 04-09-2007, 17:16   #8
voyager18
Member
 
Iscritto dal: Aug 2007
Messaggi: 138
Quella che mi hai detto tu è per aggiornare dei campi già esistenti giusto? Io invece devo fare:

- Apro il database con alcuni record già esistenti
- Inserisco dei nuovi record
- Salvo il database

Come faccio a creare dei parametri per l'oggetto Command che includano però solo i nuovi record che ho inserito?
voyager18 è offline   Rispondi citando il messaggio o parte di esso
Old 04-09-2007, 19:17   #9
voyager18
Member
 
Iscritto dal: Aug 2007
Messaggi: 138
Aiutatemi per favore!!!
voyager18 è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2007, 08:13   #10
voyager18
Member
 
Iscritto dal: Aug 2007
Messaggi: 138
Aiutatemi vi pregooo!!
voyager18 è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2007, 08:14   #11
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da voyager18 Guarda i messaggi
Quella che mi hai detto tu è per aggiornare dei campi già esistenti giusto? Io invece devo fare:

- Apro il database con alcuni record già esistenti
- Inserisco dei nuovi record
- Salvo il database

Come faccio a creare dei parametri per l'oggetto Command che includano però solo i nuovi record che ho inserito?
Scusami, non riesco a capire bene; Allora, tu apri il tuo db e leggi i dati già presenti in una tabella, e li piazzi sulla griglia. Ora, se devi inserire nuovi record nella tabella, allora ti basta la INSERT, se invece devi aggiornare i dati già presenti devi fare l'UPDATE.

Forse mi sfugge qualcosa ?!?
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2007, 08:19   #12
voyager18
Member
 
Iscritto dal: Aug 2007
Messaggi: 138
Hai capito bene. Però la mia domanda è questa. Come faccio ad aggiornare/inserire solo i record che ho modificato?
voyager18 è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2007, 08:31   #13
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da voyager18 Guarda i messaggi
Hai capito bene. Però la mia domanda è questa. Come faccio ad aggiornare/inserire solo i record che ho modificato?
Allora, la parola chiave è proprio "aggiornare". L'unico modo che conosco per aggiornare un record già presente è l'utilizzo di una query di update. Altrimenti dovresti ricorrere all'uso di `trigger` ma in questo caso non saprei aiutarti dato che sono ignorante su questi `cosi`
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2007, 08:37   #14
voyager18
Member
 
Iscritto dal: Aug 2007
Messaggi: 138
e per i parametri dell'oggetto OleDbCommand? cioè come faccio ad inserire nella query di aggiornamento tutti i dati modificati o aggiunti?
voyager18 è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2007, 09:37   #15
voyager18
Member
 
Iscritto dal: Aug 2007
Messaggi: 138
Per favore aiutami che sto diventando pazzo!!
voyager18 è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2007, 09:47   #16
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da voyager18 Guarda i messaggi
e per i parametri dell'oggetto OleDbCommand? cioè come faccio ad inserire nella query di aggiornamento tutti i dati modificati o aggiunti?
Credo che tu debba separare le cose, intendo l'inserimento e l'aggiornamento, ma questo a livello di `motore sql`. In C# tramite i DataSet potresti gestire tutto automaticamente documentandoti sulle proprietà e sui metodi di quest'oggetto. A livello puramente di sql invece, potresti tentare di evitare sql da codice ma creare delle stored procedure. Purtroppo sono entrambi campi nei quali sono ignorante
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura Samsung Micro RGB R95H, il primo LCD a LED rossi...
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre iPhone 18 Pro: la recensione del miglior iPhone ...
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34 Panasonic, 30 anni di Toughbook: la "Bibbia...
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione realme C100x, lo smartphone economico con la bat...
Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Ricarica wireless dinamica fino a 150 kW...
Troppi report invalidi generati dall'IA:...
Furto di identità su scala nazion...
HPE vende i primi sistemi AMD Helios per...
Suno AI nel mirino dell'Antitrust: conte...
Xiaomi avrebbe cancellato il suo prossim...
WINDTRE BUSINESS rinnova l’offerta mobil...
BMW inaugura la fabbrica di batterie da ...
Googlebook apre al modding: bootloader s...
Denuvo non molla, vuole scoprire chi &eg...
Il miglior portatile tuttofare a basso p...
Gli agenti di OpenAI hanno mandato in ti...
Follie Amazon Prime: Zenbook è un...
MicroSD SanDisk in offerta Prime Day: Ul...
Steve Jobs, 15 anni dopo: John Ternus e ...
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: 21:21.


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