Использование SqlDataAdapter на странице ASP.NET
Я пишу страницу ASP.NET 2.0 в VS2008. В моем методе Page_Load у меня есть следующее:
DataTable table = new DataTable();
SqlDataAdapter adapter = new SqlDataAdapter();
using (SqlConnection connection = new SqlConnection(conString)) {
using (SqlCommand command = new SqlCommand(cmdString, connection)) {
adapter.SelectCommand = command;
rowCount = adapter.Fill(table);
}
}
Что я сделал не так?
Когда я запускаю страницу в первый раз, она работает нормально (Fill возвращает одну строку). Если я запускаю (Debug) страницу во второй раз, я получаю ноль строк. Аналогично, если страница запущена, и я изменяю один из параметров в URL-адресе, чтобы изменить cmdString, я получаю ноль строк. Если я внесу тривиальное изменение кода для принудительной перекомпиляции, страница снова заработает.
3 ответа
Мой cmdString
имел область видимости страницы, и я заполнял параметр с помощью += вместо String.Replace или (более разумно) с использованием SqlParameter, поэтому он был искажен при каждой попытке после первой. Я предполагаю, что веб-сервер, встроенный в VS, поддерживает объект страницы даже при остановке отладчика, что объясняет, почему он будет работать только один раз после каждого изменения кода.
Еще раз спасибо Phaedrus за вопрос: "Вы уверены, что он содержит значение для каждой загрузки?"
Похоже, что приведенный выше код выполняется в событии Page_Load... и запускается только при первой загрузке страницы... У вас есть приведенный выше код внутри оператора, подобного этому?
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable table = new DataTable();
SqlDataAdapter adapter = new SqlDataAdapter();
using (SqlConnection connection = new SqlConnection(conString))
{
using (SqlCommand command = new SqlCommand(cmdString, connection))
{
adapter.SelectCommand = command;
rowCount = adapter.Fill(table);
}
}
}
}
Вы использовали это в своем событии Page_Load?
if(!Page.IsPostBack)
{
YourBindDateMethod();
}