Листинг класса ProductDao
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using Autoshop.BL.Entity;
using Autoshop.BL.Interfaces;
namespace Autoshop.BL.Models
{
public class ProductDao : IProductDao
{
public Product Get(int id)
{
// Получаем объект подключения к базе
using (var conn = GetConnection())
{
// Открываем соединение
conn.Open();
// Создаем sql команду
using(var cmd = conn.CreateCommand())
{
// Задаем текст команды
cmd.CommandText = "SELECT ProductId, Name, Customer, OrderDate, SaleDate, Category FROM Products WHERE ProductId = @id";
// Добавляем значение параметра
cmd.Parameters.AddWithValue("@id", id);
// Открываем SqlDataReader для чтения полученных в результате
// выполнения запроса данных
using (var dataReader = cmd.ExecuteReader())
{
return !dataReader.Read() ? null : LoadProduct(dataReader);
}
}
}
}
public IList
GetAll()
{
IList
products = new List
();
using(var conn = GetConnection())
{
conn.Open();
using(var cmd = conn.CreateCommand())
{
cmd.CommandText = "SELECT ProductId, Name, Customer, OrderDate, SaleDate, Category FROM Products";
using(var dataReader = cmd.ExecuteReader())
{
while (dataReader.Read())
{
products.Add(LoadProduct(dataReader));
}
}
}
}
return products;
}
public void Add(Product product)
{
using (var conn = GetConnection())
{
conn.Open();
using(var cmd = conn.CreateCommand())
{
cmd.CommandText = "INSERT INTO Products (Name, Customer, OrderDate, SaleDate, Category) " +
"VALUES (@Name, @Customer, @OrderDate, @SaleDate, @Category)";
cmd.Parameters.AddWithValue("@Name", product.Name);
cmd.Parameters.AddWithValue("@Customer", product.Customer);
cmd.Parameters.AddWithValue("@OrderDate", product.OrderDate);
cmd.Parameters.AddWithValue("@Category", product.Category);
object sale = product.SaleDate.HasValue ? (object)product.SaleDate.Value : DBNull.Value;
cmd.Parameters.AddWithValue("@SaleDate", sale);
cmd.ExecuteNonQuery();
}
}
}
public void Update(Product product)
{
using(var conn = GetConnection())
{
conn.Open();
using(var cmd = conn.CreateCommand())
{
cmd.CommandText = "UPDATE Products SET Name = @Name, Customer = @Customer, " +
"OrderDate = @OrderDate, SaleDate = @SaleDate, Category = @Category WHERE ProductId = @id";
cmd.Parameters.AddWithValue("@Name", product.Name);
cmd.Parameters.AddWithValue("@Customer", product.Customer);
cmd.Parameters.AddWithValue("@OrderDate", product.OrderDate);
cmd.Parameters.AddWithValue("@id", product.ProductId);
cmd.Parameters.AddWithValue("@Category", product.Category);
object sale = product.SaleDate.HasValue ? (object)product.SaleDate.Value : DBNull.Value;
cmd.Parameters.AddWithValue("@SaleDate", sale);
cmd.ExecuteNonQuery();
}
}
}
public void Delete(int id)
{
using (var conn = GetConnection())
{
conn.Open();
using(var cmd = conn.CreateCommand())
{
cmd.CommandText = "DELETE FROM Products WHERE ProductId = @id";
cmd.Parameters.AddWithValue("@id", id);
cmd.ExecuteNonQuery();
}
}
}
private static Product LoadProduct(SqlDataReader reader)
{
// Создаем пустой объект
Product product = new Product();
// Заполняем поля объекта в соответствии с названиями полей
// результирующего набора данных
product.ProductId = reader.GetInt32(reader.GetOrdinal("ProductId"));
product.OrderDate = Convert.ToInt32(reader["OrderDate"]);
// Помните, чтоу вас поле SaleDate может иметь значение NULL
// Следующие 3 строки корректно обрабатывают этот случай
object sale = reader["SaleDate"];
if (sale != DBNull.Value)
product.SaleDate = Convert.ToInt32(sale);
product.Name = reader.GetString(reader.GetOrdinal("Name"));
product.Customer = reader.GetString(reader.GetOrdinal("Customer"));
product.Category = reader.GetString(reader.GetOrdinal("Category"));
return product;
}
///
/// Возвращает строку подключения к базе
///
///
private static string GetConnectionString()
{
return ConfigurationManager.ConnectionStrings["Product"].ConnectionString;
}
///
/// Возвращает объект подключения к базе
///
///
private static SqlConnection GetConnection()
{
return new SqlConnection(GetConnectionString());
}
}
}
|