.NET数据库编程求索之路--7.使用ADO.NET实现(工厂模式-实现多数据库切换)(3)

简介: 7.使用ADO.NET实现(工厂模式-实现多数据库切换)(3)   7.5 SQL数据访问层HomeShop.DALOfSql   OrderDAO.cs View Code using System;using System.

7.使用ADO.NET实现(工厂模式-实现多数据库切换)(3

 

7.5 SQL数据访问层HomeShop.DALOfSql

 

OrderDAO.cs

img_405b18b4b6584ae338e0f6ecaf736533.gif View Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
// 新添命名空间
using System.Data;
using System.Data.SqlClient;
using HomeShop.DbUtility;
using HomeShop.Model;
using HomeShop.DALInterface;

namespace HomeShop.DALOfSql
{
     public  class OrderDAO : IOrderDAO
    {                
         private SqlDbHelper dbHelper =  new SqlDbHelper();

         // 添加
         public  int Add(Order order)
        {
             int rowsCountAffected =  0;
            SqlTransaction trans = dbHelper.BeginTransaction();
             try
            {
                 // 新增订单基本信息
                 string sql =  @" INSERT INTO [Order]([OrderTime],
                                                   [OrderStateCode],
                                                   [CustomerName],
                                                   [CustomerPhoneNo],
                                                   [CustomerAddress])
                               VALUES(@OrderTime,
                                      @OrderStateCode,
                                      @CustomerName,
                                      @CustomerPhoneNo,
                                      @CustomerAddress)
";
                SqlParameter[] parameters = {
                     new SqlParameter( " @OrderTime ", SqlDbType.DateTime),
                     new SqlParameter( " @OrderStateCode ", SqlDbType.Char,  1),
                     new SqlParameter( " @CustomerName ", SqlDbType.VarChar,  30),
                     new SqlParameter( " @CustomerPhoneNo ", SqlDbType.VarChar,  15),
                     new SqlParameter( " @CustomerAddress ", SqlDbType.VarChar,  60)};
                parameters[ 0].Value = order.OrderTime;
                parameters[ 1].Value = order.OrderStateCode;
                parameters[ 2].Value = order.CustomerName;
                parameters[ 3].Value = order.CustomerPhoneNo;
                parameters[ 4].Value = order.CustomerAddress;
                rowsCountAffected += dbHelper.ExecuteNonQuery(trans, sql, parameters);               
                 // 获取新增订单的ID
                order.OrderID = Convert.ToInt32(dbHelper.ExecuteScalar(trans,  " SELECT @@IDENTITY "));
                 // -----------------------------------------------------------
                
// 循环添加订购商品信息
                 for ( int i =  0; i < order.OrderItems.Count; i++)
                {
                     string sqlX =  @" INSERT INTO [OrderItem]([OrderID],
                                                [Product],
                                                [UnitPrice],
                                                [Quantity])
                                    VALUES( @OrderID,
                                            @Product,
                                            @UnitPrice,
                                            @Quantity)
";
                    SqlParameter[] parametersX = {
                         new SqlParameter( " @OrderID ", SqlDbType.Int,  4),
                         new SqlParameter( " @Product ", SqlDbType.VarChar,  30),
                         new SqlParameter( " @UnitPrice ", SqlDbType.Decimal,  9),
                         new SqlParameter( " @Quantity ", SqlDbType.Int,  4)};
                    parametersX[ 0].Value = order.OrderID;
                    parametersX[ 1].Value = order.OrderItems[i].Product;
                    parametersX[ 2].Value = order.OrderItems[i].UnitPrice;
                    parametersX[ 3].Value = order.OrderItems[i].Quantity;
                    rowsCountAffected += dbHelper.ExecuteNonQuery(trans, sqlX, parametersX);
                }
                trans.Commit(); // 提交数据库事务
            }
             catch
            {
                trans.Rollback(); // 回滚数据库事务
                 throw;
            }
            dbHelper.Close();

             return rowsCountAffected;
        }

         // 修改
         public  int Update(Order order)
        {
             int rowsCountAffected =  0;            

            List<SqlCmdTextAndParams> listCmdTextAndParams =  new List<SqlCmdTextAndParams>();
             // 修改订单基本信息
             string sql =  @"  UPDATE [Order]
                            SET [OrderTime] = @OrderTime,
                                [OrderStateCode] = @OrderStateCode,
                                [CustomerName] = @CustomerName,
                                [CustomerPhoneNo] = @CustomerPhoneNo,
                                [CustomerAddress] = @CustomerAddress
                            WHERE [OrderID] = @OrderID
";
            SqlParameter[] parameters = {
                     new SqlParameter( " @OrderTime ", SqlDbType.DateTime),
                     new SqlParameter( " @OrderStateCode ", SqlDbType.Char,  1),
                     new SqlParameter( " @CustomerName ", SqlDbType.VarChar,  30),
                     new SqlParameter( " @CustomerPhoneNo ", SqlDbType.VarChar,  15),
                     new SqlParameter( " @CustomerAddress ", SqlDbType.VarChar,  60),
                     new SqlParameter( " @OrderID ", SqlDbType.Int, 4)};
            parameters[ 0].Value = order.OrderTime;
            parameters[ 1].Value = order.OrderStateCode;
            parameters[ 2].Value = order.CustomerName;
            parameters[ 3].Value = order.CustomerPhoneNo;
            parameters[ 4].Value = order.CustomerAddress;
            parameters[ 5].Value = order.OrderID;
            listCmdTextAndParams.Add( new SqlCmdTextAndParams(sql, parameters));
             // -----------------------------------------------------------
            
// 循环将订购商品信息列表同步更新到数据库中
            
// 删除
             string predicate =  "  OrderID = @OrderID  ";
            SqlParameter parameter =  new SqlParameter( " @OrderID ",SqlDbType.Int,  4);
            parameter.Value = order.OrderID;
            Order originalOrder =  this.GetSingle(predicate, parameter);
             for( int i= 0;i<originalOrder.OrderItems.Count;i++)
            {
                 bool exists = order.OrderItems.Exists(
                     delegate(OrderItem item){  return (item.OrderItemID == originalOrder.OrderItems[i].OrderItemID);});
                 if (exists)  continue;
                
                 string sqlX =  @" DELETE FROM [OrderItem]
                                WHERE [OrderItemID] = @OrderItemID
";
                SqlParameter parameterX =  new SqlParameter( " @OrderItemID ", SqlDbType.Int,  4);
                parameterX.Value = originalOrder.OrderItems[i].OrderItemID;
                listCmdTextAndParams.Add( new SqlCmdTextAndParams(sqlX, parameterX));                
            }
             // 新增/修改
            OrderItemDAO orderItemDAO =  new OrderItemDAO();
             for ( int i =  0; i < order.OrderItems.Count; i++)
            {
                 if ( 0 >= order.OrderItems[i].OrderItemID ) // 新增
                {
                     string sqlX =  @" INSERT INTO [OrderItem]([OrderID],
                                                            [Product],
                                                            [UnitPrice],
                                                            [Quantity])
                                    VALUES( @OrderID,
                                            @Product,
                                            @UnitPrice,
                                            @Quantity)
";
                    SqlParameter[] parametersX = {
                         new SqlParameter( " @OrderID ", SqlDbType.Int, 4),
                         new SqlParameter( " @Product ", SqlDbType.VarChar, 30),
                         new SqlParameter( " @UnitPrice ", SqlDbType.Decimal, 9),
                         new SqlParameter( " @Quantity ", SqlDbType.Int, 4)};
                    parametersX[ 0].Value = order.OrderItems[i].OrderID;
                    parametersX[ 1].Value = order.OrderItems[i].Product;
                    parametersX[ 2].Value = order.OrderItems[i].UnitPrice;
                    parametersX[ 3].Value = order.OrderItems[i].Quantity;
                    listCmdTextAndParams.Add( new SqlCmdTextAndParams(sqlX, parametersX));
                }
                 else // 修改
                {
                     string sqlX =  @" UPDATE [OrderItem]
                                                SET [OrderID] = @OrderID,
                                                    [Product] = @Product,
                                                    [UnitPrice] = @UnitPrice,
                                                    [Quantity] = @Quantity
                                                WHERE [OrderItemID] = @OrderItemID
";
                    SqlParameter[] parametersX = {
                         new SqlParameter( " @OrderID ", SqlDbType.Int, 4),
                         new SqlParameter( " @Product ", SqlDbType.VarChar, 30),
                         new SqlParameter( " @UnitPrice ", SqlDbType.Decimal, 9),
                         new SqlParameter( " @Quantity ", SqlDbType.Int, 4),
                         new SqlParameter( " @OrderItemID ", SqlDbType.Int, 4)};
                    parametersX[ 0].Value = order.OrderItems[i].OrderID;
                    parametersX[ 1].Value = order.OrderItems[i].Product;
                    parametersX[ 2].Value = order.OrderItems[i].UnitPrice;
                    parametersX[ 3].Value = order.OrderItems[i].Quantity;
                    parametersX[ 4].Value = order.OrderItems[i].OrderItemID;
                    listCmdTextAndParams.Add( new SqlCmdTextAndParams(sqlX, parametersX));
                }
            }

            rowsCountAffected = dbHelper.ExecuteNonQueryTrans(listCmdTextAndParams);
             return rowsCountAffected;
        }
        
         // 删除
         public  int Delete( int orderID)
        {
            List<SqlCmdTextAndParams> listCmdTextAndParams =  new List<SqlCmdTextAndParams>();

             string sql =  @" DELETE FROM [OrderItem]
                           WHERE [OrderID] = @OrderID
";
            SqlParameter parameter =  new SqlParameter( " @OrderID ", SqlDbType.Int,  4);
            parameter.Value = orderID;
            listCmdTextAndParams.Add( new SqlCmdTextAndParams(sql, parameter));

            sql =  @"        DELETE FROM [Order]
                           WHERE [OrderID] = @OrderID 
";
            listCmdTextAndParams.Add( new SqlCmdTextAndParams(sql, parameter));

             return dbHelper.ExecuteNonQueryTrans(listCmdTextAndParams);
        }
        
         // 获取实体对象列表
         public List<Order> GetList()
        {
             return GetList( nullnull);
        }

         // 获取实体对象列表
         public List<Order> GetList( string customerName)
        {
             string predicate =  "  CustomerName LIKE '%' + @CustomerName + '%' ";
            SqlParameter parameter =  new SqlParameter( " @CustomerName ", SqlDbType.VarChar,  30);
            parameter.Value = customerName;

             return GetList(predicate, parameter);
        }

         // 获取实体对象列表
         public List<Order> GetList( string predicate,  params SqlParameter[] parameters)
        {
            List<Order> list =  new List<Order>();

            DataTable table = GetTable(predicate, parameters);
             for ( int i =  0; i < table.Rows.Count; i++)
            {
                list.Add(RowToModel(table.Rows[i]));
            }

             return list;
        }

         // 获取单一实体对象
         public Order GetSingle( int orderID)
        {
             string predicate =  "  OrderID = @OrderID  ";
            SqlParameter parameter =  new SqlParameter( " @OrderID ",SqlDbType.Int,  4);
            parameter.Value = orderID;

             return GetSingle(predicate,parameter);
        }

         // 获取单一实体对象
         private Order GetSingle( string predicate,  params SqlParameter[] parameters)
        {
            List<Order> list = GetList(predicate, parameters);
             if (list.Count ==  1)
                 return list[ 0];
             else  if (list.Count ==  0)
                 return  null;
             else
            {
                Exception ex =  new Exception( " 满足条件的实体多于1个。 ");
                 throw ex;
            }
        }

         // 获取DataTable
         private DataTable GetTable( string predicate,  params SqlParameter[] parameters)
        {
             string sql =  @" SELECT [OrderID],
                                  [CustomerName],
                                  [CustomerPhoneNo],
                                  [CustomerAddress],
                                  [OrderTime],
                                  [OrderStateCode],
                                  [OrderState].[Name] AS [OrderState]
                            FROM [Order]
                            LEFT OUTER JOIN [OrderState]
                            ON [Order].[OrderStateCode] = [OrderState].[Code]
";
             if ( null != predicate &&  "" != predicate.Trim())
            {
                sql +=  "   WHERE   " + predicate;
            }
            sql +=  "  ORDER BY [OrderID] DESC  ";
             return dbHelper.ExecuteQuery(sql, parameters);
        }
        
         // 将DataRow转换为实体对象
         private Order RowToModel(DataRow row)
        {
             // ----父表----
            Order order =  new Order();
            order.OrderID = ( int)row[ " OrderID "];
            order.CustomerName = row[ " CustomerName "].ToString();
            order.CustomerPhoneNo = row[ " CustomerPhoneNo "].ToString();
            order.CustomerAddress = row[ " CustomerAddress "].ToString();
            order.OrderTime = Convert.ToDateTime(row[ " OrderTime "]);
            order.OrderStateCode = row[ " OrderStateCode "].ToString();
             // ----子表----
            OrderItemDAO orderItemDAO =  new OrderItemDAO();
            order.OrderItems = orderItemDAO.GetList(order.OrderID);
            
             return order;
        }

    }
}

 

