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