2013-10-17 58 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獨立的。我更新迴應以反映這一點,無論如何都更正確 –