Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming
Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming
Questo mouse ultraleggero, con soli 36 grammi di peso, è stato concepito per offrire un'esperienza di gioco di alto livello ai professionisti degli FPS, grazie al polling rate a 8.000 Hz e a un sensore ottico da 33.000 DPI. La recensione esplora ogni dettaglio di questo dispositivo di gioco, dalla sua agilità estrema alle specifiche tecniche che lo pongono un passo avanti
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni
Dal richiamo di Enrico Letta alla necessità di completare il mercato unico entro il 2028 alla visione di Nokia sul ruolo dell’IA e delle reti intelligenti, il Nokia Innovation Day 2025 ha intrecciato geopolitica e tecnologia, mostrando a Vimercate come la ricerca italiana contribuisca alle sfide globali delle telecomunicazioni
Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza
Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza
OPPO Reno14 F 5G si propone come smartphone di fascia media con caratteristiche equilibrate. Il device monta processore Qualcomm Snapdragon 6 Gen 1, display AMOLED da 6,57 pollici a 120Hz, tripla fotocamera posteriore con sensore principale da 50MP e generosa batteria da 6000mAh con ricarica rapida a 45W. Si posiziona come alternativa accessibile nella gamma Reno14, proponendo un design curato e tutto quello che serve per un uso senza troppe preoccupazioni.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 29-03-2007, 12:23   #1
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
[C#/MySql]mi serve un guru!



Son due giorni che sbatto contro un problema

Allora...

In base a determinate scelte effettuate su un form da parte dell'utente, viene creata una tabella in un database mysql. Questo significa che detta tabella non avrà mai lo stesso numero di colonne e/o lo stesso tipo. Nel caso l'utente faccia la stessa identica scelta, la tabella viene droppata e ricreata. Fin qui, nessun problema, ho gestito il codice che mi fa tutto questo...

Poi, l'utente decide di visualizzare i dati contenuti in questa tabella appena creata, ed anche qui nessun problema, mediante il fantastico oggetto DataGridView, ho gestito il codice necessario a visualizzare i dati su una splendida griglia.

I problemi iniziano adesso....ovvero quando l'utente decide di cambiare qualcosa o di fare un inserimento nuovo all'interno di questa tabella.
Non posso gestire delle query di INSERT o UPDATE perchè a priori non mi è assolutamente noto il numero di campi che conterrà la tabella (ricordando che viene creata a run time in base a delle scelte del momento da parte dell'utente).

Girovagando in rete, ho visto che il connettore di MySql per .NET, fornisce potenti mezzi per ovviare a questo inconveniente. Uno di questi è il MySqlDataAdapter, che ha un metodo Update() strettamente legato con l'utilizzo di un DataGridView e di un DataSet, e un altro è il MySqlCommandBuilder che si preoccupa da solo, una volta legato al data adapter, di creare i comandi necessati di insert, delete e update. Funziona così:

Codice:
string connessioneDb = "gestisco_la_connessione";
MySqlConnection cn = new MySqlConnection(connessioneDb);
cn.Open();
string selectFromTable = "SELECT * FROM mia_random_tabella";
MySqlDataAdapter adapter = new MySqlDataAdapter(selectFromTable);
DataSet ds = New DataSet();
adapter.Fill(ds, "mia_random_tabella");
//dico alla griglia di prendersi i dati dagli oggetti mysql
griglia.DataSource = ds;
griglia.DataMember = "mia_random_tabella";

//ora, qui dovrei gestire gli eventuali cambi che faccio sulla griglia per restituirli al db

MySqlCommand builder myCommand = New MySqlCommandBuilder(adapter);
adapter.Update(ds, "mia_random_tabella");
//per semplicità nn ho messo il tutto nei vari try_catch_finally
Questo codice, trovato più volte in rete, anche sul sito msdn, non mi funziona affatto

Ho provato una marea di combinazioni ma senza successo.

Per favore, datemi una mano

Grazie.

RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2007, 12:32   #2
Xalexalex
Senior Member
 
L'Avatar di Xalexalex
 
Iscritto dal: Jan 2006
Città: Pisa
Messaggi: 2498
Sono a digiuno da parecchio di programmazione, però così su due piedi la prima idea che mi verrebbe è salvare in un'altra tabella, righe e colonne di ogni tabella generata dall'utente, e poi comportarsi di conseguenza...
__________________
Xalexalex è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2007, 12:44   #3
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da Alessandro::Xalexalex Guarda i messaggi
Sono a digiuno da parecchio di programmazione, però così su due piedi la prima idea che mi verrebbe è salvare in un'altra tabella, righe e colonne di ogni tabella generata dall'utente, e poi comportarsi di conseguenza...
sarebbe impensabile, se l'utente genera dodici tabelle dovrei gestire dodici query per un numero non prevedibile di colonne
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2007, 13:00   #4
Xalexalex
Senior Member
 
L'Avatar di Xalexalex
 
Iscritto dal: Jan 2006
Città: Pisa
Messaggi: 2498
Quote:
Originariamente inviato da RaouL_BennetH Guarda i messaggi
sarebbe impensabile, se l'utente genera dodici tabelle dovrei gestire dodici query per un numero non prevedibile di colonne
Allora più di così non so aiutarti, mi spiace
Buona fortuna comunque
Alex
__________________
Xalexalex è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2007, 14:04   #5
Riordian
Senior Member
 
L'Avatar di Riordian
 
Iscritto dal: Mar 2006
Città: Genova
Messaggi: 2457
Io di solito non uso questo metodo per aggiornare le tabelle ma mi creo delle query utilizzando l'oggetto command,
comunque mi sembra di ricordare che se fai delle modifiche su un dataset poi devi chiamare il metodo AcceptChanges o qualche cosa del genere, altrimenti il dataset rimane nello stato originario.
__________________
tag XBOX live Aldair74
Nick PSNRiordian
Affari conclusi con: Anf3t4m1n Krocca magomagnani amoredipippa mone_82 raszagale bizzy89 Andrew_db
Riordian è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2007, 14:24   #6
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da Riordian Guarda i messaggi
Io di solito non uso questo metodo per aggiornare le tabelle ma mi creo delle query utilizzando l'oggetto command,
comunque mi sembra di ricordare che se fai delle modifiche su un dataset poi devi chiamare il metodo AcceptChanges o qualche cosa del genere, altrimenti il dataset rimane nello stato originario.
Eh.. magari potessi utilizzare unq query. Sono impossibilitato perchè non conosco a priori ne il numero di colonne ne il nome delle colonne che formano la tabella, dato che quest'ultima, viene generata a run time dall'utente.

Per il metodo del dataset, l'ho già provato, ma non funziona
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2007, 14:29   #7
Riordian
Senior Member
 
L'Avatar di Riordian
 
Iscritto dal: Mar 2006
Città: Genova
Messaggi: 2457
Quote:
Originariamente inviato da RaouL_BennetH Guarda i messaggi
Eh.. magari potessi utilizzare unq query. Sono impossibilitato perchè non conosco a priori ne il numero di colonne ne il nome delle colonne che formano la tabella, dato che quest'ultima, viene generata a run time dall'utente.

Per il metodo del dataset, l'ho già provato, ma non funziona
Beh, genera runtime anche la query, il nome delle colonne delle tabelle dovrebbero essere uguali a quelle del db no?
__________________
tag XBOX live Aldair74
Nick PSNRiordian
Affari conclusi con: Anf3t4m1n Krocca magomagnani amoredipippa mone_82 raszagale bizzy89 Andrew_db
Riordian è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2007, 14:41   #8
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da Riordian Guarda i messaggi
Beh, genera runtime anche la query, il nome delle colonne delle tabelle dovrebbero essere uguali a quelle del db no?
Si, in effetti è l'unica cosa che credo possibile. Ma.... c'è un piccolo dettaglio, come faccio a farlo a runtime?

Nel senso che la tabella che crea l'utente, potrebbe avere tanto 30 campi, tanto 5, tanto 18. Il nome dei campi lo posso vedere solo attraverso il nome delle colonne del datagridview. Ma scorrere ogni singolo contenuto delle colonne e delle righe del datagridview, per inserirli nella tabella del db, va oltre le mie capacità. Ti sarei grato se potessi farmi un esempio.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2007, 15:07   #9
Riordian
Senior Member
 
L'Avatar di Riordian
 
Iscritto dal: Mar 2006
Città: Genova
Messaggi: 2457
Quote:
Originariamente inviato da RaouL_BennetH Guarda i messaggi
Si, in effetti è l'unica cosa che credo possibile. Ma.... c'è un piccolo dettaglio, come faccio a farlo a runtime?

Nel senso che la tabella che crea l'utente, potrebbe avere tanto 30 campi, tanto 5, tanto 18. Il nome dei campi lo posso vedere solo attraverso il nome delle colonne del datagridview. Ma scorrere ogni singolo contenuto delle colonne e delle righe del datagridview, per inserirli nella tabella del db, va oltre le mie capacità. Ti sarei grato se potessi farmi un esempio.
Non ho però capito molto bene il problema, cioè tu crei una tabella vuota nel db e poi inizi a riempirla, ok?
La prima volta va tutto bene ed i problemi nascono le volte successive che inserisci nel db,
ma allora per fare tanti rigiri, non conviene dropparsi e ricreare la tabella ogni volta?
Comunque ho idea che queste strade siano abbastanza lente. Comunque dovrebbe essere una cosa del genere

Codice:
//cominciare una transazione

//cancella tutte le righe dalla tabella

foreach (datarow r in table.Rows)
{
   string insert="insert into tabella (";
   string values=")VALUES(";
   foreach(datacolumn c in table.Columns)
  {
    insert+=c.ColumnName +",";
    values+="'" + r[c.ColumnName] + "',";
  }
  insert=insert.trimEnd(',') + values.trimEnd(',') + ")";
  //esecuzione del comando

}

//chiudi la transazione

tutto messo sotto un bel blocco try catch ovviamente.
Ho però alcuni dubbi:
1) se la mole di dati fosse grande le prestazioni farebbero pena (il dataadapter credo sarebbe più veloce ma non lo ho mai usato)
2) forse le colonne autogenerate potrebbero dare dei problemi

