using System; using System.Configuration; using System.Data; using System.Data.SqlClient; namespace AeroNet { //******************************************************* // // Класс OrderDetails // // Простой класс данных, который инкапсулирует подробности о // конкретном заказе в базе данных коммерческих // заказов. // //******************************************************* public class OrderDetails : Common { public DateTime OrderDate; public DateTime ShipDate; public decimal OrderTotal; public DataSet OrderItems; public string Notes; } public class AddressDetails : Common { public string PostName; public string Country; public string City; public string PostAddress; public string ZIP; } //******************************************************* // // Класс OrderDB // // Класс логики бизнеса/данных, который инкапсулирует всю логику // данных, необходимую при запросе прошлых заказов // в базе данных коммерческих заказов. // //******************************************************* public class OrdersDB : Common { public int orderID; public string email; //******************************************************* // // Метод CustomerDB.GetCustomerOrders() // // Метод GetCustomerOrders возвращает структуру, содержащую // однонаправленный объект DataReader (только для чтения). В результате отображается список всех // заказов, ранее размещенных указанным клиентом. // Структура SQLDataReaderResult также возвращает SQL-подключение, // которое должно быть явно закрыто после того, как данные от // DataReader будут приняты элементами управления. // //******************************************************* public SqlDataReader GetCustomerOrders(String customerID) { // Создание экземпляра объекта подключения и команды SqlConnection myConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]); SqlCommand myCommand = new SqlCommand("OrdersList", myConnection); // Пометка команды как SPROC myCommand.CommandType = CommandType.StoredProcedure; // Добавление параметров к SPROC SqlParameter parameterCustomerid = new SqlParameter("@CustomerID", SqlDbType.Int, 4); parameterCustomerid.Value = Int32.Parse(customerID); myCommand.Parameters.Add(parameterCustomerid); // Выполнение команды myConnection.Open(); SqlDataReader result = myCommand.ExecuteReader(CommandBehavior.CloseConnection); // Возвращение результата datareader return result; } //******************************************************* // // Метод OrdersDB.GetOrderDetails() // // Метод GetOrderDetails возвращает структуру // OrderDetails, содержащую информацию о конкретном // заказе. // //******************************************************* public OrderDetails GetOrderDetails(int orderID, string customerID) { // Создание экземпляра объекта подключения и команды SqlConnection myConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]); SqlDataAdapter myCommand = new SqlDataAdapter("OrdersDetail", myConnection); // Пометка команды как SPROC myCommand.SelectCommand.CommandType = CommandType.StoredProcedure; // Добавление параметров к SPROC SqlParameter parameterOrderID = new SqlParameter("@OrderID", SqlDbType.Int, 4); parameterOrderID.Value = orderID; myCommand.SelectCommand.Parameters.Add(parameterOrderID); SqlParameter parameterCustomerID = new SqlParameter("@CustomerID", SqlDbType.Int, 4); parameterCustomerID.Value = Int32.Parse(customerID); myCommand.SelectCommand.Parameters.Add(parameterCustomerID); SqlParameter parameterOrderDate = new SqlParameter("@OrderDate", SqlDbType.DateTime, 8); parameterOrderDate.Direction = ParameterDirection.Output; myCommand.SelectCommand.Parameters.Add(parameterOrderDate); SqlParameter parameterShipDate = new SqlParameter("@ShipDate", SqlDbType.DateTime, 8); parameterShipDate.Direction = ParameterDirection.Output; myCommand.SelectCommand.Parameters.Add(parameterShipDate); SqlParameter parameterOrderTotal = new SqlParameter("@OrderTotal", SqlDbType.Money, 8); parameterOrderTotal.Direction = ParameterDirection.Output; myCommand.SelectCommand.Parameters.Add(parameterOrderTotal); SqlParameter parameterPostCost = new SqlParameter("@PostCost", SqlDbType.Money, 8); parameterPostCost.Direction = ParameterDirection.Output; myCommand.SelectCommand.Parameters.Add(parameterPostCost); SqlParameter parameterNotes = new SqlParameter("@Notes", SqlDbType.VarChar, 1000); parameterNotes.Direction = ParameterDirection.InputOutput; myCommand.SelectCommand.Parameters.Add(parameterNotes); // Создание и заполнение DataSet DataSet myDataSet = new DataSet(); myCommand.Fill(myDataSet, "OrderItems"); // если заказ не существует или принадлежит другому пользователю, то дата // поставки обнуляется if (parameterShipDate.Value != DBNull.Value) { // Создание и заполнение структуры OrderDetails // с помощью параметров вывода SPROC, а также // заполненный набор данных из SqlDataAdapter OrderDetails myOrderDetails = new OrderDetails(); myOrderDetails.OrderDate = (DateTime)parameterOrderDate.Value; myOrderDetails.ShipDate = (DateTime)parameterShipDate.Value; myOrderDetails.OrderTotal = (decimal)parameterOrderTotal.Value; myOrderDetails.PostCost = (decimal)parameterPostCost.Value; myOrderDetails.Notes = (string)parameterNotes.Value; myOrderDetails.OrderItems = myDataSet; // Возвращение DataSet return myOrderDetails; } else return null; } //******************************************************* // // Метод OrdersDB.CalculateShippingDate() // // Метод CalculateShippingDate применяется там, где // размещен весь код, необходимый для вычисления // расчетного времени отправки заказа. Пока только создается случайная дата. // //******************************************************* public DateTime CalculateShippingDate(String customerID, string cartID) { Random x = new Random(); double myrandom = (double)x.Next(0,3); return DateTime.Now.AddDays(myrandom); } //******************************************************* // // Метод OrdersDB.PlaceOrder() // // Метод PlaceOrder размещает заказ в базе данных // Orders, а затем убирает текущие элементы из // покупательской корзины. // //******************************************************* public int PlaceOrder(string customerID, string cartID) { // Создание экземпляра объекта подключения и команды SqlConnection myConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]); SqlCommand myCommand = new SqlCommand("OrdersAdd", myConnection); // Пометка команды как SPROC myCommand.CommandType = CommandType.StoredProcedure; // Добавление параметров к SPROC SqlParameter parameterCustomerID = new SqlParameter("@CustomerID", SqlDbType.Int, 4); parameterCustomerID.Value = Int32.Parse(customerID); myCommand.Parameters.Add(parameterCustomerID); SqlParameter parameterCartID = new SqlParameter("@CartID", SqlDbType.NVarChar, 50); parameterCartID.Value = cartID; myCommand.Parameters.Add(parameterCartID); SqlParameter parameterShipDate = new SqlParameter("@ShipDate", SqlDbType.DateTime, 8); parameterShipDate.Value = CalculateShippingDate(customerID, cartID); myCommand.Parameters.Add(parameterShipDate); SqlParameter parameterOrderDate = new SqlParameter("@OrderDate", SqlDbType.DateTime, 8); parameterOrderDate.Value = DateTime.Now; myCommand.Parameters.Add(parameterOrderDate); SqlParameter parameterOrderID = new SqlParameter("@OrderID", SqlDbType.Int, 4); parameterOrderID.Direction = ParameterDirection.Output; myCommand.Parameters.Add(parameterOrderID); // Открытие подключения и выполнение команды myConnection.Open(); myCommand.ExecuteNonQuery(); myConnection.Close(); // Возвращение OrderID return (int)parameterOrderID.Value; } //******************************************************* // // Метод OrdersDB.PlaceOrderStatus() // // //******************************************************* public void PlaceOrderStatus(int orderID) { // Создание экземпляра объекта подключения и команды SqlConnection myConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]); SqlCommand myCommand = new SqlCommand("OrderStatusAdd", myConnection); // Пометка команды как SPROC myCommand.CommandType = CommandType.StoredProcedure; // Добавление параметров к SPROC SqlParameter parameterOrderID = new SqlParameter("@orderID", SqlDbType.Int, 4); parameterOrderID.Value = orderID; myCommand.Parameters.Add(parameterOrderID); // Открытие подключения и выполнение команды myConnection.Open(); myCommand.ExecuteNonQuery(); myConnection.Close(); } //******************************************************* // // Метод OrdersDB.SendConfirm() // // Метод SendConfirm отсылает подтверждение оформления заказа orderID // на указанный клиентом email // //******************************************************* public void SendConfirm (int orderID) { try { GetEmail (orderID); if (email != null) { System.Web.Mail.MailMessage Message = new System.Web.Mail.MailMessage(); Message.From = "aerotechnics@bk.ru"; Message.Body = "Уважаемый посетитель сайта www.aerotechnics.ru!\r\r"; Message.Body += "Ваш заказ зарегистрирован под N "+orderID.ToString()+"\r\r"; Message.Body += "Подробности вашего заказа и адрес его доставки Вы можете посмотреть по ссылке http://www.aerotechnics.ru/Order.aspx?orderID="+orderID.ToString()+".\r"; Message.Body += "Убедительная просьба производить оплату Вашего заказа ТОЛЬКО после получения нашего подтверждения, которое будет прислано Вам по электронной почте после обработки заказа.\r\r"; Message.Body += "Если Вы считаете, что данное сообщение было послано Вам ошибочно, возможно, кто-то указал Ваш адрес электронной почты в данных клиента без вашего разрешения.\r"; Message.Body += "Для принятия мер Вы можете сообщить об этом по адресу mailto:aerotechnics@bk.ru.\r\r"; Message.Subject = "Подтверждение Вашего заказа\r"; Message.To = email; Message.Cc = "vit@buro.ru"; System.Web.Mail.SmtpMail.SmtpServer = mailServer; System.Web.Mail.SmtpMail.Send(Message); } } catch { } } public void GetEmail (int orderID) { string strSQL = "SELECT * FROM V_GetEmail WHERE OrderID = "+orderID.ToString(); SqlConnection Conn = new SqlConnection(connString); SqlCommand Command = new SqlCommand(strSQL,Conn); Conn.Open(); try { SqlDataReader Reader; Reader = Command.ExecuteReader(); if(Reader.Read()) { email = Reader.GetString(1); } Reader.Close(); } catch { } finally { Conn.Close(); } } //******************************************************* // // Метод OrdersDB.GetAddressDetails() // // Метод GetAddress получает из базы данных адресс клиента по customerID // //******************************************************* public AddressDetails GetAddressDetails(string customerID) { // Создание экземпляра объекта подключения и команды SqlConnection myConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]); SqlCommand myCommand = new SqlCommand("GetAddress", myConnection); // Пометка команды как SPROC myCommand.CommandType = CommandType.StoredProcedure; // Добавление параметров к SPROC SqlParameter parameterCustomerID = new SqlParameter("@CustomerID", SqlDbType.Int, 4); parameterCustomerID.Value = Int32.Parse(customerID); myCommand.Parameters.Add(parameterCustomerID); SqlParameter parameterPostName = new SqlParameter("@PostName", SqlDbType.VarChar, 50); parameterPostName.Direction = ParameterDirection.Output; myCommand.Parameters.Add(parameterPostName); SqlParameter parameterCountry = new SqlParameter("@Country", SqlDbType.VarChar, 50); parameterCountry.Direction = ParameterDirection.Output; myCommand.Parameters.Add(parameterCountry); SqlParameter parameterCity = new SqlParameter("@City", SqlDbType.VarChar, 100); parameterCity.Direction = ParameterDirection.Output; myCommand.Parameters.Add(parameterCity); SqlParameter parameterPostAddress = new SqlParameter("@PostAddress", SqlDbType.VarChar, 50); parameterPostAddress.Direction = ParameterDirection.Output; myCommand.Parameters.Add(parameterPostAddress); SqlParameter parameterZIP = new SqlParameter("@ZIP", SqlDbType.VarChar, 10); parameterZIP.Direction = ParameterDirection.Output; myCommand.Parameters.Add(parameterZIP); myConnection.Open(); myCommand.ExecuteNonQuery(); myConnection.Close(); // Создание и заполнение структуры AddressDetails // с помощью параметров вывода SPROC AddressDetails myAddressDetails = new AddressDetails(); if (parameterPostName.Value != DBNull.Value) { myAddressDetails.PostName = (string)parameterPostName.Value; myAddressDetails.Country = (string)parameterCountry.Value; myAddressDetails.City = (string)parameterCity.Value; myAddressDetails.PostAddress = (string)parameterPostAddress.Value; myAddressDetails.ZIP = (string)parameterZIP.Value; // Возвращение структуры return myAddressDetails; } else { return null; } } public decimal CurrRate() { // Создание экземпляра объекта подключения и команды SqlConnection myConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]); SqlCommand myCommand = new SqlCommand("CurrenceRate", myConnection); // Пометка команды как SPROC myCommand.CommandType = CommandType.StoredProcedure; // Добавление параметров к SPROC SqlParameter parameterCurrRate = new SqlParameter("@CurrRate", SqlDbType.Money, 8); parameterCurrRate.Direction = ParameterDirection.Output; myCommand.Parameters.Add(parameterCurrRate); // Открытие подключения и выполнение команды myConnection.Open(); myCommand.ExecuteNonQuery(); myConnection.Close(); return (decimal)parameterCurrRate.Value; } } }