在 C# 中检索列名
Posted
技术标签:
【中文标题】在 C# 中检索列名【英文标题】:Retrieve Column name in C# 【发布时间】:2015-09-10 23:11:33 【问题描述】:我正在寻找关于如何检索列名的 SO,我尝试了一些解决方案,但是当我使用这种方法时,例如,我收到了这些列名,而不是我的实际列名(ID、状态、标题等.):
TABLE_CATALOG TABLE_SCHEMA TABLE_NAMETABLE_TYPE
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 schema = connection.GetSchema("Tables");
Tables = new List<Table>();
foreach (DataRow row in schema.Rows)
/* Add Table */
Table t = new Table();
string tableName = row[2].ToString();
t.Name = tableName;
/* Add columns */
//DataTable dtCols = connection.GetSchema("Columns", new[] "StarTrackerDB", null, "dbo.Tickets" );
t.Columns = new List<Column>();
foreach (DataColumn column in row.Table.Columns)
Column c = new Column();
c.Name = column.ColumnName;
t.Columns.Add(c);
Tables.Add(t);
编辑:
我想在 C# 中检索它,即不在我的代码中执行 SQL 查询字符串。
EDIT2
当前输出:
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE预期输出:
身份证 状态 标题等等。表中的列名。 string tableName
设置正确。
【问题讨论】:
SQL Server: How do you return the column names from a table? 的可能重复项 发布输出(实际和期望)会有很大帮助 它在描述中有所说明,但在这里再次出现:“我收到这些列名,而不是我的实际列名(ID、状态、标题等):[输出]”我会尝试改写如果很难理解的话。 您正在寻找元数据。也许这会让你开始***.com/questions/22053829/… 【参考方案1】:我编辑了您的代码,并能够使用以下代码获取表格和列。
public void teste***()
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();
【讨论】:
非常感谢亲爱的先生,它就像一个魅力!【参考方案2】:获取当前数据库中所有列的架构信息
DataTable allColumnsSchemaTable = connection.GetSchema("Columns");
您可以指定目录、架构、表名、列名来获取指定的列。 您可以对 Column 使用四个限制,因此您应该创建一个 4 成员数组。 对于数组,0-member 代表 Catalog; 1-member 代表 Schema; 2-member 代表表名; 3-member 代表列名。
例如获取表 MyTable 的列:
String[] columnRestrictions = new String[4];
columnRestrictions[2] = "MyTable";
DataTable myTableSchemaTable = connection.GetSchema("Columns", columnRestrictions);
要从这些表中获取数据:
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"]
;
获取当前数据库中所有IndexColumns的架构信息
DataTable allIndexColumnsSchemaTable = connection.GetSchema("IndexColumns");
您可以指定目录、架构、表名、约束名、列名来获取指定的列。 您可以对 Column 使用五个限制,因此您应该创建一个 5 个成员数组。 对于数组,0-member 代表 Catalog; 1-member 代表 Schema; 2-member 代表表名; 3-member 代表约束名称; 4-member 代表列名。
String[] indexColumnsRestrictions = new String[5];
indexColumnsRestrictions[2] = "Course";
indexColumnsRestrictions[4] = "CourseID";
DataTable courseIdIndexSchemaTable = connection.GetSchema("IndexColumns", indexColumnsRestrictions);
要从这些表中获取数据:
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"]
;
【讨论】:
以上是关于在 C# 中检索列名的主要内容,如果未能解决你的问题,请参考以下文章