Tieni conto che ci saranno sicuramente degli errori in compilazione.
__________________
tag XBOX live Aldair74
Nick PSNRiordian
Affari conclusi con: Anf3t4m1n Krocca magomagnani amoredipippa mone_82 raszagale bizzy89 Andrew_db

Ultima modifica di Riordian : 29-03-2007 alle 15:10.
Riordian è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2007, 15:16   #10
Riordian
Senior Member
 
L'Avatar di Riordian
 
Iscritto dal: Mar 2006
Città: Genova
Messaggi: 2457
mi è venuto un altro dubbio rispetto al tuo primo post, il dataset, quando modifichi la datagrid viene aggiornato automaticamente? Se non fosse così, il tuo problema potrebbe essere questo.
__________________
tag XBOX live Aldair74
Nick PSNRiordian
Affari conclusi con: Anf3t4m1n Krocca magomagnani amoredipippa mone_82 raszagale bizzy89 Andrew_db
Riordian è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2007, 15:29   #11
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da Riordian Guarda i messaggi
mi è venuto un altro dubbio rispetto al tuo primo post, il dataset, quando modifichi la datagrid viene aggiornato automaticamente? Se non fosse così, il tuo problema potrebbe essere questo.
E' appunto questo il problema principale. Se sapessi come "sincronizzare" il dataset con i dati presenti nel datagridview sarei apposto

