Веб-часть SharePoint - оператор SQL, не отражающий изменения - PullRequest
0 голосов
/ 26 апреля 2010

Недавно я написал веб-часть SharePoint на C #, которая извлекает информацию из базы данных 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", он позволяет этому коду кода добавить этого клиента в этот выпадающий список.

У меня до сих пор не было проблем с этим. Тем не менее, сегодня утром я установил для столбца fldActive тестового клиента значение True, чтобы протестировать некоторые новые сохраненные процедуры и попытаться просмотреть информацию этого клиента. Неудачно. Информация о клиенте не отображается в моем выпадающем списке. Затем я сделал iisreset и сбросил базу данных (SQL Server 2005). Все еще не повезло. Поэтому я открыл исходный код и пошагово описал метод, который заполняет этот выпадающий список. Проходя по нему, я вижу, что данные тестового клиента фактически загружены, текст объединяется, и Items.Add завершается без исключения. После завершения цикла я проверил выпадающий список клиентов, и запись фактически была там. Однако, как только страница загрузилась, у меня возникла та же проблема: появились все записи; тестового покупателя просто не было. Там не было пустой записи или что-нибудь; это было просто, как будто это никогда не населялось.

Единственное, о чем я могу думать, это о том, что где-то происходит кеширование, но я просто не знаю, почему это происходит. Я также очистил кеш IE и предположил, что между этим и перезапуском iisreset и базы данных я буду застрахован. Заранее благодарим за любую помощь, которую вы можете оказать.

РЕДАКТИРОВАТЬ: Я только что сделал полный перезапуск сервера, и теперь информация отображается правильно. Очевидно, что для правильного отображения необходимо перезапустить отдельный компонент. У кого-нибудь есть идеи относительно того, что это может быть? Очевидно, это не база данных или IIS, и я не хочу перезапускать весь сервер каждый раз, когда изменяются данные.

РЕДАКТИРОВАТЬ: у меня только что была эта проблема снова. На этот раз я изменил инструкцию SELECT, добавив одно поле, изменил инструкцию ORDER BY, обновил веб-часть на сервере и запустил ее. ORDER BY был соблюден, но новое поле не отображается. Sql Profiler показывает мне, что новый запрос SELECT находится в запросе, Fiddler показывает, что у запросов HTTP нет проблем, и я очистил кеш IE, но этот столбец просто не отображается на странице .aspx. На этот раз даже полный перезапуск сервера не помогает.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2010

Один из способов заставить браузер перезагрузить страницу - добавить случайный параметр запроса в URL. Другой способ - использовать Response.Cache.SetCacheability (HttpCacheability.NoCache) ;

0 голосов
/ 27 апреля 2010

Рассматривали ли вы кеширование в браузере? Кажется глупым, но вызывает у меня больше проблем, чем я могу сосчитать?

Одним из способов решения этой проблемы является использование бесплатного инструмента Fiddler (или другого монитора http-трафика) для просмотра контента между сервером и браузером.

...