using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
namespace AeroNet
{
//*******************************************************
//
// Класс ProductDetails
//
// Простой класс данных, который инкапсулирует подробности о
// конкретном продукте в базе данных коммерческих
// продуктов.
//
//*******************************************************
public class ProductDetails
{
public String articul;
public String name;
public String picture;
public decimal UnitCost;
public String notes;
}
//*******************************************************
//
// Класс ProductsDB
//
// Класс логики бизнеса/данных, который инкапсулирует всю логику
// данных, необходимую при запросе информации о продуктах из
// базы данных коммерческих продуктов.
//
//*******************************************************
public class ProductsDB
{
//*******************************************************
//
// Метод ProductsDB.GetProductCategories()
//
// Метод GetProductCategories возвращает объект DataReader, который
// предоставляет все категории продуктов (и их идентификаторы CategoryType)
// из базы данных коммерческих продуктов. Структура SQLDataReaderResult
// также возвращает SQL-подключение, которое должно быть явно
// закрыто после того, как данные из DataReader будут приняты
// элементами управления.
//
// См. также:
// + Хранимая процедура "ProductCategoryList"
//
//*******************************************************
public SqlDataReader GetProductCategories()
{
// Создание экземпляра объекта подключения и команды
SqlConnection myConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
SqlCommand myCommand = new SqlCommand("ProductCategoryList", myConnection);
// Пометка команды как SPROC
myCommand.CommandType = CommandType.StoredProcedure;
// Выполнение команды
myConnection.Open();
SqlDataReader result = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
// Возвращение результата datareader
return result;
}
//*******************************************************
//
// Метод ProductsDB.GetProducts()
//
// Метод GetProducts возвращает структуру, содержащую однонаправленный
// объект DataReader (только для чтения). В результате отображаются все продукты,
// входящие в указанную категорию. Структура SQLDataReaderResult также возвращает
// SQL-подключение, которое должно быть явно закрыто после того,
// как данные из DataReader будут приняты элементами управления.
//
// См. также:
// + Хранимая процедура "ProductsByCategory"
//
//*******************************************************
public SqlDataReader GetProducts(int categoryType)
{
// Создание экземпляра объекта подключения и команды
SqlConnection myConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
SqlCommand myCommand = new SqlCommand("ProductsByCategory", myConnection);
// Пометка команды как SPROC
myCommand.CommandType = CommandType.StoredProcedure;
// Добавление параметров к SPROC
SqlParameter parameterCategoryType = new SqlParameter("@CategoryType", SqlDbType.Int, 4);
parameterCategoryType.Value = categoryType;
myCommand.Parameters.Add(parameterCategoryType);
// Выполнение команды
myConnection.Open();
SqlDataReader result = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
// Возвращение результата datareader
return result;
}
//*******************************************************
//
// Метод ProductsDB.GetProductDetails()
//
// Метод GetProductDetails возвращает структуру ProductDetails,
// содержащую индивидуальные подробности об указанном
// продукте из базы данных коммерческих продуктов.
//
// См. также:
// + Хранимая процедура "ProductDetail"
//
//*******************************************************
public ProductDetails GetProductDetails(int productID)
{
// Создание экземпляра объекта подключения и команды
SqlConnection myConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
SqlCommand myCommand = new SqlCommand("ProductDetail", myConnection);
// Пометка команды как SPROC
myCommand.CommandType = CommandType.StoredProcedure;
// Добавление параметров к SPROC
SqlParameter parameterProductID = new SqlParameter("@ProductID", SqlDbType.Int, 4);
parameterProductID.Value = productID;
myCommand.Parameters.Add(parameterProductID);
SqlParameter parameterUnitCost = new SqlParameter("@UnitCost", SqlDbType.Money, 8);
parameterUnitCost.Direction = ParameterDirection.Output;
myCommand.Parameters.Add(parameterUnitCost);
SqlParameter parameterArticul = new SqlParameter("@articul", SqlDbType.NVarChar, 50);
parameterArticul.Direction = ParameterDirection.Output;
myCommand.Parameters.Add(parameterArticul);
SqlParameter parameterName = new SqlParameter("@name", SqlDbType.NVarChar, 50);
parameterName.Direction = ParameterDirection.Output;
myCommand.Parameters.Add(parameterName);
SqlParameter parameterPicture = new SqlParameter("@picture", SqlDbType.NVarChar, 50);
parameterPicture.Direction = ParameterDirection.Output;
myCommand.Parameters.Add(parameterPicture);
SqlParameter parameterNotes = new SqlParameter("@notes", SqlDbType.NVarChar, 3800);
parameterNotes.Direction = ParameterDirection.Output;
myCommand.Parameters.Add(parameterNotes);
// Открытие подключения и выполнение команды
myConnection.Open();
myCommand.ExecuteNonQuery();
myConnection.Close();
// Создание и заполнение структуры ProductDetails
// с помощью параметров вывода SPROC
ProductDetails myProductDetails = new ProductDetails();
myProductDetails.articul = (string)parameterArticul.Value;
myProductDetails.name = (string)parameterName.Value;
myProductDetails.picture = ((string)parameterPicture.Value).Trim();
myProductDetails.UnitCost = (decimal)parameterUnitCost.Value;
myProductDetails.notes = ((string)parameterNotes.Value).Trim();
return myProductDetails;
}
//*******************************************************
//
// Метод ProductsDB.GetProductsAlsoPurchased()
//
// Метод GetPGetProductsAlsoPurchasedroducts возвращает структуру, содержащую
// однонаправленный объект DataReader (только для чтения). В результате отображается список
// других продуктов, приобретенных наряду с указанным продуктом.
// Структура SQLDataReaderResult также возвращает SQL-подключение, которое
// должно быть явно закрыто после того, как данные от DataReader
// будут приняты элементами управления.
//
// См. также:
// + Хранимая процедура "CustomerAlsoBought"
//
//*******************************************************
public SqlDataReader GetProductsAlsoPurchased(int productID)
{
// Создание экземпляра объекта подключения и команды
SqlConnection myConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
SqlCommand myCommand = new SqlCommand("CustomerAlsoBought", myConnection);
// Пометка команды как SPROC
myCommand.CommandType = CommandType.StoredProcedure;
// Добавление параметров к SPROC
SqlParameter parameterProductID = new SqlParameter("@ProductID", SqlDbType.Int, 4);
parameterProductID.Value = productID;
myCommand.Parameters.Add(parameterProductID);
// Выполнение команды
myConnection.Open();
SqlDataReader result = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
// Возвращение результата datareader
return result;
}
//*******************************************************
//
// Метод ProductsDB.GetMostPopularProductsOfWeek()
//
// Метод GetMostPopularProductsOfWeek возвращает структуру, содержащую
// однонаправленный объект DataReader (только для чтения), содержащий
// информацию о самых популярных продуктах
// недели из базы данных коммерческих продуктов.
// Структура SQLDataReaderResult также возвращает
// SQL-подключение, которое должно быть явно закрыто после
// того, как данные от DataReader будут приняты элементами управления.
//
// См. также:
// + Хранимая процедура "ProductsMostPopular"
//
//*******************************************************
public SqlDataReader GetMostPopularProductsOfWeek()
{
// Создание экземпляра объекта подключения и команды
SqlConnection myConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
SqlCommand myCommand = new SqlCommand("ProductsMostPopular", myConnection);
// Пометка команды как SPROC
myCommand.CommandType = CommandType.StoredProcedure;
// Выполнение команды
myConnection.Open();
SqlDataReader result = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
// Возвращение результата datareader
return result;
}
}
}