Dunque, ho un piccolo problema relativo al casting.
Per un'elaborazione dati ad un certo punto faccio una select che mi restituisce il count(*) di quante righe ha una determinata tabella.
Il database è access e lo uso come file diretto e non come ODBC.
Il procedimento è che mi creo per prima cosa tre oggetti:
System.Data.OleDb.OleDbCommand cmd;
System.Data.OleDb.OleDbConnection conn;
System.Data.OleDb.OleDbDataReader read;
Nel costruttore della mia classe imposto la connectionstring di conn.
Nel metodo che deve fare questa operazione per prima cosa setto
cmd.CommandText=query;
dove query è la query select che mi serve, poi eseguo l'struzione
read = cmd.ExecuteReader();
e subito
read.Read();
per spostarmi sulla prima ed unica righa risultato.
Dunque, vorrei piazzare il risultato contenuto nella prima ed unica colonna della riga in una variabile i di tipo Int64.
Penserete che forse con Int64 mi sono allargato, ma non avete idea di quante righe sono![]()
La prima cosa che ho tentato è stata questa:
i = read.GetInt64(0);
Neanche a dirlo mi da errore di Cast errato...
Allora provo:
i = (Int64)read.GetValue(0)
Altra bestemmie sul Cast.
Altra prova.
i = (Int64)read.GetString(0)
Niente...
Il discorso è questo, per estrapolare il valore del campo ho due scelte:
O so esattamente di che tipo è e quindi so quali cast posso fare (se mi servono) e se li posso fare.
O rimetto tutto a lui usando GetValue, in questo modo lo prendo nel formato nativo; però, così facendo lo devo per forza convertire in stringa e piazzarlo in una stringa, come segue:
String appoggio = read.GetValue(0).toString();
Solo che dopo, se era un numero, non ho idea di come riconvertirlo in numero da una stringa, perchè fra i metodi String non trovo nulla in proposito e i cast non funzionano...
Ho scoperto con l'istruzione
String tipo=read.GetValue(0).GetType().toString();
che il valore che esce è in realtà un Int32.
Però, se era un int16 invece? O un int64?
Qualcuno di voi sa dirmi quindi come fare un'estrazione da db in base al contenuto del campo?
Grazie