OrderItemDAO.cs

img_405b18b4b6584ae338e0f6ecaf736533.gif View Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
// 新添命名空间
using System.Data;
using System.Data.SqlClient;
using HomeShop.DbUtility;
using HomeShop.Model;
using HomeShop.DALInterface;

namespace HomeShop.DALOfSql
{
     public  class OrderItemDAO : IOrderItemDAO
    {
         private SqlDbHelper dbHelper =  new SqlDbHelper();

         // 获取实体对象列表
         public List<OrderItem> GetList( int orderID)
        {
             string predicate =  "  OrderID = @OrderID  ";
            SqlParameter parameter =  new SqlParameter( " @OrderID ", SqlDbType.Int,  4);
            parameter.Value = orderID;

             return GetList(predicate, parameter);
        }

         // 获取实体对象列表
         private List<OrderItem> GetList( string predicate,  params SqlParameter[] parameters)
        {
            List<OrderItem> list =  new List<OrderItem>();
            DataTable dataTable = GetTable(predicate, parameters);
             for ( int i =  0; i < dataTable.Rows.Count; i++)
            {
                list.Add(RowToModel(dataTable.Rows[i]));
            }

             return list;
        }

         // 获取DataTable
         private DataTable GetTable( string predicate,  params SqlParameter[] parameters)
        {
             string sql =  @" SELECT [OrderItemID],
                                  [OrderID],
                                  [Product],
                                  [UnitPrice],
                                  [Quantity],
                                  [UnitPrice]*[Quantity] AS SubTotal
                           FROM [OrderItem]
";
             if ( null != predicate &&  "" != predicate.Trim())
            {
                sql +=  "   WHERE   " + predicate;
            }
             return dbHelper.ExecuteQuery(sql, parameters);
        }

