Скачиваний:
1
Добавлен:
12.04.2025
Размер:
8.45 Mб
Скачать

Приложение з

Листинг – Файл AddTour.aspx.cs

using System;

using System.Data.SqlClient;

using System.Web;

namespace WebApplication3

{

public partial class AddTour : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

}

protected void SaveTourButton_Click(object sender, EventArgs e)

{

string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["travelConnectionString4"].ConnectionString;

try

{

using (SqlConnection connection = new SqlConnection(connectionString))

{

connection.Open();

using (var transaction = connection.BeginTransaction())

{

try

{

string tourName = TourName.Text.Trim();

string description = Description.Text.Trim();

int duration = int.Parse(Duration.Text.Trim());

DateTime startDate;

if (!DateTime.TryParse(StartDate.Text.Trim(), out startDate))

{

throw new Exception("Неверный формат даты.");

}

int tourId = GetNextId("Tour", connection, transaction);

string query = @"

INSERT INTO Tour (Tour_ID, Name_T, Description_T, Duration_T, TypeT_ID)

VALUES (@Tour_ID, @Name, @Description, @Duration, @TypeT_ID)";

using (SqlCommand command = new SqlCommand(query, connection, transaction))

{

command.Parameters.AddWithValue("@Tour_ID", tourId);

command.Parameters.AddWithValue("@Name", tourName);

command.Parameters.AddWithValue("@Description", description);

command.Parameters.AddWithValue("@Duration", duration);

command.Parameters.AddWithValue("@TypeT_ID", TourType.SelectedValue);

command.ExecuteNonQuery();

}

string imagePath = SaveUploadedFile();

int imageId = -1;

if (!string.IsNullOrEmpty(imagePath))

{

imageId = GetNextImageId(connection, transaction);

string imageQuery = "INSERT INTO Image (ImageID, FilePath) VALUES (@ImageID, @FilePath)";

using (SqlCommand imageCommand = new SqlCommand(imageQuery, connection, transaction))

{

imageCommand.Parameters.AddWithValue("@ImageID", imageId);

imageCommand.Parameters.AddWithValue("@FilePath", imagePath);

imageCommand.ExecuteNonQuery();

}

string imageTourQuery = "INSERT INTO ImageTour (ImageTourID, TourID, ImageID) VALUES (@ImageTourID, @Tour_ID, @ImageID)";

using (SqlCommand imageTourCommand = new SqlCommand(imageTourQuery, connection, transaction))

{

int imageTourId = GetNextId("ImageTour", connection, transaction);

imageTourCommand.Parameters.AddWithValue("@ImageTourID", imageTourId);

imageTourCommand.Parameters.AddWithValue("@Tour_ID", tourId);

imageTourCommand.Parameters.AddWithValue("@ImageID", imageId);

imageTourCommand.ExecuteNonQuery();

}

}

DateTime endDate = startDate.AddDays(duration);

string tripQuery = @"

INSERT INTO Trip (Tour_ID, Price, StartDate, EndDate)

VALUES (@Tour_ID, @Price, @StartDate, @EndDate)";

int tripId = GetNextId("Trip", connection, transaction);

using (SqlCommand tripCommand = new SqlCommand(tripQuery, connection, transaction))

{

tripCommand.Parameters.AddWithValue("@Tour_ID", tourId);

tripCommand.Parameters.AddWithValue("@Price", decimal.Parse(Price.Text.Trim()));

tripCommand.Parameters.AddWithValue("@StartDate", startDate); // Дата начала сохраняется в Trip

tripCommand.Parameters.AddWithValue("@EndDate", endDate);

tripCommand.ExecuteNonQuery();

}

AddTourSeason(connection, transaction, tourId);

AddTourHotel(connection, transaction, tourId);

AddRoute(connection, transaction, tourId);

transaction.Commit();

SuccessMessage.Visible = true;

SuccessMessage.Text = "Тур успешно добавлен!";

}

catch (Exception ex)

{

transaction.Rollback();

ErrorMessage.Visible = true;

ErrorMessage.Text = "Ошибка: " + ex.Message;

}

}

}

}

catch (Exception ex)

{

ErrorMessage.Visible = true;

ErrorMessage.Text = "Ошибка: " + ex.Message;

}

}

