2009-01-19 11 views

risposta

4

Per ottenere risultati FK e lo schema si dovrebbe essere in grado di utilizzare:

DA.FillSchema() 

DS.Table("Name").PrimaryKey 

o chiamando sp_fkey utilizzando il metodo illustrato di seguito

frammento di codice from E Another Link

private void LoanSchema() 
    { 

     private List<String> tablesList = new List<String>(); 
     private Dictionary<String, String> columnsDictionary = new Dictionary<String, String>(); 

      string connectionString = "Integrated Security=SSPI;" + 
      "Persist Security Info = False;Initial Catalog=Northwind;" + 
      "Data Source = localhost"; 
      SqlConnection connection = new SqlConnection(); 
      connection.ConnectionString = connectionString; 
      connection.Open(); 

      SqlCommand command = new SqlCommand(); 
      command.Connection = connection; 
      command.CommandText = "exec sp_tables"; 
      command.CommandType = CommandType.Text; 

      SqlDataReader reader = command.ExecuteReader(); 

      if (reader.HasRows) 
      { 
       while (reader.Read()) 
        tablesList.Add(reader["TABLE_NAME"].ToString()); 
      } 
      reader.Close(); 

      command.CommandText = "exec sp_columns @table_name = '" + 
      tablesList[0] + "'"; 
      command.CommandType = CommandType.Text; 
      reader = command.ExecuteReader(); 

      if (reader.HasRows) 
      { 
       while (reader.Read()) 
          columnsDictionary.Add(reader["COLUMN_NAME"].ToString(), reader["TYPE_NAME"].ToString()); 
      } 
} 
1

È possibile utilizzare il metodo SqlDataAdapter.FillSchema().

In alternativa è possibile utilizzare il metodo SqlDataAdapter.Fill() dopo aver impostato la proprietà MissingSchemaAction di SqlDataAdapter su AddWithKey. Ma se vuoi solo lo schema devi assicurarti che la tua query non restituisca righe. Questo può essere ottenuto aggiungendo una dichiarazione come WHERE 1 = 2 alla tua query.

8

Questo in realtà dipende come si comunica con il database. Se si utilizza LinqToSQL o un altro ORM simile, sarebbe piuttosto semplice, ma se si desidera ottenere questi valori tramite una query, suggerirei di utilizzare le viste INFORMATION_SCHEMA in quanto sono veloci e di facile consultazione.

ad es.

select * from information_schema.columns where table_name = 'mytable' 
+0

Questo è grande. Sostituisce la query di 2 pagine che ho avuto. – rediVider

1

Se si utilizza MS SQL Server, è necessario dare un'occhiata allo spazio dei nomi SMO (oggetti di gestione del server).

Non ci sono oggetti che è possibile utilizzare in responsabile .net per tutti i tipi di cose in una banca dati (incluso ma non limitato a tabelle, colonne, vincoli, ecc)

Problemi correlati