         // 将DataRow转换为实体对象
         private OrderItem RowToModel(DataRow row)
        {
            OrderItem orderItem =  new OrderItem();
            orderItem.OrderID = ( int)row[ " OrderID "];
            orderItem.OrderItemID = ( int)row[ " OrderItemID "];
            orderItem.Product = row[ " Product "].ToString();
            orderItem.Quantity = ( int)row[ " Quantity "];
            orderItem.UnitPrice = ( decimal)row[ " UnitPrice "];

             return orderItem;
        }
    }
}

 

OrderStateDAO.cs

img_405b18b4b6584ae338e0f6ecaf736533.gif View Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
// 新添命名空间
using System.Data;
using System.Data.SqlClient;
using HomeShop.DbUtility;
using HomeShop.Model;
using HomeShop.DALInterface;

namespace HomeShop.DALOfSql
{
     public  class OrderStateDAO : IOrderStateDAO
    {
         private SqlDbHelper dbHelper =  new SqlDbHelper();

         // 获取实体对象列表
         public List<OrderState> GetList()
        {
             return GetList( nullnull);
        }

         // 获取实体对象列表
         public List<OrderState> GetList( string predicate,  params SqlParameter[] parameters)
        {
            List<OrderState> list =  new List<OrderState>();
            DataTable dataTable = GetTable(predicate, parameters);
             for ( int i =  0; i < dataTable.Rows.Count; i++)
            {
                list.Add(RowToModel(dataTable.Rows[i]));
            }

             return list;
        }

