Lea el nombre del esquema, el nombre de la tabla y el nombre de la columna de una base de datos SQL y vuelva al código C #

Tengo una base de datos (en SQL Server 2008 SP3) y necesito todos los nombres de esquema, nombres de tabla y nombres de columna en jerarquía relacionada en el código C #, tengo la clase SQLElement como sigue:

public class SQLElement { public string SchemaName { get; set; } public string TableName { get; set; } public string ColumnName { get; set; } } 

Y tener una lista como:

List SQLElementCollection = new List();

Entonces, ¿cómo puedo leer Nombres de DB y agregarlos a esta Lista (SQLElementCollection)?

por ejemplo, supongamos que creamos una tabla como esta:

 Create Table [General].[City] ( [Id] BIGINT NOT NULL IDENTITY(1, 1), [Title] NVARCHAR(30) NOT NULL DEFAULT (N''), [Province_Id] BIGINT NOT NULL ) 

y necesito la lista como:

 [0]={SchemaName="General", TableName="City", ColumnName="Id"} [1]={SchemaName="General", TableName="City", ColumnName="Title"} [2]={SchemaName="General", TableName="City", ColumnName="Province_Id"} 

¿Alguien tiene alguna idea de esto?

Editar:

En el siguiente paso, ¿cómo podemos obtener el tipo de cada columna o propiedades relacionadas?

Mi sugerencia es incluir el DataType otro miembro en SQLElement si tiene permisos de modificación o si crea otra clase con el nombre de propiedad DataType y luego hereda de SQLElement y luego guarda el nombre del tipo de datos para usarlo más adelante y usar la siguiente consulta para toda la información, gracias

 SELECT t.name AS TableName, SCHEMA_NAME(t.schema_id) AS SchemaName, c.name AS ColumnName, tp.name as DataType FROM sys.tables AS t INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID INNER JOIN sys.types tp ON c.system_type_id = tp.system_type_id ORDER BY TableName; 

Conéctese a su base de datos y ejecute la siguiente statement:

 select * from INFORMATION_SCHEMA.COLUMNS order by TABLE_SCHEMA, TABLE_NAME, ORDINAL_POSITION; 

Comprueba los resultados y luego mira y elige lo que necesites.

Esta consulta le dará todos los nombres de columna y nombre de esquema

 SELECT t.name AS tblName, SCHEMA_NAME(schema_id) AS [schemaName], c.name AS colName FROM sys.tables AS t INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID where SCHEMA_NAME(schema_id) = 'dbo' // you can include this where clause if you want to add additional filter to the result set, like query only tables that belong in particular db schema, or query only tables that starts with particular name (maybe prefix or sufix), etc. ORDER BY tblName; 

Tienes que ejecutar la consulta anterior y tomar los resultados en la lista.

Eche un vistazo a las vistas de información del esquema en su base de datos. Estos tienen todas las cosas que ya quieres en ellos.