2010-04-26 31 views
0

我最近在C#中編寫了一個SharePoint Web部件,該部件從基於用戶選擇的一些參數化查詢從SQL數據庫中提取信息。這涉及到客戶的名單在從一個DataReader填充像這樣一個下拉列表:SharePoint Web部件 - SQL語句沒有反映變化

while (dr.Read()) 
{ 
    string customerNameAndCity = dr.GetSqlString(1).Value + " - " + 
     dr.GetSqlString(2).Value; 
    customers.Items.Add(new ListItem(customerNameAndCity, dr.GetSqlString(0).ToString())); 
} 

基本上,這種讀取每個客戶的名稱和城市並連接輸出到被添加到項集合的字符串的下拉列表(稱爲「客戶」)。它使用的SQL命令是:

SELECT fldCustomer_ID, fldCustomerName, fldCity 
FROM dbo.tblCustomers 
WHERE fldActive = 'True' 
ORDER BY fldCustomerName 

顯然,有一個叫列「fldActive」,當此字段設置爲「True」,它可以讓這段代碼到客戶添加到該下拉列表。

到目前爲止我還沒有任何問題。然而,今天早上,我設置了一個我設置爲'True'的測試客戶的fldActive列,以測試一些新的存儲過程並試圖查看該客戶的信息。沒有運氣。客戶的信息不會顯示在我的下拉列表中。然後我做了一個iisreset並重置數據庫(SQL Server 2005)。仍然沒有運氣。所以我打開了源代碼,並逐步介紹了填充此下拉列表的方法。當我瀏覽它時,我可以看到測試客戶的數據實際上已加載,文本被連接在一起,並且Items.Add完成,沒有例外。循環完成後,我檢查了客戶的下拉列表,實際上那裏是條目。然而,一旦頁面加載,我有同樣的問題:所有的條目出現;測試客戶根本就不在那裏。沒有空的條目或任何東西;這就好像它從來沒有人口稠密。

我能想到的唯一的事情就是有一些緩存在某處發生,但我不知道爲什麼會發生這種情況。我也清除了IE緩存,並且我假設在這個和iisreset和數據庫重啓之間,我會被覆蓋。預先感謝您提供的任何幫助。

編輯:我只是做了一個完整的服務器重新啓動,現在的信息顯示正常。顯然,需要重新啓動單個組件才能正確顯示。有沒有人有任何想法可能是什麼?這顯然不是數據庫或IIS,並且我不希望每次數據更改時都必須重新啓動整個服務器。

編輯:我只是有這個問題了。這一次,我改變了一個SELECT語句以添加一個字段,更改了ORDER BY語句,更新了服務器上的Web部件,並運行了它。 ORDER BY受到尊重,但新字段沒有顯示。 Sql Profiler向我展示了新的SELECT語句在查詢中,Fiddler顯示HTTP請求沒有問題,並且清除了IE緩存,但該列只是不在.aspx頁面中呈現。這一次,即使完全重啓服務器也無濟於事。

回答

0

強制瀏覽器重新加載頁面的一種方法是向URL中添加一個隨機查詢參數。 另一種方法是使用Response.Cache.SetCacheability(HttpCacheability.NoCache);

+0

感謝您的提示!當我再次遇到這個問題時,我會研究這兩種方法。 – 2010-04-28 14:21:17

+0

我嘗試以編程方式調整緩存設置,但SharePoint似乎並未很好地尊重它們。我聽說這是SP的問題,我似乎無法正常工作,但它在我創建的標準.aspx測試頁上正常工作。 – 2010-06-02 15:01:26

+0

我認爲這是答案,因爲它確實有效,儘管有時SharePoint不會很好。 – 2011-05-05 05:01:18

0

你認爲瀏覽器緩存?看起來很愚蠢,但已經導致我的問題比我可以計數更多的時間?

解決此問題的一種方法是使用免費工具Fiddler(或某個其他http流量監視器)來觀看服務器和瀏覽器之間返回&的內容。

+0

這可能是。如果我再次遇到這個問題,我必須檢查它。就目前而言,當我在數據庫中更改數據時,數據似乎立即可用,無論是直接還是通過我構建的前端。 – 2010-04-27 18:23:39