         // 获取DataTable
         private DataTable GetTable( string predicate,  params SqlParameter[] parameters)
        {
             string sql =  @" SELECT * FROM [OrderState] ";
             if ( null != predicate &&  "" != predicate.Trim())
            {
                sql +=  "   WHERE   " + predicate;
            }
            sql +=  "  ORDER BY [Code]  ";
             return dbHelper.ExecuteQuery(sql, parameters);
        }

         // 将DataRow转换为实体对象
         private OrderState RowToModel(DataRow row)
        {
            OrderState orderState =  new OrderState();
            orderState.Code = row[ " Code "].ToString();
            orderState.Name = row[ " Name "].ToString();
             return orderState;
        }
    }
}

 

7.6 Access数据访问层HomeShop.DALOfAccess

 

OrderDAO.cs

 

img_405b18b4b6584ae338e0f6ecaf736533.gif View Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
// 新添命名空间
using System.Data;
using System.Data.OleDb;
using HomeShop.DbUtility;
using HomeShop.Model;
using HomeShop.DALInterface;

namespace HomeShop.DALOfAccess
{
     public  class OrderDAO : IOrderDAO
    {
         private OleDbHelper dbHelper =  new OleDbHelper();

         // 添加
         public  int Add(Order order)
        {
             int rowsCountAffected =  0;
            OleDbTransaction trans = dbHelper.BeginTransaction();
             try
            {
                 // 新增订单基本信息
                 string sql =  @" INSERT INTO [Order]([OrderTime],
                                                   [OrderStateCode],
                                                   [CustomerName],
                                                   [CustomerPhoneNo],
                                                   [CustomerAddress])
                               VALUES(@OrderTime,
                                      @OrderStateCode,
                                      @CustomerName,
                                      @CustomerPhoneNo,
                                      @CustomerAddress)
";
                OleDbParameter[] parameters = {
                     new OleDbParameter( " @OrderTime ", OleDbType.Date),
                     new OleDbParameter( " @OrderStateCode ", OleDbType.Char,  1),
                     new OleDbParameter( " @CustomerName ", OleDbType.VarChar,  30),
                     new OleDbParameter( " @CustomerPhoneNo ", OleDbType.VarChar,  15),
                     new OleDbParameter( " @CustomerAddress ", OleDbType.VarChar,  60)};
                parameters[ 0].Value = order.OrderTime;
                parameters[ 1].Value = order.OrderStateCode;
                parameters[ 2].Value = order.CustomerName;
                parameters[ 3].Value = order.CustomerPhoneNo;
                parameters[ 4].Value = order.CustomerAddress;
                rowsCountAffected += dbHelper.ExecuteNonQuery(trans, sql, parameters);
                 // 获取新增订单的ID
                order.OrderID = Convert.ToInt32(dbHelper.ExecuteScalar(trans,  " SELECT @@IDENTITY "));
                 // -----------------------------------------------------------
                
// 循环添加订购商品信息
                 for ( int i =  0; i < order.OrderItems.Count; i++)
                {
                     string sqlX =  @" INSERT INTO [OrderItem]([OrderID],
                                                [Product],
                                                [UnitPrice],
                                                [Quantity])
                                    VALUES( @OrderID,
                                            @Product,
                                            @UnitPrice,
                                            @Quantity)
";
                    OleDbParameter[] parametersX = {
                         new OleDbParameter( " @OrderID ", OleDbType.Integer,  4),
                         new OleDbParameter( " @Product ", OleDbType.VarChar,  30),
                         new OleDbParameter( " @UnitPrice ", OleDbType.Decimal,  9),
                         new OleDbParameter( " @Quantity ", OleDbType.Integer,  4)};
                    parametersX[ 0].Value = order.OrderID;
                    parametersX[ 1].Value = order.OrderItems[i].Product;
                    parametersX[ 2].Value = order.OrderItems[i].UnitPrice;
                    parametersX[ 3].Value = order.OrderItems[i].Quantity;
                    rowsCountAffected += dbHelper.ExecuteNonQuery(trans, sqlX, parametersX);
                }
                trans.Commit(); // 提交数据库事务
            }
             catch
            {
                trans.Rollback(); // 回滚数据库事务
                 throw;
            }
            dbHelper.Close();

