Navigare all'interno dei metadati di un database

martedì 11 luglio 2006 - 17.27

adima80 Profilo | Junior Member

Ciao, sto facendo una piccola utility che naviga all'interno di un database server e ne estrae i metadati; il mio problema è che non riesco ad estrarre il campo description delle columns delle mie tabelle. Io uso questo codice:
SqlConnection connessione = new SqlConnection(str_conn); DataTable columns = connessione.GetSchema("Columns");

nel mio data table mi ritrovo tutte le proprietà di ogni column presente in ogni tabella del mio db, il problema è che manca la proprietà Description, una di quelle che mi interessa di più! Come posso fare per raggiungerla?



Grazie anticipatamente, ciao

Cteniza Profilo | Guru

Description fa parte degli attributi estesi, non ho mai provato ma non credo (ma non ne sono sicuro) che si possa avere con .net
Magari il seguente codice ti può far comodo.
private void GeneraDataSet() { SqlConnection cn = new SqlConnection(cnText); SqlCommand cm = new SqlCommand("SELECT *FROM mytable",cn); SqlDataReader dr; try { cn.Open(); dr = cm.ExecuteReader(CommandBehavior.KeyInfo); DataTable schemaTable = dr.GetSchemaTable(); if (schemaTable != null) { ArrayList pkCols = new ArrayList(); DataTable dataTable = new DataTable(); dataTable.TableName = "menudef"; foreach (DataRow schemaRow in schemaTable.Rows) { DataColumn col = new DataColumn(); col.ColumnName = schemaRow["ColumnName"].ToString(); col.DataType = (Type)schemaRow["DataType"]; // set the length of the field for string types only if (schemaRow["DataType"].ToString() == "System.String") col.MaxLength = (Int32)schemaRow["ColumnSize"]; col.Unique = (bool)schemaRow["IsUnique"]; col.AllowDBNull = (bool)schemaRow["AllowDBNull"]; col.AutoIncrement = (bool)schemaRow["IsAutoIncrement"]; // If part of the key, add the column name to the // array of columns comprising the primary key. if ((bool)schemaRow["IsKey"]) pkCols.Add(col); dataTable.Columns.Add(col); } // Add the primary key to the table. if (pkCols.Count > 0) dataTable.PrimaryKey = (DataColumn[])pkCols.ToArray(typeof(DataColumn)); // Add the table to the DataSet. dsDati.Tables.Add(dataTable); object[] aData = new object[dataTable.Columns.Count]; // Read all rows from the DataReader. while (dr.Read()) { // Read the row from the DataReader into an array. dr.GetValues(aData); // Add the row from the array to the DataTable. dataTable.Rows.Add(aData); } dr.Close(); dsDati.AcceptChanges(); } } catch (Exception ex) { MessageBox.Show(ex.Message); throw; } finally { if (cn.State == ConnectionState.Open) cn.Close(); } }

adima80 Profilo | Junior Member

Ciao purtroppo con il codice che mi hai suggerito non riesco ad accedere alla Description.




Grazie

Cteniza Profilo | Guru

Evidentemente non hai letto la prima riga del mio messaggio precedente:
"Description fa parte degli attributi estesi, non ho mai provato ma non credo (ma non ne sono sicuro) che si possa avere con .net."

adima80 Profilo | Junior Member

Ciao ho risolto
la soluzione è effettuare un query della funzione ::fn_Listestendedproperty()

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5