2012-07-26 44 views
1

如何從Silverlight應用程序的域服務中的數據庫中獲取表的列名,然後將這些列用於客戶端的列表框中進行選擇。 我在這裏看了一下LINQ Query to get Column Headers in Silverlight但沒有什麼困惑。從Silverlight中的數據庫獲取表的列名

據我所知,在Silverlight中,你需要編寫域服務來訪問服務器端的數據,並且silverlight在客戶端創建上下文,並在那裏使用上下文。因此,我認爲我需要一個datacontext,並且我創建了一個到達同一個數據庫的服務器端,我在我的方法中使用了上下文作爲上面的鏈接,但這次出現了一個異常,例如「System.ArgumentException未被用戶代碼處理」和「Message = Keyword not supported:'metadata'。 「我不能使用System.Data.Linq客棧端客戶端,所以我可以在客戶端使用該方法既不

我寫這個方法在從LinqToEntitiesDomainService類繼承的域服務。我真的堅持在這一點。

所有的答案將不勝感激。

+0

而我正在尋找我無意中發現的東西在這裏的答案。和DataContext類我試圖連接數據庫直接,所以我想我正在做的事情,我不應該在silverlight做。所以地面零如何可以從Silverlight中使用wcf ria服務的數據庫中獲取表的列名? – f4d3 2012-07-26 11:25:07

回答

1

沒有內置的支持。但是,您可以使用以下SQL來獲取表中的列。在這個例子中,有一個名爲Foo.Bar的表,其中Foo是模式。

SELECT c.name 
FROM sys.objects o 
JOIN sys.columns c 
    ON o.object_id = c.object_id 
JOIN sys.schemas s 
    ON o.schema_id = s.schema_id 
WHERE 
    s.name = 'Foo' 
    AND o.name = 'Bar' 

我正在使用實體框架DbContext來獲得結果。

var commandText = "<SQL from above>"; 
var contextAdapter = (IObjectContextAdapter) this; 
IEnumerable<string> columnNames = contextAdapter.ObjectContext.ExecuteStoreQuery<string>(commandText); 

然後,您可以將一個invoke方法添加到您的DomainService。

[Invoke] // Use invoke for non-entities 
public string[] GetColumnNames(string table) 
{ 
    // Format the SQL and get the results; 
    return columnNames.ToArray(); 
} 
+0

我試過.bu我得到異常**「EntitiyCommandExecutionException」**「數據讀取器有多個字段,多個字段對於EDM基元類型無效」。 – f4d3 2012-07-27 09:13:29

+0

好吧,這是我的不好,它的工作表示感謝 – f4d3 2012-07-27 10:44:32

相關問題