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; } } }