Sul tuo esempio, stavo facendo qualcosa di analogo nell'evento Cell_EndEdit del datagridview, ma le prestazioni sono davvero penose

Quote:
Non ho però capito molto bene il problema, cioè tu crei una tabella vuota nel db e poi inizi a riempirla, ok?
La prima volta va tutto bene ed i problemi nascono le volte successive che inserisci nel db,
ma allora per fare tanti rigiri, non conviene dropparsi e ricreare la tabella ogni volta?
Infatti la tabella viene droppata e ricreata ogni volta, se l'utente crea una tabella con le stesse scelte già effettuate in passato.
La tabella inizialmente non è vuota, ha già dei dati che derivano da delle view su altre tabelle. Perciò l'utente può crearsi la sua tabella personalizzata in base a scelte fatte anche da altri utenti.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek

Ultima modifica di RaouL_BennetH : 29-03-2007 alle 15:31.
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2007, 15:45   #12
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
oltretutto, non riesco ad identificare un errore di sintassi che mi viene da:

Codice:
string update = "UPDATE T";

for(int count = 2; count < lastColumn; count++)
{
    update += " SET 'D" + (count - 1 ) + "' = ' " + dataGridView.Rows[e.RowIndex].Cells[count].Value + "' ";
}
update += "WHERE ID_Job = '" + dataGridView.Rows[e.RowIndex].Cells[0].Value + "' ";

......
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2007, 15:51   #13
Riordian
Senior Member
 
L'Avatar di Riordian
 
Iscritto dal: Mar 2006
Città: Genova
Messaggi: 2457
Quote:
Originariamente inviato da RaouL_BennetH Guarda i messaggi
oltretutto, non riesco ad identificare un errore di sintassi che mi viene da:

Codice:
string update = "UPDATE T";