             return rowsCountAffected;
        }

         // 修改
         public  int Update(Order order)
        {
             int rowsCountAffected =  0;

            List<OleDbCmdTextAndParams> listCmdTextAndParams =  new List<OleDbCmdTextAndParams>();
             // 修改订单基本信息
             string sql =  @"  UPDATE [Order]
                            SET [OrderTime] = @OrderTime,
                                [OrderStateCode] = @OrderStateCode,
                                [CustomerName] = @CustomerName,
                                [CustomerPhoneNo] = @CustomerPhoneNo,
                                [CustomerAddress] = @CustomerAddress
                            WHERE [OrderID] = @OrderID
";
            OleDbParameter[] parameters = {
                     new OleDbParameter( " @OrderTime ", OleDbType.Date),
                     new OleDbParameter( " @OrderStateCode ", OleDbType.Char,  1),
                     new OleDbParameter( " @CustomerName ", OleDbType.VarChar,  30),
                     new OleDbParameter( " @CustomerPhoneNo ", OleDbType.VarChar,  15),
                     new OleDbParameter( " @CustomerAddress ", OleDbType.VarChar,  60),
                     new OleDbParameter( " @OrderID ", OleDbType.Integer, 4)};
            parameters[ 0].Value = order.OrderTime;
            parameters[ 1].Value = order.OrderStateCode;
            parameters[ 2].Value = order.CustomerName;
            parameters[ 3].Value = order.CustomerPhoneNo;
            parameters[ 4].Value = order.CustomerAddress;
            parameters[ 5].Value = order.OrderID;
            listCmdTextAndParams.Add( new OleDbCmdTextAndParams(sql, parameters));
             // -----------------------------------------------------------
            
// 循环将订购商品信息列表同步更新到数据库中
            
// 删除
             string predicate =  "  OrderID = @OrderID  ";
            OleDbParameter parameter =  new OleDbParameter( " @OrderID ", OleDbType.Integer,  4);
            parameter.Value = order.OrderID;
            Order originalOrder =  this.GetSingle(predicate, parameter);
             for ( int i =  0; i < originalOrder.OrderItems.Count; i++)
            {
                 bool exists = order.OrderItems.Exists(
                     delegate(OrderItem item) {  return (item.OrderItemID == originalOrder.OrderItems[i].OrderItemID); });
                 if (exists)  continue;

                 string sqlX =  @" DELETE FROM [OrderItem]
                                WHERE [OrderItemID] = @OrderItemID
";
                OleDbParameter parameterX =  new OleDbParameter( " @OrderItemID ", OleDbType.Integer,  4);
                parameterX.Value = originalOrder.OrderItems[i].OrderItemID;
                listCmdTextAndParams.Add( new OleDbCmdTextAndParams(sqlX, parameterX));
            }
             // 新增/修改
            OrderItemDAO orderItemDAO =  new OrderItemDAO();
             for ( int i =  0; i < order.OrderItems.Count; i++)
            {
                 if ( 0 >= order.OrderItems[i].OrderItemID) // 新增
                {
                     string sqlX =  @" INSERT INTO [OrderItem]([OrderID],
                                                            [Product],
                                                            [UnitPrice],
                                                            [Quantity])
                                    VALUES( @OrderID,
                                            @Product,
                                            @UnitPrice,
                                            @Quantity)
";
                    OleDbParameter[] parametersX = {
                         new OleDbParameter( " @OrderID ", OleDbType.Integer,  4),
                         new OleDbParameter( " @Product ", OleDbType.VarChar,  30),
                         new OleDbParameter( " @UnitPrice ", OleDbType.Decimal,  9),
                         new OleDbParameter( " @Quantity ", OleDbType.Integer,  4)};
                    parametersX[ 0].Value = order.OrderItems[i].OrderID;
                    parametersX[ 1].Value = order.OrderItems[i].Product;
                    parametersX[ 2].Value = order.OrderItems[i].UnitPrice;
                    parametersX[ 3].Value = order.OrderItems[i].Quantity;
                    listCmdTextAndParams.Add( new OleDbCmdTextAndParams(sqlX, parametersX));
                }
                 else // 修改
                {
                     string sqlX =  @" UPDATE [OrderItem]
                                                SET [OrderID] = @OrderID,
                                                    [Product] = @Product,
                                                    [UnitPrice] = @UnitPrice,
                                                    [Quantity] = @Quantity
                                                WHERE [OrderItemID] = @OrderItemID
";
                    OleDbParameter[] parametersX = {
                         new OleDbParameter( " @OrderID ", OleDbType.Integer,  4),
                         new OleDbParameter( " @Product ", OleDbType.VarChar,  30),
                         new OleDbParameter( " @UnitPrice ", OleDbType.Decimal,  9),
                         new OleDbParameter( " @Quantity ", OleDbType.Integer,  4),
                         new OleDbParameter( " @OrderItemID ", OleDbType.Integer,  4)};
                    parametersX[ 0].Value = order.OrderItems[i].OrderID;
                    parametersX[ 1].Value = order.OrderItems[i].Product;
                    parametersX[ 2].Value = order.OrderItems[i].UnitPrice;
                    parametersX[ 3].Value = order.OrderItems[i].Quantity;
                    parametersX[ 4].Value = order.OrderItems[i].OrderItemID;
                    listCmdTextAndParams.Add( new OleDbCmdTextAndParams(sqlX, parametersX));
                }
            }
            rowsCountAffected = dbHelper.ExecuteNonQueryTrans(listCmdTextAndParams);
             return rowsCountAffected;
        }

         // 删除
         public  int Delete( int orderID)
        {
            List<OleDbCmdTextAndParams> listCmdTextAndParams =  new List<OleDbCmdTextAndParams>();

             string sql =  @" DELETE FROM [OrderItem]
                           WHERE [OrderID] = @OrderID
";
            OleDbParameter parameter =  new OleDbParameter( " @OrderID ", orderID);
            listCmdTextAndParams.Add( new OleDbCmdTextAndParams(sql, parameter));

            sql =  @"        DELETE FROM [Order]
                           WHERE [OrderID] = @OrderID 
";
            listCmdTextAndParams.Add( new OleDbCmdTextAndParams(sql, parameter));

             return dbHelper.ExecuteNonQueryTrans(listCmdTextAndParams);
        }

         // 获取实体对象列表
         public List<Order> GetList()
        {
             return GetList( nullnull);
        }

         // 获取实体对象列表
         public List<Order> GetList( string customerName)
        {
             string predicate =  "  CustomerName LIKE '%' + @CustomerName + '%' ";
            OleDbParameter parameter =  new OleDbParameter( " @CustomerName ", OleDbType.VarChar,  30);
            parameter.Value = customerName;

             return GetList(predicate, parameter);
        }

         // 获取实体对象列表
         public List<Order> GetList( string predicate,  params OleDbParameter[] parameters)
        {
            List<Order> list =  new List<Order>();

            DataTable table = GetTable(predicate, parameters);
             for ( int i =  0; i < table.Rows.Count; i++)
            {
                list.Add(RowToModel(table.Rows[i]));
            }

             return list;
        }

         // 获取单一实体对象
         public Order GetSingle( int orderID)
        {
             string predicate =  "  OrderID = @OrderID  ";
            OleDbParameter parameter =  new OleDbParameter( " @OrderID ", OleDbType.Integer,  4);
            parameter.Value = orderID;

             return GetSingle(predicate, parameter);
        }

         // 获取单一实体对象
         private Order GetSingle( string predicate,  params OleDbParameter[] parameters)
        {
            List<Order> list = GetList(predicate, parameters);
             if (list.Count ==  1)
                 return list[ 0];
             else  if (list.Count ==  0)
                 return  null;
             else
            {
                Exception ex =  new Exception( " 满足条件的实体多于1个。 ");
                 throw ex;
            }
        }

         // 获取DataTable
         private DataTable GetTable( string predicate,  params OleDbParameter[] parameters)
        {
             string sql =  @" SELECT [OrderID],
                                  [CustomerName],
                                  [CustomerPhoneNo],
                                  [CustomerAddress],
                                  [OrderTime],
                                  [OrderStateCode],
                                  [OrderState].[Name] AS [OrderState]
                            FROM [Order]
                            LEFT OUTER JOIN [OrderState]
                            ON [Order].[OrderStateCode] = [OrderState].[Code]
";
             if ( null != predicate &&  "" != predicate.Trim())
            {
                sql +=  "   WHERE   " + predicate;
            }
            sql +=  "  ORDER BY [OrderID] DESC  ";
             return dbHelper.ExecuteQuery(sql, parameters);
        }

         // 将DataRow转换为实体对象
         private Order RowToModel(DataRow row)
        {
             // ----父表----
            Order order =  new Order();
            order.OrderID = ( int)row[ " OrderID "];
            order.CustomerName = row[ " CustomerName "].ToString();
            order.CustomerPhoneNo = row[ " CustomerPhoneNo "].ToString();
            order.CustomerAddress = row[ " CustomerAddress "].ToString();
            order.OrderTime = Convert.ToDateTime(row[ " OrderTime "]);
            order.OrderStateCode = row[ " OrderStateCode "].ToString();
             // ----子表----
            OrderItemDAO orderItemDAO =  new OrderItemDAO();
            order.OrderItems = orderItemDAO.GetList(order.OrderID);

             return order;
        }
    }
}

 

