在 C# 中检索列名

Retrieve Column name in C#

我在 SO 上四处寻找如何检索列名,并尝试了一些解决方案,但是当我使用这种方法时,例如,我收到了这些列名,而不是我实际的列名(ID、状态、标题等):

编辑:

我想在 C# 中检索它,即不在我的代码中执行 SQL 查询字符串。

EDIT2

当前输出:

预期输出:

等表中的列名。 string tableName 设置正确。

获取当前数据库中所有列的模式信息

DataTable allColumnsSchemaTable = connection.GetSchema("Columns");

您可以指定目录、架构、Table 名称、列名称以获取指定的列。 您可以对 Column 使用四个限制,因此您应该创建一个包含 4 个成员的数组。 对于数组,0-member代表Catalog; 1-member代表Schema; 2-member 代表 Table 姓名; 3-member 表示 Column Name。

例如获取 table MyTable:

的列
String[] columnRestrictions = new String[4];
columnRestrictions[2] = "MyTable";
DataTable myTableSchemaTable = connection.GetSchema("Columns", columnRestrictions);

要从这些 table 中获取数据:

var columnDetails = from info in table.AsEnumerable()
                         select new {
                            TableCatalog = info["TABLE_CATALOG"],
                            TableSchema = info["TABLE_SCHEMA"],
                            TableName = info["TABLE_NAME"],
                            ColumnName = info["COLUMN_NAME"],
                            DataType = info["DATA_TYPE"]
                         };

获取当前数据库中所有索引列的架构信息

DataTable allIndexColumnsSchemaTable = connection.GetSchema("IndexColumns");

您可以指定目录、模式、Table 名称、约束名称、列名称以获取指定的列。 您可以对 Column 使用五个限制,因此您应该创建一个包含 5 个成员的数组。 对于数组,0-member代表Catalog; 1-member代表Schema; 2-member 代表 Table 姓名; 3-member代表Constraint Name; 4-member 代表 Column Name.

String[] indexColumnsRestrictions = new String[5];
indexColumnsRestrictions[2] = "Course";
indexColumnsRestrictions[4] = "CourseID";
DataTable courseIdIndexSchemaTable = connection.GetSchema("IndexColumns", indexColumnsRestrictions);

要从这些 table 中获取数据:

var columnDetails = from info in indexColumnsTable.AsEnumerable()
                     select new {
                        TableSchema = info["table_schema"],
                        TableName = info["table_name"],
                        ColumnName = info["column_name"],
                        ConstraintSchema = info["constraint_schema"],
                        ConstraintName = info["constraint_name"],
                        KeyType = info["KeyType"]
                     };

我编辑了您的代码,并能够使用以下代码获取表格和列。

   public void testeWhosebug()
    {
        using (SqlConnection connection = new SqlConnection(this.ConnectionString))
        {

            System.Data.SqlClient.SqlConnectionStringBuilder builder = new System.Data.SqlClient.SqlConnectionStringBuilder();
            builder.ConnectionString = this.ConnectionString;
            string server = builder.DataSource;
            string database = builder.InitialCatalog;

            connection.Open();


            DataTable schemaTables = connection.GetSchema("Tables");

            foreach (System.Data.DataRow rowTable in schemaTables.Rows)
            {
                String TableName = rowTable.ItemArray[2].ToString();

                string[] restrictionsColumns = new string[4];
                restrictionsColumns[2] = TableName;
                DataTable schemaColumns = connection.GetSchema("Columns", restrictionsColumns);

                foreach (System.Data.DataRow rowColumn in schemaColumns.Rows)
                {
                    string ColumnName = rowColumn[3].ToString();
                }
            }


        }
    }