[英]Retrieve Column name in C#
我正在尋找關於如何檢索列名的SO,我嘗試了一些解決方案但是當我使用這種方法時,我收到這些列名而不是我的實際列名(ID,Status,Title等):
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
當前輸出:
預期產量:
等等表中的列名。 string tableName
設置正確。
我編輯了您的代碼,並能夠使用下面的代碼獲取表格和列。
public void testeStackOverflow()
{
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();
}
}
}
}
獲取當前數據庫中所有列的架構信息
DataTable allColumnsSchemaTable = connection.GetSchema("Columns");
您可以指定目錄,架構,表名稱,列名稱以獲取指定的列。 您可以對Column使用四個限制,因此您應該創建一個4成員數組。 對於數組,0-member表示Catalog; 1名成員代表Schema; 2名成員代表表名; 3個成員代表列名。
例如獲取表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名成員代表Schema; 2名成員代表表名; 3人代表Constraint Name; 4個成員代表列名。
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"]
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.