2013-10-17 59 views
0

我有一个简单的例程,需要SELECT语句并使用DataTablec#从sql查询字符串生成一列列表

我使用相同的SELECT语句并将其传递给例程以生成列名称和数据类型的数组。

SELECT声明只要简单

SELECT Firstname,Secondname...等等

...我的程序可以列信息添加到我的数组

但是,如果SELECT声明更复杂一点

eg SELECT Firstname,Secondname AS Surname...等...

...我的例程会翻倒,因为Surname不是列名。

当考虑子查询和聚合列时,可能会出现更复杂的情况。

如果有一个从SELECT声明中获取任何基本列名称,我在寻找更优雅的方法吗?

+0

'例程'从哪里获取列名?你是否使用dataadaptor来填充数据表,在这种情况下列应该没问题? – TJennings

+0

只要你的数据库简单而高效的设计,你可以找到一个优雅的查询。如果您的“名称”表复杂而复杂,则每个查询都会遇到麻烦,从而无法获得结果。 – apomene

+0

因此,您在问如何将SQL Statment解析为模式? – Jodrell

回答

2

你有一个DataTable.Columns属性是每个对象是一个DataColumn,它根据您所做的查询填充。

因此,如果您在SQL语法中使用了as,则应在该集合中找到同样的名称。

+0

使用我的原始示例,**“Surname”**将从DataColumn返回,而不是** Secondname **,这不是我需要的 – user2890085

+0

@ user2890085:不要认为您可以实现此目的,因为这是SQL生成数据返回到DataTable的语法。不太确定是否有其他属性引用column * real * name,从数据的角度来看,实际名称实际上是在“as”子句中声明的名称。 – Tigran

+0

@ user2890085:你总是可以执行另一个询问真正的列名的查询,但是这听起来有点过分。 – Tigran

0

您可以使用ExecuteReader执行查询。然后您可以使用GetName()来获取每个字段的名称。

+0

谢谢你。我应该提到这是一个MsAccess表,但如果/当我们移植到MSSQL时,GetName()方法将会很有用。 – user2890085

+0

它是DbDataReader的成员,所以它实际上是DB独立的。我更新回应以反映这一点,无论如何都更正确 –