Esistono diversi motivi per cui ci potrebbe tornare utile avere a disposizione la dimensione dei campi contenuti in una DataColumn, per esempio, per impostare la dimensione massima di una textbox evitando così che l'utente inserisca più caratteri di quelli disponibili all'interno della colonna del database.
Passiamo quindi al codice, provando ad aprire la vista TITLEVIEW sul database di sempio PUBS di SQLServer (si, funziona su tabelle, viste, query, ecc.):
/* ESEMPIO 1 */
SqlConnection CNN;
SDA = new SqlDataAdapter (SQL,CNN);
DS = new DataSet("testDataSet");
string SQL = "Select * from titleview";
CNN = new SqlConnection("User ID=sa;Password=pwdSa;Initial Catalog=pubs;Data Source=(local)");
CNN.Open();
SDA.Fill(DS);
CNN.Close();
Questo è -più o meno- il metodo che usiamo tutti per ottenere i dati, ed i DataColumn dell'unica DataTable presente (per l'esempio) avranno tutti la proprietà MaxLength = -1.
Ci sono diversi modi per ottenere informazioni sulla rappresentazione dei dati restituiti attraverso un DataSet, quello del codice seguente passa dal caricare, con una azione successiva, anche uno "schema". Ció non renderà disponible solo il valore MaxLength, ma molte altre informazioni quali, ad esempio, indicazioni sui campi principali, sui not-nullable, sugli "autoincrementali" sui constraint, sulle relazioni tra tabelle, ecc. ecc.
Dovremo quindi, chiaramente perchè DOT NET ci ha abituati a questo, scrivere tantissimo codice e attivare una funzione costosissima, ovvero chiedere che venga caricato anche lo "schema" dei dati:
/* ESEMPIO 2 */
SqlDataAdapter SDA;
SqlConnection CNN;
SDA = new SqlDataAdapter (SQL,CNN);
DS = new DataSet("testDataSet");
string SQL = "Select * from titleview";
CNN = new SqlConnection("User ID=sa;Password=pwdSa;Initial Catalog=pubs;Data Source=(local)");
CNN.Open();
SDA.Fill(DS);
SDA.FillSchema (DS, System.Data.SchemaType.Source);
CNN.Close();
Nell'esempio 2 in evidenza la riga aggiuntiva necessaria ;).
Maggiori informazioni? certamente l'help è completo, ma un bellissimo articolo del buon Dino Esposito vi accenderà parecchi neuroni: MSDN TableMapping.