OrderItemDAO.cs

 

img_405b18b4b6584ae338e0f6ecaf736533.gif View Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
// 新添命名空间
using System.Data;
using System.Data.OleDb;
using HomeShop.DbUtility;
using HomeShop.Model;
using HomeShop.DALInterface;

namespace HomeShop.DALOfAccess
{
     public  class OrderItemDAO : IOrderItemDAO
    {
         private OleDbHelper dbHelper =  new OleDbHelper();

         // 获取实体对象列表
         public List<OrderItem> GetList( int orderID)
        {
             string predicate =  "  OrderID = @OrderID  ";
            OleDbParameter parameter =  new OleDbParameter( " @OrderID ", OleDbType.Integer,  4);
            parameter.Value = orderID;

             return GetList(predicate, parameter);
        }

         // 获取实体对象列表
         private List<OrderItem> GetList( string predicate,  params OleDbParameter[] parameters)
        {
            List<OrderItem> list =  new List<OrderItem>();
            DataTable dataTable = GetTable(predicate, parameters);
             for ( int i =  0; i < dataTable.Rows.Count; i++)
            {
                list.Add(RowToModel(dataTable.Rows[i]));
            }

             return list;
        }

         // 获取DataTable
         private DataTable GetTable( string predicate,  params OleDbParameter[] parameters)
        {
             string sql =  @" SELECT [OrderItemID],
                                  [OrderID],
                                  [Product],
                                  [UnitPrice],
                                  [Quantity],
                                  [UnitPrice]*[Quantity] AS SubTotal
                           FROM [OrderItem]
";
             if ( null != predicate &&  "" != predicate.Trim())
            {
                sql +=  "   WHERE   " + predicate;
            }
             return dbHelper.ExecuteQuery(sql, parameters);
        }