private int GetNextImageId(SqlConnection connection, SqlTransaction transaction)

{

string query = "SELECT MAX(ImageID) FROM Image";

using (SqlCommand command = new SqlCommand(query, connection, transaction))

{

object result = command.ExecuteScalar();

return result == DBNull.Value ? 1 : (int)result + 1;

}

}

private int GetNextId(string tableName, SqlConnection connection, SqlTransaction transaction)

{

string columnName = tableName == "ImageTour" ? "ImageTourID" : $"{tableName}_ID";

string query = $"SELECT MAX({columnName}) FROM {tableName}";

using (SqlCommand command = new SqlCommand(query, connection, transaction))

{

object result = command.ExecuteScalar();

return result == DBNull.Value ? 1 : (int)result + 1;

}

}

private string SaveUploadedFile()

{

if (ImageUpload.HasFile)

{

try

{

string fileName = Guid.NewGuid() + "_" + ImageUpload.FileName;

string filePath = Server.MapPath("~/Images/") + fileName;

ImageUpload.SaveAs(filePath);

return "~/Images/" + fileName;

}

catch (Exception ex)

{

throw new Exception("Ошибка при сохранении файла: " + ex.Message);

}

}

return null;

}

private void AddTourHotel(SqlConnection connection, SqlTransaction transaction, int tourId)

{

string insertQuery = "INSERT INTO TourHotel (Tour_ID, Hotel_ID) VALUES (@Tour_ID, @Hotel_ID)";

using (SqlCommand command = new SqlCommand(insertQuery, connection, transaction))

{

command.Parameters.AddWithValue("@Tour_ID", tourId);

command.Parameters.AddWithValue("@Hotel_ID", int.Parse(Hotel.SelectedValue));

command.ExecuteNonQuery();

}

}

private void AddTourSeason(SqlConnection connection, SqlTransaction transaction, int tourId)

{

string insertQuery = "INSERT INTO TourSeason (Tour_ID, Season_ID) VALUES (@Tour_ID, @Season_ID)";

using (SqlCommand command = new SqlCommand(insertQuery, connection, transaction))

{

command.Parameters.AddWithValue("@Tour_ID", tourId);

command.Parameters.AddWithValue("@Season_ID", int.Parse(Season.SelectedValue));

command.ExecuteNonQuery();

}

}

private void AddImageTour(SqlConnection connection, SqlTransaction transaction, int tourId, int imageId)

{

string insertQuery = "INSERT INTO ImageTour (ImageTourID, TourID, ImageID) VALUES (@ImageTourID, @Tour_ID, @ImageID)";

using (SqlCommand command = new SqlCommand(insertQuery, connection, transaction))

{

int imageTourId = GetNextId("ImageTour", connection, transaction);

command.Parameters.AddWithValue("@ImageTourID", imageTourId);

command.Parameters.AddWithValue("@Tour_ID", tourId);

command.Parameters.AddWithValue("@ImageID", imageId);

command.ExecuteNonQuery();

}

}

private void AddRoute(SqlConnection connection, SqlTransaction transaction, int tourId)

{

int localityId = int.Parse(Locality.SelectedValue);

int routeId = GetNextId("Route", connection, transaction);

string insertQuery = "INSERT INTO Route (Route_ID, Tour_ID, Locality_ID) VALUES (@Route_ID, @Tour_ID, @Locality_ID)";

using (SqlCommand insertCommand = new SqlCommand(insertQuery, connection, transaction))

{

insertCommand.Parameters.AddWithValue("@Route_ID", routeId);

insertCommand.Parameters.AddWithValue("@Tour_ID", tourId);

insertCommand.Parameters.AddWithValue("@Locality_ID", localityId);

insertCommand.ExecuteNonQuery();

}

}

}

}

Соседние файлы в предмете Проектирование информационных систем