Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Polestar 3 Performance, test drive: comodità e potenza possono convivere
Polestar 3 Performance, test drive: comodità e potenza possono convivere
Abbiamo passato diversi giorni alla guida di Polestar 3, usata in tutti i contesti. Come auto di tutti i giorni è comodissima, ma se si libera tutta la potenza è stupefacente
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
In occasione del proprio Architecture Deep Dive 2025 Qualcomm ha mostrato in dettaglio l'architettura della propria prossima generazione di SoC destinati ai notebook Windows for ARM di prossima generazione. Snapdragon X2 Elite si candida, con sistemi in commercio nella prima metà del 2026, a portare nuove soluzioni nel mondo dei notebook sottili con grande autonomia
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 03-09-2007, 10: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, 10: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, 12: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 12:54.
voyager18 è offline   Rispondi citando il messaggio o parte di esso
Old 04-09-2007, 15: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, 16: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, 17: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, 17: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, 18: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, 20: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, 09: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, 09: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, 09: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, 09: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, 09: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, 10: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, 10: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


Polestar 3 Performance, test drive: comodità e potenza possono convivere Polestar 3 Performance, test drive: comodit&agra...
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026 Qualcomm Snapdragon X2 Elite: l'architettura del...
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
LG UltraFine evo 6K: il primo monitor al...
DJI cambia direzione: investe in Elegoo ...
Black Friday Narwal 2025: risparmi da ca...
Phishing evoluto contro Apple ID: caso f...
Prestazioni in discesa nei giochi? NVIDI...
Addio ai banner dei cookie? L'UE spinge ...
Le offerte Black Friday per gli smartpho...
Il controllo qualità degli iPhone...
Qualcomm Snapdragon X Elite vola con il ...
A2RL Season 2: storia, innovazione e sor...
Core Ultra Series 3: Intel conferma l'ev...
Black Friday Amazon: la GeForce RTX 5070...
EcoFlow, il Black Friday porta grande ri...
Gli sconti più pesanti del Black ...
Smart #5 BRABUS segna il nuovo record di...
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: 20:10.


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