zoukankan      html  css  js  c++  java
  • LinQ构建分层架构 Hello

    一、建立数据库

               我们建立一个数据库dbo.LayerData , 包含三个表(bookCatalog,NewBookLog,userInfo),各表详细的字段和属性如下所示:

              

    代码
    1 create database LayerData
    2  go
    3 use LayerData
    4 go
    5 /*建立userInfo表*/
    6 create table userInfo
    7 (
    8 UserID int identity(1,1) primary key,
    9 UserName varchar(30),
    10 UserSex nvarchar(1),
    11 Birthday datetime,
    12 UserEmail varchar(50),
    13 InsertTime datetime
    14 )
    15
    16 go
    17 /*建立NewBookLog表,新书日志表*/
    18 create table NewBookLog
    19 (
    20 NewBookID int identity(1,1) primary key,
    21 BookName varchar(50),
    22 BookAuthor varchar(20),
    23 InsertTime dateTime
    24 )
    25
    26 go
    27 /*建立bookCatalog表,书目列表*/
    28 create table bookCatalog
    29 (
    30 BookID int identity(1,1) primary key,
    31 BookName varchar(50),
    32 BookAuthor varchar(20),
    33 PublishTime dateTime,
    34 BookInfo nvarchar(200)
    35 )
    36
    37 go
    38 /*-----------------------------现在开始创建存储过程(Dal中的增删改查使用存储过程来执行)----------------------------------------------------------------*/
    39
    40
    41 /*-------------------------------UserInfo表的存储过程开始-------------------------------------------*/
    42 /*---通过用户ID检索用户信息---*/
    43 create procedure LP_userInfoSelect
    44 (
    45 @UserID int
    46 )
    47 as
    48 begin
    49 select * from userInfo where UserID=@UserID
    50 end
    51
    52 go
    53 /*---通过Where条件检索---*/
    54
    55 create procedure LP_userInfoSelectAll
    56 (
    57 @strWhere varchar(50)
    58 )
    59 as
    60 exec('select * from userInfo where '+ @strWhere )
    61 go
    62
    63 /*---插入语句---*/
    64 create proc LP_userInfoInsert
    65 (
    66 @UserName varchar(30),
    67 @UserSex nvarchar(1),
    68 @Birthday datetime,
    69 @UserEmail varchar(50),
    70 @InsertTime datetime
    71 )
    72 as
    73 begin
    74 insert into userInfo values(@UserName,@UserSex,@Birthday,@UserEmail,@InsertTime)
    75 end
    76
    77 go
    78 /*-------------更新用户信息(根据用户ID更新)----------*/
    79 create procedure LP_userInfoUpdate
    80 (
    81 @UserID int,
    82 @UserName varchar(30),
    83 @UserSex nvarchar(1),
    84 @Birthday datetime,
    85 @UserEmail varchar(50)
    86 )
    87 as
    88 begin
    89 update userInfo set UserName=@UserName,
    90 UserSex=@UserSex,
    91 Birthday=@Birthday,
    92 UserEmail=@UserEmail
    93 where UserID=@UserID
    94 end
    95
    96 go
    97 /*-----------删除用户信息(根据用户ID)-----------------*/
    98 create procedure LP_userInfoDelete
    99 (
    100 @UserID int
    101 )
    102 as
    103 begin
    104 delete from userInfo where UserID=@UserID
    105 end
    106 /*-------------------------------UserInfo表的存储过程结束---------------------------------------------*/
    107
    108
    109 /*-------------------------------bookCatalog表的存储过程开始-------------------------------------------*/
    110 /*--------------书目查询(ID)---------------*/
    111 create procedure LP_bookCataLogSelect
    112 (
    113 @BookID int
    114 )
    115 as
    116 begin
    117 select * from bookCataLog where BookID = @BookID
    118 end
    119
    120 go
    121 /*--------------书目查询(where)--------------------------*/
    122 create procedure LP_bookCataLogSelectAll
    123 (
    124 @strWhere varchar(50)
    125 )
    126 as
    127 begin
    128 execute('select * from bookCataLog where '+@strWhere)
    129 end
    130
    131 /*-----------------插入书目------------------------------*/
    132 go
    133 create procedure LP_bookCataLogInsert
    134 (
    135 @BookName varchar(50),
    136 @BookAuthor varchar(20),
    137 @PublishTime datetime,
    138 @BookInfo nvarchar(200)
    139 )
    140 as
    141 begin
    142 insert into bookCatalog values(@BookName,@BookAuthor,@PublishTime,@BookInfo)
    143 end
    144
    145 /*------------------------更新书目--------------------------------*/
    146 go
    147 create procedure LP_bookCataLogUpdate
    148 (
    149 @BookID int,
    150 @BookName varchar(50),
    151 @BookAuthor varchar(20),
    152 @PublishTime datetime,
    153 @BookInfo nvarchar(200)
    154 )
    155 as
    156 begin
    157 update bookCataLog set
    158 BookName=@BookName,
    159 BookAuthor=@BookAuthor,
    160 PublishTime=@PublishTime,
    161 BookInfo =@BookInfo
    162 where BookID=@BookID
    163 end
    164
    165 /*----------------------------删除指定书目---------------------------------*/
    166 go
    167 create procedure LP_bookCataLogDelete
    168 (
    169 @BookID int
    170 )
    171 as
    172 begin
    173 delete from bookCataLog where BookID=@BookID
    174 end
    175 /*-------------------------------bookCatalog表的存储过程开始-------------------------------------------*/
    176
    177
    178 /*----------------------
    179 建立一个触发器,该触发气的作用是dbo.bookCatalog添加一种书籍信息时,
    180 也向dbo.NewBookLog 插入一条信息,用以检查书籍的入库情况
    181 -----------------------*/
    182
    183 create trigger BookLog on dbo.bookCatalog
    184 after insert
    185 as
    186 begin
    187 declare @BookName varchar(50)
    188 declare @BookAuthor varchar(20)
    189 select @BookName=BookName,@BookAuthor=BookAuthor from inserted
    190 insert into NewBookLog values(@BookName,@BookAuthor,getdate())
    191 end

    二、建立一个实体类库(Model),用以映射对应的表和字段

           我们建立两个类文件bookCatalog.cs和userInfo.cs,对应数据库中bookCatalog和userInfo表,这边我们以bookCatalog为例,代码如下:

         

    代码
    1 namespace Model
    2 {
    3 [Table(Name="bookCatalog")] //(映射数据库中的bookCatalog表,使用数据上下文DataContext操作表的时候用得到,我们这边在Dal里面用存储过程映射,没使用到它,不过也顺便写一下)
    4 public class bookCatalog
    5 {
    6 //映射bookCatalog表中的BookID字段,属性描述是主键,数据库自动生成值,类型为Int
    7 [Column(IsDbGenerated = true, IsPrimaryKey = true, DbType = "Int NOT NULL IDENTITY", Name = "BookID")]
    8 public int BookID { get; set; }
    9
    10 //映射bookCatalog表中的BookName字段
    11 [Column(Name="BookName",DbType="varchar(50)")]
    12 public string BookName { get; set; }
    13
    14 //映射bookCatalog表中的BookAuthor字段
    15 [Column(Name="BookAuthor",DbType="varchar(20)")]
    16 public string BookAuthor { get; set; }
    17
    18 //映射bookCatalog表中的PublishTime字段
    19 [Column(Name="PublishTime",DbType="datetime")]
    20 public DateTime PublishTime { get; set; }
    21
    22 //映射bookCatalog表中的BookInfo字段
    23 [Column(Name="BookInfo",DbType="nvarchar(200)")]
    24 public string BookInfo { get; set; }
    25
    26
    27
    28 public bookCatalog() { }
    29 }
    30 }
    31

    三、建立数据访问层类库(Dal)

      建立一个数据访问类文件,来执行数据库操作的存储过程及处理传进来的参数,代码如下:

     

    代码
    1namespace Dal
    2{
    3 [System.Data.Linq.Mapping.DatabaseAttribute(Name = "LayerData")]//指定LinQ操作的数据库,映射数据库名LayerData
    4 public class bookCatalog:DataContext //继承System.data.Linq.DataContext类,提供LinQ to SQL框架的数据上下文的主入口点
    5 {
    6 public bookCatalog()
    7 : base(ConfigurationManager.ConnectionStrings["LinQCon"].ConnectionString)//初始化DataContext类,提供相应的数据链接
    8 {
    9
    10 }
    11
    12
    13 /// <summary>
    14 /// 根据ID 检索书籍名称
    15 /// </summary>
    16 /// <param name="bookID"></param>
    17 /// <returns></returns>
    18 [Function(Name="dbo.LP_bookCataLogSelect")]//映射名称为dbo.LP_bookCataLogSelect的存储过程
    19 public ISingleResult<Model.bookCatalog> LP_bookCataLogSelect([Parameter(Name="BookID",DbType="INT NOT NULL IDENTITY")] int bookID)//映射存储过程中的参数@BookID
    20 {
    21 IExecuteResult result = this.ExecuteMethodCall(this,((MethodInfo)(MethodInfo.GetCurrentMethod())),bookID);//执行存储过程
    22 return ((ISingleResult<Model.bookCatalog>)(result.ReturnValue));//返回类型(ISingleResult<Model.bookCatalog>,将符合条件的整行数据返回
    23 }
    24
    25
    26
    27
    28 /// <summary>
    29 /// 根据where条件检索书籍
    30 /// </summary>
    31 /// <param name="StrWhere"></param>
    32 /// <returns></returns>
    33 [Function(Name = "dbo.LP_bookCataLogSelectAll")]//映射名称为dbo.LP_bookCataLogSelectAll的存储过程
    34 public ISingleResult<Model.bookCatalog> LP_bookCataLogSelectAll([Parameter(Name = "strWhere", DbType = "varchar(50)")] string StrWhere)//映射存储过程中的参数@strWhere
    35 {
    36 IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), StrWhere);
    37 return ((ISingleResult<Model.bookCatalog>)(result.ReturnValue));
    38 }
    39
    40 /// <summary>
    41 /// 插入书目信息
    42 /// </summary>
    43 /// <param name="bookName"></param>
    44 /// <param name="bookAuthor"></param>
    45 /// <param name="publishTime"></param>
    46 /// <param name="bookInfo"></param>
    47 /// <returns></returns>
    48 [Function(Name = "dbo.LP_bookCataLogInsert")]//映射名称为dbo.LP_bookCataLogInsert的存储过程
    49 public int LP_bookCataLogInsert([Parameter(Name = "BookName", DbType = "varchar(50)")] string bookName,//映射存储过程中的参数@BookName
    50 [Parameter(Name = "BookAuthor", DbType = "varchar(20)")] string bookAuthor,//映射存储过程中的参数@BookAuthor
    51 [Parameter(Name = "PublishTime", DbType = "datetime")] DateTime publishTime, //映射存储过程中的参数@BookPublishTime
    52 [Parameter(Name = "BookInfo", DbType = "nvarchar(200)")] string bookInfo)//映射存储过程中的参数@BookInfo
    53 {
    54 IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), bookName, bookAuthor, publishTime, bookInfo);
    55 return ((int)(result.ReturnValue));//ReturnValue是数据库执行结果的返回值,在数据库中,语句执行成功时候返回 0,因此这边如果添加信息成功的话应该返回 0
    56 }
    57
    58
    59 /// <summary>
    60 /// 更新书目信息
    61 /// </summary>
    62 /// <param name="bookID"></param>
    63 /// <param name="bookName"></param>
    64 /// <param name="bookAuthor"></param>
    65 /// <param name="publishTime"></param>
    66 /// <param name="bookInfo"></param>
    67 /// <returns></returns>
    68 [Function(Name="dbo.LP_bookCataLogUpdate")]//映射名称为dbo.LP_bookCataLogUpdate的存储过程
    69 public int LP_bookCataLogUpdate([Parameter(Name="BookID",DbType="INT NOT NULL IDENTITY")] int bookID,[Parameter(Name = "BookName", DbType = "varchar(50)")] string bookName, [Parameter(Name = "BookAuthor", DbType = "varchar(20)")] string bookAuthor, [Parameter(Name = "PublishTime", DbType = "datetime")] DateTime publishTime, [Parameter(Name = "BookInfo", DbType = "nvarchar(200)")] string bookInfo)
    70 {
    71 IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), bookID, bookName, bookAuthor, publishTime, bookInfo);
    72 return ((int)(result.ReturnValue));
    73 }
    74
    75 /// <summary>
    76 /// 删除指定ID的书目
    77 /// </summary>
    78 /// <param name="bookID"></param>
    79 /// <returns></returns>
    80 [Function(Name = "dbo.LP_bookCataLogDelete")]//映射名称为dbo.LP_bookCataLogDelete的存储过程
    81 public int LP_bookCataLogDelete([Parameter(Name="BookID",DbType="INT NOT NULL IDENTITY")] int bookID)
    82 {
    83 IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), bookID);
    84 return ((int)(result.ReturnValue));
    85 }
    86 }
    87}
    88

       

     

      四、建立数据操作类库(Bll),在这个类库中,我们将各个访问接口细腻化,使表示层的操作更方便,代码如下:

           

           

    代码
    1namespace Bll
    2{
    3 public class bookCatalog
    4 {
    5 Dal.bookCatalog dal = new Dal.bookCatalog();
    6
    7 //根据ID查询一条书目
    8 public Model.bookCatalog SelectRow(int id)//因为只有一条数据,我们用实体类Model.bookCatalog来接受
    9 {
    10 ISingleResult<Model.bookCatalog> result = dal.LP_bookCataLogSelect(id);
    11 return result.First();//只有一条数据,所以我们获取集合中的第一条数据,把它返回给实体类
    12
    13 }
    14
    15 //根据where子句查询书目
    16 public ISingleResult<Model.bookCatalog> SelectAllRow(string strWhere)//返回实体类集合
    17 {
    18 ISingleResult<Model.bookCatalog> result = dal.LP_bookCataLogSelectAll(strWhere);
    19 return result;
    20 }
    21
    22 //插入一条数据
    23 public bool InsertRow(Model.bookCatalog model)
    24 {
    25 int i = dal.LP_bookCataLogInsert(model.BookName,model.BookAuthor,model.PublishTime,model.BookInfo);
    26 if (i == 0) return true;
    27 return false;
    28 }
    29
    30 //更新一条数据
    31 public bool UpdateRow(Model.bookCatalog model)
    32 {
    33 int i = dal.LP_bookCataLogUpdate(model.BookID,model.BookName,model.BookAuthor,model.PublishTime,model.BookInfo);
    34 if (i == 0) return true;
    35 return false;
    36 }
    37
    38 //删除一条数据
    39 public bool DeleteRow(int id)
    40 {
    41 int i = dal.LP_bookCataLogDelete(id);
    42 if (i == 0) return true;
    43 return false;
    44 }
    45 }
    46}
    47

    五、现在我们来看前台表示层(UI),因为都封装好了,代码很简单,下面是查询指定条件下的书目信息的代码

    代码
    1 public partial class operate : System.Web.UI.Page
    2 {
    3 Bll.bookCatalog bll = new Bll.bookCatalog();
    4 StringBuilder str = new StringBuilder();
    5
    6 protected void Page_Load(object sender, EventArgs e)
    7 {
    8 if (!IsPostBack)
    9 {
    10 }
    11 }
    12
    13 //查询所有的书目信息并显示
    14 public string InitData()
    15 {
    16 var rows= bll.SelectAllRow("1=1");
    //这边使用匿名类型,也可以写成
    //ISingleResult<Model.bookCatalog> result = bll.SelectAllRow("1=1");
    //foreach(Model.bookCatalog r in result)
    17 foreach (var row in rows)
    18 {
    19 str.Append("<li id="+row.BookID+">");
    20 str.Append("<a href='BookDetail.aspx?id="+row.BookID+"'>"+row.BookName+"("+row.BookAuthor+")</a>");
    21 str.Append("<span class='Add'></span><span class='Edit'></span><span class='Del'></span>");
    22 str.Append("</li>");
    23 }
    24 return str.ToString();
    25 }
    26 }

    执行结果:

    书目信息列表显示,数据库中的bookCatalog表中包含三条数据,所以这边显示三条,点击跳转到详细信息页面,右边三个图标代表删除,修改,增加

    源码下载(https://files.cnblogs.com/wzh2010/LinQLayer.rar

  • 相关阅读:
    Python之路【第十六篇】:Django【基础篇】
    pyCharm最新2018激活码
    python selenium firefox使用
    IO编程(2)-操作文件和目录
    IO编程(1)-文件读写
    错误、调试和测试(4)-文档测试
    错误、调试和测试(3)-单元测试
    错误、调试和测试(2)-调试
    错误、调试和测试(1)-错误处理
    面向对象高级编程(5)-使用元类
  • 原文地址:https://www.cnblogs.com/wzh2010/p/1881203.html
Copyright © 2011-2022 走看看