         // 将DataRow转换为实体对象
         private OrderItem RowToModel(DataRow row)
        {
            OrderItem orderItem =  new OrderItem();
            orderItem.OrderID = ( int)row[ " OrderID "];
            orderItem.OrderItemID = ( int)row[ " OrderItemID "];
            orderItem.Product = row[ " Product "].ToString();
            orderItem.Quantity = ( int)row[ " Quantity "];
            orderItem.UnitPrice = ( decimal)row[ " UnitPrice "];

             return orderItem;
        }
    }
}

 

OrderStateDAO.cs

img_405b18b4b6584ae338e0f6ecaf736533.gif View Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
// 新添命名空间
using System.Data;
using System.Data.OleDb;
using HomeShop.DbUtility;
using HomeShop.Model;
using HomeShop.DALInterface;

namespace HomeShop.DALOfAccess
{
     public  class OrderStateDAO : IOrderStateDAO
    {
         private OleDbHelper dbHelper =  new OleDbHelper();

         // 获取实体对象列表
         public List<OrderState> GetList()
        {
             return GetList( nullnull);
        }

         // 获取实体对象列表
         public List<OrderState> GetList( string predicate,  params OleDbParameter[] parameters)
        {
            List<OrderState> list =  new List<OrderState>();
            DataTable dataTable = GetTable(predicate, parameters);
             for ( int i =  0; i < dataTable.Rows.Count; i++)
            {
                list.Add(RowToModel(dataTable.Rows[i]));
            }

             return list;
        }

