Странное поведение: ASP.NET на Sql Server - PullRequest
0 голосов
/ 01 февраля 2011

OK. поэтому прежде чем задать вопрос вот фон. Я только что прошел этап разработки ASP.NET и создал полнофункциональное веб-приложение на локальном компьютере. Поэтому я передаю файлы в созданную веб-папку IIS на сервере Windows, на котором она должна работать, чтобы проверить, работает ли она так, как должна. Это делает!

Так что проблема в этом. Когда я набираю информацию, я нажимаю кнопку 1 и просто получаю обратную передачу, что нормально, если вы посмотрите на мой код. Я иду, чтобы проверить базу данных с помощью Sql Server Management, а затем я увидел это ..... НИЧЕГО не было !!

Ниже приведены некоторые сведения, которые помогут вам решить эту проблему, а также приведенный ниже код.

Особенности:

  • Windows Server 2003
  • SQL Server 2005
  • .NET Framework 2.0
  • IIS 6

Как и ожидалось, разметка с правильными именами textBox и всем

C # код:

protected void Button1_Click(object sender, EventArgs e)   {
   SqlConnection connection = new SqlConnection(@"Data Source=myServerName;Initial Catalog=myDatabaseName;Integrated Security=True");  

   SqlCommand cmd = new SqlCommand("insert into [PATIENT]([MRN], [PFNAME], [DOB]) "
                    + " Values(@MRN, @PFNAME, @DOB)", connection);

   cmd.Parameters.AddWithValue("@MRN", int.Parse(MRNTextBox.Text));  
   cmd.Parameters.AddWithValue("@PFNAME", NameTextBox.Text);  
   cmd.Parameters.AddWithValue("@DOB", DOBTextBox.Text);

   connection.Open();  
   cmd.ExecuteNonQuery();  
   cmd.Connection.Close();
}

Это код. Я не мог даже приблизиться к предположению, где может быть проблема, потому что я не получаю никаких сообщений об ошибках. Пожалуйста, дайте мне знать, если вам требуется дополнительная информация. Я с удовольствием предоставлю.

P.S. Я запускаю веб-сайт через IIS, а не через сервер разработки ASP.NET (если я уже не упомянул об этом. Поэтому, если он работает на вашем «Просмотр в браузере» из VS, я был бы рад узнать »)

EDIT

Я хочу поблагодарить всех за помощь. Я выполнил большинство ваших рекомендаций и надеюсь, что после того, как я выясню новую проблему (получаю исключение при входе в систему, YAY !!), я смогу использовать ваши комментарии на практике. Все вы будете думать, что я идиот (и сейчас я чувствую себя так, как сейчас), но причина, по которой я не смог увидеть изменения, заключалась в том, что я не создавал код C #. Я знаю некоторые упомянутые компиляции, но я предполагал, что это компиляция, потому что каждый раз, когда я вносил изменения в разметку, они мгновенно появлялись в сети. Я настолько привык к «View in Browser», что забыл, что Visual Studio автоматически компилирует код (я думаю)

Ответы [ 5 ]

2 голосов
/ 01 февраля 2011

Первое, к чему я бы стремился, это добавить некоторые инструменты в код.Самый простой способ - добавить трассировку.Это обеспечит правильную передачу событий и запуск событий.Если вы не видите нажатия кнопки на трассировке, значит, у вас проблема с пользовательским интерфейсом, и вы можете сосредоточиться на ней.Чаще всего это неправильная установка директивы @ Page, но возможны и другие причины.

Следующим шагом для устранения неполадок является профилирование сервера, на который вы попали, если это возможно.Надеемся, что вы не развертываете непосредственно в рабочей среде, и у вас есть промежуточная среда, с которой вы можете поиграть.

Мой последний шаг - рефакторинг фактического кода данных из вашего уровня пользовательского интерфейса и создание тестируемого «хранилища»используете ли вы шаблон репозитория или нет - причина для кавычек).Затем вы можете окружить код тестами и убедиться, что код работает.Вам все еще нужно проследить, чтобы убедиться, что библиотека вызывается и события правильно разнесены, но разделение задач позволит вам лучше справляться с проблемами с кодом доступа к данным.

Хорошо, не так окончательно.Вам нужно извлечь волшебные строки из вашего кода и переместить их в конфигурацию, где они принадлежат.Жесткое кодирование == плохое джиу.

Надеюсь, это поможет!

1 голос
/ 01 февраля 2011

Самое простое объяснение заключается в том, что вы попали не в ту базу данных. В противном случае вы должны увидеть некоторые ошибки. Вы не молча ловите исключения?

1 голос
/ 01 февраля 2011

Если вы уверены, что событие запускается, то наиболее вероятной причиной является использование Integrated Security. Помните, что процесс ASP.NET не эквивалентен вашему личному логину. Интегрированная защита работает только в том случае, если вы вошли в систему и получили доступ к базе данных через учетную запись или группу (например, администраторы), которой явно предоставлена ​​учетная запись в базе данных . Единственное сомнение заключается в том, что вы не получаете сообщение об ошибке при попытке подключения.

НЕ поддавайтесь искушению предоставить учетной записи IIS_IUSRS доступ к базе данных - это приглашение к неприятностям. Вместо этого используйте учетную запись SQL Server с соответствующим и безопасным паролем в строке входа в систему. Таким образом, вам не нужно беспокоиться о состоянии IIS_IUSRS в отношении вашей базы данных.

В качестве примечания вы быстро наберете очень усталость от явного открытия соединений, настройки команд, добавления параметров и т. Д. Я настоятельно рекомендую вам либо принять коммерческий ORM, либо, еще лучше , внедрите облегченный уровень доступа к данным, который автоматизирует большую часть тяжелой работы.

0 голосов
/ 01 февраля 2011

Ваш код выглядит нормально.Вы упомянули в своем вопросе, что вы не получаете никаких исключений, и ваш код также не работает.Может быть, вы можете попробовать это так, чтобы вы как минимум поймали любое исключение, если у вас есть в коде, который может молча вызывать проблему.

Добавьте файл Global.asax в ваш веб-проект и добавьте в него событие Application_Error,Ниже приведены подписи для того же

protected void Application_Error(object sender, EventArgs e)
{
}

. Это одно событие, которое перехватит любое исключение в вашем веб-проекте, независимо от того, где это исключение происходит в вашем проекте.Как только он достигнет точки останова, проверьте объект отправителя для коллекции AllErrors.Приведенный ниже код поможет вам

(sender as HttpApplication).Context.AllErrors[0]

. Если в вашем коде есть какая-либо ошибка, он не может пройти это событие.Здесь обязательно поймают.

Всего наилучшего

0 голосов
/ 01 февраля 2011

Чтобы быть тупым, используйте ORM как LLBLGen Pro

Вам не нужно изобретать велосипед, когда дело доходит до доступа к базе данных. Это поможет вашему коду быть поддерживаемым и уменьшит вероятность появления ошибок из-за написания собственного доступа к БД.

...