46 messaggi dal 21 marzo 2001
Data una OleDbConnection CONN e il nome di una tabella TAB_NAME, come posso trovare il tipo di ogni campo di TAB_NAME?

Sono già riuscito a trovare i nomi dei campi con il CONN.GetDbSchemaTable(...) ma non riesco ad estrarre il tipo...
Potresti utlizzare un datareader così puoi recuperare nomi e tipo.

Anche il datareader ha un metodo GetSchemaTable ma ho difficoltà ad usarlo...

Ciao

Ciao
Marco Caruso
4 messaggi dal 14 ottobre 2003
Prova ad usare un GetFieldType o GetType su ogni object ritornato da GetSchemaTable.
GetFieldType se non ricordo male si riferisce al DataReader

Ciao
46 messaggi dal 21 marzo 2001
Grazie innanzitutto ad entrambi.
Il problema col Datareader credo sia quando il DB non è stato ancora popolato - non avendo rows, non posso estrarre da queste nome,valore e tipo. O sbaglio?

Tipicamente nel mio caso si dovrebbe appunto partire da DB vuoto.
46 messaggi dal 21 marzo 2001
No, in effetti dal DataReader posso estrarre tutte le informazioni che voglio anche se non ci sono records.
In particolare, facendo il GetSchemaTable() si può:
- con ColumnName , estrarre il nome del campo
- con ProviderType, il tipo

Spero sia utile anche agli altri.
Ciao
Esattamente... ma io avuto problemi nell'usarlo ovvero quando provavo a richiamare la ColumName mi restituiva sempre il nome della proprietà e non il nome del Campo.

Ciao
Marco Caruso
1.818 messaggi dal 21 giugno 2001
Contributi
Solo nel caso il db sia su SQL Server 2000, ti riporto questa risposta di Lorenzo Benaglia apparsa sul NG microsoft.public.it.sql.
Se ti interessa tutto il thread lo trovi al 14/10/2003 con oggetto "Tipi di Dati"


SQL Server 2000 offre la possibilità di leggere i metadati senza la
necessità di accedere alle tabelle di sistema ricorrendo alle Information
Schema Views.
Le Information Schema Views aderiscono allo standard ANSI SQL-92 e
permettono alle applicazioni di funzionare correttamente anche nel caso in
cui le tabelle di sistema subiscano notevoli modifiche (per esempio dovute
all'installazione di un service pack).

Ti allego un piccolo esempio che recupera le caratteristiche della tabella
dbo.Orders del database Northwind:

USE Northwind
GO

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'dbo'
AND TABLE_NAME = 'Orders'

Per maggiori informazioni sulle Information Schema Views, consulta i Books
Online incollando il seguente URL nella dialog box che appare facendo click
sul menu Go, URL...: tsqlref.chm::/ts_ia-iz_4pbn.htm

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://mvp.support.microsoft.com
http://italy.mvps.org

hyppos
<code> in giro torte sol ciclos et rotor igni</code>
46 messaggi dal 21 marzo 2001
Per usare correttamente il DataReader:

string select="SELECT * FROM "+DbTable;
OleDbCommand comm=new OleDbCommand(select,oleDBconn);
OleDbDataReader dr=comm.ExecuteReader();
DataTable t=dr.GetSchemaTable();
res=new string[t.Rows.Count];
for(int i=0;i<t.Rows.Count;i++)
{
res[i]=t.Rows[i]["ColumnName"].ToString();
}

dove: DbTable è la stringa nome della tabella, e oleDBconn è l'oggetto di connessione al DB.

Modificato da korzaun il 15 ottobre 2003 12.03 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.