2010-05-26 41 views
0

我想執行使用亞音速以下查詢:亞音速選擇MSDB

SELECT MAX([restore_date]) FROM [msdb].[dbo].[restorehistory] 

雖然聚集部分很容易對我來說,問題出在表的名稱。我應該如何強制Subsonic從不同於默認數據庫的數據庫中進行選擇。

更多細節:

這是我在我的程序的方式:

SqlQuery query = new Select(Aggregate.Max(@"restore_date",@"restore_date")).From(@"msdb.dbo.restorehistory"); 
return query.ExecuteScalar<DateTime>(); 

而例外,我得到:

Need to have at least one From table specified 
+0

你會得到什麼錯誤? db是否在同一臺服務器上? – hgulyan 2010-05-26 13:08:12

+0

當我準備查詢時,我沒有FROM部分中的任何表。是的,都在同一臺服務器上。 – 2010-05-26 13:09:59

+0

嘗試選擇*從[msdb]。[dbo]。[restorehistory] ​​ 您是否得到任何結果? – hgulyan 2010-05-26 13:11:29

回答

1

你試過:

DateTime result = new Select(Aggregate.Max(@"restore_date",@"restore_date")) 
     .From<RestoreHistory>() 
     .ExecuteScalar<DateTime>(); 

此外它始終是一個好主意

SqlQuery query = new Select(...), 
String queryString = query.BuildSqlStatement(); 

如果出現問題。
queryString將是一個參數化的Sql語句。

編輯:

而你真的不應該使用SubSonic的字符串。 您可以使用

RestoreHistory.Columns.RestoreDate // = restore_date 
RestoreHistory.RestoreDateColumn.QualifiedName 
// = [msdb].[dbo].[restorehistory].[restore_date] (not sure about this one, just try it out) 

And 

RestoreHistory.Schema.TableName  // = RestoreHistory 
RestoreHistory.Schema.QualifiedName // = [msdb].[dbo].[restorehistory] 

來從DAL的字符串。 否則,在重命名/刪除數據庫中的列並重新創建SubSonic DAL後,您將不會收到編譯時錯誤。

EDIT2:

我剛纔讀您要查詢的表在另一個數據庫比你用於生成你的DAL的一個。 我從來沒有這樣做過,但我猜這是行不通的原因是因爲subsonics的SqlQuery類試圖從你指定的表名查詢模式(爲了能夠獲得限定名等,失敗併吞下(或者只是ignories表)在構建查詢字符串,不包括例外,你的表,因爲它從未被添加到FromTables收集

但有一個快速的解決方案,應該工作:

DateTime result = new SubSonic.InlineQuery() 
    .ExecuteScalar<DateTime>(
     "SELECT MAX([restore_date]) FROM [msdb].[dbo].[restorehistory]" 
    ); 

或者,如果您經常需要訪問其他數據庫,您甚至可以創建另一個提供商並在一個項目中使用兩個DAL「。