如何在运行时在C#中获取表的列名?
比方说,我在SQLServer中有一个名为MyTable的表
ID FirstName LastName
1 Harry Dan
2 Maria Vicente
3 Joe Martin
现在,如果我必须在表格中插入任何数据,我将简单地使用这样的插入查询
INSERT INTO MyTable (ID, FirstName, LastName) VALUES (4, Smith, Dan);
但是如果我事先不知道列名,我只知道表名。 那么有没有办法在运行时获得表的列名?
你可以使用sql-
SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('TABLE_NAME')
或者你可以查询SELECT TOP 0 * FROM TableName
。 然后,你可以得到列:
using(var reader = command.ExecuteReader())
{
reader.Read();
var table = reader.GetSchemaTable();
foreach (DataColumn column in table.Columns)
{
Console.WriteLine(column.ColumnName);
}
}
另一个使用纯C#/ .NET代码的选项:首先是一个辅助方法,它在这里返回一个简单的列名列表。 使用DataTable来保存表格模式信息,意味着也可以为每列fx重新获取其他信息。 如果它是一个AutoIncreament列等
private IEnumerable<string> GetColumnNames(string conStr, string tableName)
{
var result = new List<string>();
using (var sqlCon = new SqlConnection(conStr))
{
sqlCon.Open();
var sqlCmd = sqlCon.CreateCommand();
sqlCmd.CommandText = "select * from " + tableName + " where 1=0"; // No data wanted, only schema
sqlCmd.CommandType = CommandType.Text;
var sqlDR = sqlCmd.ExecuteReader();
var dataTable = sqlDR.GetSchemaTable();
foreach (DataRow row in dataTable.Rows) result.Add(row.Field<string>("ColumnName"));
}
return result;
}
该方法可以被称为:
var sortedNames = GetColumnNames("Data Source=localhost;Initial Catalog=OF2E;Integrated Security=SSPI", "Articles").OrderBy(x => x);
foreach (var columnName in sortedNames) Console.WriteLine(columnName);
链接地址: http://www.djcxy.com/p/93839.html
上一篇: How to get column names of table at runtime in C#?
下一篇: SQL exclude a column using SELECT * [except columnA] FROM tableA?