for(int count = 2; count < lastColumn; count++)
{
    update += " SET 'D" + (count - 1 ) + "' = ' " + dataGridView.Rows[e.RowIndex].Cells[count].Value + "' ";
}
update += "WHERE ID_Job = '" + dataGridView.Rows[e.RowIndex].Cells[0].Value + "' ";

comunque hai problemi anche sul sql, il set va furi dal for ;-)

......
sintassi c# o sql? io comunque metterei
update += " SET 'D" + (count -1).ToString() + .......
crei male la stringa sql.
Codice:

string update = "UPDATE T SET ";

for(int count = 2; count < lastColumn; count++)
{
    update += " 'D" + (count - 1 ).ToString() + "' = ' " + dataGridView.Rows[e.RowIndex].Cells[count].Value + "' ,";
}
update = update.TrimEnd(',');
update += " WHERE ID_Job = '" + dataGridView.Rows[e.RowIndex].Cells[0].Value + "' ";



......
sulle prestazioni immaginavo
__________________
tag XBOX live Aldair74
Nick PSNRiordian
Affari conclusi con: Anf3t4m1n Krocca magomagnani amoredipippa mone_82 raszagale bizzy89 Andrew_db

Ultima modifica di Riordian : 29-03-2007 alle 15:56.
Riordian è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2007, 15:55   #14
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da Riordian Guarda i messaggi
sintassi c# o sql? io comunque metterei
update += " SET 'D" + (count -1).ToString() + .......

sulle prestazioni immaginavo

L'errore me lo da sulla sintassi di MySql. Il metodo ToString() l'avevo già messo, e anzi, all'inizio credevo fosse quello, ma anche togliendolo, il risultato non cambia. Mi da sempre:

"You have an error in your SQL Syntax; check the manual that corresponds to your MySqlS server version for the right syntax to use near ''D1 = '6.00' SET 'D2' = '1.00' SET 'D3' = '' " etc......
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2007, 15:59   #15
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
CHe pirla... in questo caso avevo solo dimenticato 'qualche virgola.... '
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2007, 16:17   #16
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Niente

Quel 'for' non mi viene
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2007, 16:31   #17
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Almeno, il problema del for l'ho risolto. Mettevo erroneamente il valore del nome della colonna della tabella fra singoli apici.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 29-03-2007, 16:59   #18
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Al momento riesco a fare quello che mi serve in questo modo:

Codice:
try
{
  using(MySqlConnection cn = ConnClass.Create())
  {
     string update = "UPDATE " + myRandomTable + " SET ";
     for(int count = 2; count < lastColumn; ++count)
     {
          if(myGrid.Rows[e.RowIndex].Cells[count].Value != null)
          {        
             update += " D"+ (count - 1) " = '" + myGrid.Rows[e.RowIndex].Cells[count].Value + "' ";
             update += ",";
          }
     }
     update += "WHERE ID_Job = '" + myGrid.Rows[e.RowIndex].Cells[0].Value + "' ";
     MySqlCommand performUpdate = new MySqlCommand(update, cn);
     performUpdate.ExecuteNonQuery();
     if( cn != null)
     {
         cn.Close();
         cn.Dispose();
     }
   }
}
catch(MySqlException)
{
    Throw
}
Resto in attesa dei vostri preziosi suggerimenti.


RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming Un fulmine sulla scrivania, Corsair Sabre v2 Pro...
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni Nokia Innovation Day 2025: l’Europa ha bisogno d...
Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza Sottile, leggero e dall'autonomia WOW: OPPO Reno...
Destiny Rising: quando un gioco mobile supera il gioco originale Destiny Rising: quando un gioco mobile supera il...
Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo Plaud Note Pro convince per qualità e int...
ASUS sperimenta GPU senza connettori di ...
La Cina conquisterà lo spazio ent...
Samsung ha un nuovo entry level: debutta...
Caos nei cieli europei: attacco informat...
Volkswagen ferma la produzione di ID.Buz...
Super sconti del weekend Amazon: 5 novit...
Dreame non si ferma più: tra le n...
Samsung Galaxy Buds3 FE a meno di 95€ su...
Praticamente regalate: 135€ per le Squie...
Si rinnovano i coupon nascosti di settem...
Amazon sconta i componenti: occasioni d'...
Vibe coding: esplode la domanda di esper...
Ring Intercom su Amazon: citofono smart ...
Addio regie complicate: un'AI gestir&agr...
Xbox, nuovo aumento dei prezzi negli Sta...
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: 14:56.


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