2010-04-26 25 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