三层结构举例

 

参考:清华大学出版社<asp.net web应用程序设计及开发(c#版)>

1.创建数据层

   创建对客户进行操作的存储过程.存储过程是数据层的一部分,可以在业务层中访问它,以实现表示层的某个地方要执行的功能.这里不再说明把数据访问逻辑放在单独一层的优点.

   在Store数据库中创建存储过程GetCustomerByEmail,该存储过程把登录页面中输入的EMAIL作为参数,查找EMAIL地址为该参数值的客户,然后以输出参数的形式返回该客户的ID,名字,密码 ,地址,国家,电话和传真.代码如下:

create procedure GetCustomerByEmail

(

      @Email nvarchar(50) = null,

      @CustomerID int OUTPUT,

      @Name nvarchar(50) OUTPUT,

      @password nvarchar(50) OUTPUT,

      @Address nvarchar(250) OUTPUT,

      @Country nvarchar(250) OUTPUT,

      @PhoneNumber nvarchar(250) OUTPUT,

      @Fax nvarchar(250) OUTPUT

   )

AS

      SET NOCOUNT ON

SELECT 

      @CustomerID = c.CutomerID,

      @Name = c.FullName,

      @Password = c.Password,

      @Address = a.Address,

      @Country = a.Country,

      @PhoneNumber = a.PhoneNumber,

      @Fax = a.Fax

FROM Customers c,Addresses a

      WHERE c.EmailAddree = @Email

      AND a.CustomerId = c.CustomerId

   IF @@Rowcount < 1

SELECT 

      @CustomerID = 0

GO

(

      @Email nvarchar(50) = null,

      @CustomerID int OUTPUT,

      @Name nvarchar(50) OUTPUT,

      @password nvarchar(50) OUTPUT,

      @Address nvarchar(250) OUTPUT,

      @Country nvarchar(250) OUTPUT,

      @PhoneNumber nvarchar(250) OUTPUT,

      @Fax nvarchar(250) OUTPUT

   )

AS

      SET NOCOUNT ON

SELECT 

      @CustomerID = c.CutomerID,

      @Name = c.FullName,

      @Password = c.Password,

      @Address = a.Address,

      @Country = a.Country,

      @PhoneNumber = a.PhoneNumber,

      @Fax = a.Fax

FROM Customers c,Addresses a

      WHERE c.EmailAddree = @Email

      AND a.CustomerId = c.CustomerId

   IF @@Rowcount < 1

SELECT 

      @CustomerID = 0

GO



2.创建业务层

业务层是存取数据的类,该类与数据层和表示层(用户界面)交户作用,在需要时从表示层获得数据,并将数据存入数据库,也可以从数据层获得数据,并将数据发送给表示层(用户界面).

(1)在"解决方案资源管理器"中,选择解决方案下的GoShop项目,右击,再将鼠标指向"添加",然后选择"添加类"命令.

   (2)在"类别"窗口中选择"本地项目",然后在"模板"窗口中选择"代码文件".在"名称"文本框中,输入CustomerDB.

   (3)单击"打开",代码如下:

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Data.SqlClient;



namespace Goshop{



/// <summary>

/// Class1 的摘要说明

/// </summary>

public class Customer

{



   public string Name;

        public string Email;

        public string Password;

        public string Country;

        public string Addresss;

        public string PhoneNumber;

        public string Fax;

        public int CustomerID;



}

    public class CustomerDB

    {

          private string ConnectionString

          {

              get

              {

                  string strConn;

                  strConn = "Data Source =(local);";

                  strConn +="Initial Catalog = Store;";

                 return strConn ;

              }

          }

        public Customer GetCustomerByEmail(string Email)

    {

        SqlConnection myconnection = new SqlConnection(ConnectionString);

        SqlCommand mycommand = new SqlCommand("GetCustomerByEmail",myconnection);

        mycommand.CommandType = CommandType.StoredProcedure;

        SqlParameter parameterCustomerID = new SqlParameter("@CustomerID",SqlDbType.Int,4);

        parameterCustomerID.Direction = ParameterDirection.Output;

        mycommand.Parameters.Add(parameterCustomerID);

        SqlParameter parameterFullName = new SqlParameter("@Name",SqlDbType.NVarChar,50);

        parameterFullName.Direction = ParameterDirection.Output;

        mycommand.Parameters.Add(parameterFullName);

        SqlParameter parameterEmail = new SqlParameter("@Email",SqlDbType.NVarChar,50);

        parameterEmail.Value = Email;

        mycommand.Parameters.Add(parameterEmail);

        SqlParameter parameterPassword = new SqlParameter("@Password",SqlDbType.NVarChar,50);

        parameterPassword.Direction = ParameterDirection.Output;

        mycommand.Parameters.Add(parameterPassword);

        SqlParameter parameterAddress = new SqlParameter("@Address",SqlDbType.NVarChar,255);

        parameterAddress.Direction = ParameterDirection.Output;

        mycommand.Parameters.Add(parameterAddress);

        SqlParameter parameterCountry = new SqlParameter("@Country",SqlDbType.NVarChar,40);

        parameterCountry.Direction = ParameterDirection.Output;

        mycommand.Parameters.Add(parameterCountry);

        SqlParameter parameterPhoneNumber = new SqlParameter("@PhoneNuber",SqlDbType.NVarChar,30);

        parameterPhoneNumber.Direction = ParameterDirection.Output;

        mycommand.Parameters.Add(parameterPhoneNumber);

        SqlParameter parameterFax = new SqlParameter("@Fax",SqlDbType.NVarChar,30);

        parameterFax.Direction = ParameterDirection.Output;

        mycommand.Parameters.Add(parameterFax);

        myconnection.Open();

        mycommand.ExecuteNonQuery();

        myconnection.Close();

        int customerId =(int)(parameterCustomerID.Value);

        if(customerId == 0)

        {

            return null;

        }

        else

        {

            Customer myCustomer = new Customer();

            myCustomer.Name = (string)parameterFullName.Value;

            myCustomer.Password = (string)parameterPassword.Value;

            myCustomer.Email = (string)parameterEmail.Value;

            myCustomer.Addresss = (string)parameterAddress.Value;

            myCustomer.Country = (string)parameterCountry.Value;

            myCustomer.PhoneNumber = (string)parameterPhoneNumber.Value;

            myCustomer.Fax = (string)parameterFax.Value;

            myCustomer.CustomerID = customerId;

            return myCustomer;

        }

          

    }

    }

}



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值