Использование 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();
 }
Другие вопросы по тегам