         // 获取DataTable
         private DataTable GetTable( string predicate,  params OleDbParameter[] parameters)
        {
             string sql =  @" SELECT * FROM [OrderState] ";
             if ( null != predicate &&  "" != predicate.Trim())
            {
                sql +=  "   WHERE   " + predicate;
            }
            sql +=  "  ORDER BY [Code]  ";
             return dbHelper.ExecuteQuery(sql, parameters);
        }

         // 将DataRow转换为实体对象
         private OrderState RowToModel(DataRow row)
        {
            OrderState orderState =  new OrderState();
            orderState.Code = row[ " Code "].ToString();
            orderState.Name = row[ " Name "].ToString();
             return orderState;
        }
    }
}

 

 

源码下载:/Files/SummerRain/NetDbDevRoad/7使用ADONET实现工厂模式DB切换.rar

数据下载:/Files/SummerRain/NetDbDevRoad/HomeShopDB.rar

 

目录
相关文章
|
4月前
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:详细步骤与最佳实践指南ali01n.xinmi1009fan.com
随着Web开发技术的不断进步,ASP.NET已成为一种非常流行的Web应用程序开发框架。在ASP.NET项目中,我们经常需要与数据库进行交互,特别是SQL数据库。本文将详细介绍如何在ASP.NET项目中连接SQL数据库,并提供最佳实践指南以确保开发过程的稳定性和效率。一、准备工作在开始之前,请确保您
384 3
|
3月前
|
数据库 C# 开发者
ADO.NET连接到南大通用GBase 8s数据库
ADO.NET连接到南大通用GBase 8s数据库
|
2月前
|
SQL Java 数据库连接
JDBC编程安装———通过代码操控数据库
本文,教你从0开始学习JBCD,包括驱动包的下载安装调试设置,以及java是如何通过JBDC实现对数据库的操作,以及代码的分析,超级详细
|
3月前
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
57 1
|
3月前
|
存储 缓存 NoSQL
2款使用.NET开发的数据库系统
2款使用.NET开发的数据库系统
|
3月前
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)
|
3月前
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(下)
本文接续前文,深入讲解了在Windows环境下使用C#和ADO.NET操作南大通用GBase 8s数据库的方法。通过Visual Studio 2022创建项目,添加GBase 8s的DLL引用,并提供了详细的C#代码示例,涵盖数据库连接、表的创建与修改、数据的增删查改等操作,旨在帮助开发者提高数据库管理效率。
|
4月前
|
传感器 数据采集 物联网
探索.NET nanoFramework:为嵌入式设备编程的新途径
探索.NET nanoFramework:为嵌入式设备编程的新途
128 7
|
4月前
|
存储 NoSQL API
.NET NoSQL 嵌入式数据库 LiteDB 使用教程
.NET NoSQL 嵌入式数据库 LiteDB 使用教程~
141 0
|
2月前
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统

热门文章

最新文章