2009-01-19 14 views

Respuesta

4

Para obtener el FK y esquemas que deben ser capaces de utilizar:

DA.FillSchema() 

DS.Table("Name").PrimaryKey 

o llamando sp_fkey usando el método se demuestra más adelante

Fragmento de código from Y 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

Puede usar el método SqlDataAdapter.FillSchema().

Alternativamente, puede utilizar el método SqlDataAdapter.Fill() después de establecer la propiedad MissingSchemaAction del SqlDataAdapter en AddWithKey. Pero si solo quiere el esquema, debe asegurarse de que su consulta no devuelva filas. Esto se puede lograr agregando una declaración como WHERE 1 = 2 a su consulta.

8

Esto realmente depende de cómo se comunica con su base de datos. Si está utilizando LinqToSQL u otro ORM similar, esto sería bastante fácil, pero si desea obtener estos valores a través de una consulta, le sugiero que utilice las vistas INFORMATION_SCHEMA, ya que son rápidas y fáciles de consultar.

p. Ej.

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

Esto es grande. Reemplaza la consulta de 2 páginas que tuve. – rediVider

1

Si está utilizando el servidor MS SQL entonces definitivamente debe echar un vistazo al espacio de nombres SMO (objetos de administración del servidor).

hay objetos que se pueden utilizar en .net responsable de todo tipo de cosas en una base de datos (incluyendo pero no limitado a tablas, columnas, restricciones, etc.)

Cuestiones relacionadas