Книга: C# для профессионалов. Том II

Запись мероприятий в базу данных

Запись мероприятий в базу данных

Обработчик событий submitButton_Click() в настоящее время собирает строку из характеристик мероприятия и выводит ее в элементе управления resultLabel. Чтобы добавить мероприятие в базу данных, нужно реформатировать созданную строку в запрос SQL INSERT и выполнить его.

Большая часть следующего кода выглядит знакомо:

protected void submitButton_Click(object sender, System.EventArgs e) {
 foreach (System.Web.UI.WebControls.WebControl validator in this.Validators) {
  validator.Enabled = true;
 }
 this.Validate();
 if (this.IsValid) {
String attendees = "";
  foreach (ListItem attendee in attendeeList.Items) {
if (attendee.Selected) {
    attendees += attendee.Text + " (" + attendee.Value + "), ";
   }
  }
  attendees += " and " + nameBox.Text;
  String dateString =
   calender.SelectedDate.Date.Date.ToShortDateString();
  String oleDbCommand = "INSERT INTO Events (Name, Room, " +
   "AttendeeList, EventDate) VALUES ('" + eventBox.Text + "', '" +
   roomList.SelectedItem.Value + "', '" +
   attendees + "', '" + dateString + "')";

После создания строки запроса SQL можно использовать ее для построения объекта OleDb.OleDbCommand:

  System.Data.OleDb.OleDbCommand insertCommand =
   new System.Data.OleDb.OleDbCommand(oleDbCommand, oleDbConnection1);

После этого снова открываем соединение, которое было закрыто в Page_Load() (это снова, возможно, не самый эффективный способ реализации, но он прекрасно подходит для целей демонстрации) и выполняем запрос:

  oleDbConnection1.Open();
  int queryResult = insertCommand.ExecuteNonQuery();

Метод ExecuteNonQuery() возвращает целое число, определяющее, сколько строк таблицы были изменены запросом. Если оно равно 1, то это означает, что вставка была успешной. Если это так, то мы помещаем сообщение об успешном выполнении в resultLabel, выполняем новый запрос для повторного заполнения eventTable и множества данных новым списком мероприятий (мы очищаем сначала множество данных, иначе события будут дублироваться) и изменяем выбор в календаре на новую, свободную, дату:

  if (queryResult == 1) {
   resultLabel.Text = "Event Added.";
   daEvents =
    new System.Data.OleDb.OleDbDataAdapter("SELECT * FROM Events" oleDbConnection1);
   dsClear();
   daEvents.Fill(ds, "Events");
   eventTable = ds.Tables["Events"];
   calendar.SelectedDate =
    getFreeDate(calendar.SelectedDate.AddDays(1));
   }

Если ExecuteNonQuery() возвращает число, отличное от единицы, то это говорит о том, что возникла проблема. В данном примере мы не будем это затрагивать, а просто выведем уведомление об отказе в resultLabel:

   else {
    resultLabel.Text = "Event not added due to DB access " + "problem.";
   }

И в конце мы снова закрываем соединение:

   oleDbConnection1.Close();
  } else {
   validationSummary.Enabled = true;
  }
 }

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

Отметим, что в связи с синтаксисом запроса SQL INSERT, мы должны избегать некоторых символов в названии мероприятия, таких как апострофы " ' ", так как они будут вызывать ошибку. Было бы относительно легко реализовать специальное правило проверки, которое не разрешает пользователям применять такие символы или выполнять некоторый тип кодирования символов перед вставкой данных и после считывания данных, но код для выполнения этого не будет здесь рассмотрен.

Оглавление книги


Генерация: 1.450. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз