在 C# 中检索列名
Retrieve Column name in C#
我在 SO 上四处寻找如何检索列名,并尝试了一些解决方案,但是当我使用这种方法时,例如,我收到了这些列名,而不是我实际的列名(ID、状态、标题等):
- TABLE_CATALOG
- TABLE_SCHEMA
- TABLE_NAME
TABLE_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
预期输出:
- ID
- 状态
- 标题
等表中的列名。 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();
}
}
}
}
我在 SO 上四处寻找如何检索列名,并尝试了一些解决方案,但是当我使用这种方法时,例如,我收到了这些列名,而不是我实际的列名(ID、状态、标题等):
- TABLE_CATALOG
- TABLE_SCHEMA
- TABLE_NAME
TABLE_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
预期输出:
- ID
- 状态
- 标题
等表中的列名。 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();
}
}
}
}