三层架构

  • 格式:pdf
  • 大小:724.00 KB
  • 文档页数:32

三层架构 ——学习 笔记:邓有权 Z.Hd 项目功能:  登录(区分学员和教员)。用MD5对密码进行加密(无法解密),然后存入数据库。防止通过数据库查看密码。  教员 对 班级管理,包括增删改查。先单层再多层。  教员 对 学员管理,包括增删改查。三层。  学员 新增、删除和查看自己的反馈信息。三层。(。)  教员 查看和回复反馈信息,可以发邮件回复。三层。(。)  教员可以导入导出数据到Excel、可以根据拼音查询学员。三层。

The First Day 2011-09-07 1.1. 三层架构简介 界面层、业务层和数据层。 1界面层UI (User Interface); 2业务逻辑层BLL(business logic layer ); 3数据访问层DAL(Data Access Layer)。 还有实体层就是Model。 对数据进行操作的代码写在DAL中,一般就是SQL语句,DAL只有对数据的操作,没有“如果金额大于20则不能删除”这样的逻辑;BLL调用DAL中的代码进行逻辑操作,比如“如果金额大于20则不能删除”。 SQL语句、ADO.Net的类一般只应该出现在DAL中。 1.2. ADO.NET(ADO:ActiveX Data Objects)  ADO.Net实际是一些类的集合。 Connection 类 ADO.Net创建的连接是直接连接sql服务的。

和数据库交互,你必须连接它。连接帮助指明数据库服务器、数据库名字、用户名、密码,和连接数据库所需要的其它参数。Connection对象会被Command对象使用,这样就能够知道是在哪个数据源上面执行命令。 与数据库交互的过程意味着你必须指明想要执行的操作。这是依靠Command对象执行的。你使用Command对象来发送SQL语句给数据库。Command对象使用Connection对象来指出与哪个数据源进行连接。你能够单独使用Command对象来直接执行命令,或者将一个Command对象的引用传递给DataAdapter,它保存了一组能够操作下面描述的一组数据的命令。 Command类 成功于数据建立连接后,就可以用Command对象来执行查询、修改、插入、删除等命令; Command对象常用的方法有ExecuteReader方法、ExecuteScalar()方法和ExecuteNonQuery()方法;插入数据可用ExecuteNonQuery()方法来执行插入命令。 DataReader类 许多数据操作要求你只是读取一串数据。DataReader对象允许你获得从Command对象的SELECT语句得到的结果。考虑性能的因素,从DataReader返回的数据都是快速的且只是“向前”的数据流。这意味着你只能按照一定的顺序从数据流中取出数据。这对于速度来说是有好处的,但是如果你需要操作数据,更好的办法是使用DataSet。 DataSet对象 DataSet对象是数据在内存中的表示形式。它包括多个DataTable对象,而DataTable包含列和行,就象一个普通的数据库中的表。你甚至能够定义表之间的关系来创建主从关系(parent-child relationships)。DataSet是在特定的场景下使用――帮助管理内存中的数据并支持对数据的断开操作的。DataSet是被所有Data Providers使用的对象,因此它并不像Data Provider一样需要特别的前缀。 DataAdapter类 某些时候你使用的数据主要是只读的,并且你很少需要将其改变至底层的数据源。同样一些情况要求在内存中缓存数据,以此来减少并不改变的数据被数据库调用的次数。DataAdapter通过断开模型来帮助你方便的完成对以上情况的处理。当在一单批次的对数据库的读写操作的持续的改变返回至数据库的时候,DataAdapter 填充(fill)DataSet对象。DataAadapter包含对连接对象以及当对数据库进行读取或者写入的时候自动的打开或者关闭连接的引用。另外,DataAdapter包含对数据的SELECT、INSERT、UPDATE和DELETE操作的Command对象引用。你将为DataSet中的每一个Table都定义DataAadapter,它将为你照顾所有与数据库的连接。所有你将做的工作是告诉DataAdapter什么时候装载或者写入到数据库。 DataTable类 DataTable 是一个数据网格控件,理解成一张表就可以了。 DataTable的实例化以及添加列: DataTable dt = new DataTable(); dt.Columns.Add("ID"); dt.Columns.Add("Name"); DataRow dr = dt.NewRow(); object[] objs = { 1, "Name" };

dr.ItemArray = objs; dt.Rows.Add(dr); this.dataGridView1.DataSource = dt;  ADO.Net包括程序端数据集和.NetFramework数据提供程序。 程序端数据集包括:DataSet/DataTable/DataRow...可以将从数据库中查询的数 据存放在程序缓存中,并提供一系列操作; .NetFramework数据提供程序包括: Connection/DataAdapter/DataReader/Command...用来直接操作数据库。  ADO.Net不直接操作数据库文件,而是通过数据库管理软件,如MSSQLSERVER、Oracle等,处理数据文件.mdf和.ldf。数据库管理软件通过sql服务实现对数据库文件的操作。  ADO.Net中的类其实是实现了规定的标准协议(接口)。Sql(Structured Query Language)语言基本适用所有数据库。微软提出odbc标准。Odbc3被W3C确定,各种数据库都实现了此接口,所以数据库软件和程序之间就可以之间通过sql语句交互,不必再使用socket二进制(Java语言还在使用odbc标准,需先下载)。而微软进一步提供了oled(接口集)。 1.3. DataTable使用 定义、使用及获取列名方法  循环DataTable的Columns集合,通过index获取每列ColumnName DataTable dt;....dt.Columns[index].ColumnName  通过DataRow点出其所属DataTable,再循环获取列名。可以用Columns.contains方法判断行中是否包含某列。 DataTable dt;...dr[i].Table.Columns[index].ColumnName dr[i].Table.Columns.Contains("列名"); 1.4. 委托-注册事件 先定义委托再赋值,编译是等同于new。

1.5. 登录窗体(主窗体选择)  判断用户名和密码是否为空 bool b=String.IsNullOrEmpty(TextBox.Text.Trim());  软删除(假删除),在表中建一标志列即可  Select * 之所以效率比较低,原因是多一步从系统表查出表的列名的操作。  窗体抖动功能?  显示窗口的两种方式: 非模态(Modaless):Show() 模态(Modal),阻塞主窗口:ShowDialog() 主窗口和对话框之间传递参数,在对话框中声明属性,主窗口给对话框传递 值通过参数赋值,对话框在OnLoad中读取参数值,对话框通过属性也返回 值给主窗口。例子:开发收集输入的对话框InputDialog。设定对话框按钮的 DialogResult属性,就可以关闭窗口(只有ShowDialog出来的界面才会这样)。 不要直接访问其他窗口的控件。  登录窗体不能作为主窗体,主窗体关闭,整个应用程序退出。解决方法:设定按钮的DialogResult,当点击按钮的时候窗口关闭,并且执行操作。设定窗口的DialogResult即可关闭窗口并且让ShowDialog方法返回设置的值。Application.Run的窗口不能作为登录界面,因为Application.Run 起来的窗口是主窗口,主窗口适合长期显示,主窗口一旦关闭程序就终止了。 正确方法如下(可以有些许改变,大同小异): 在登录窗口点击确认并通过验证时,设置DialogResult的值为DialogResult.OK,其他不用变。主要修改Main()方法,修改后代码如下: 1.6. 主窗体(MDI+单例模式) 这样在父窗体中子窗体打开个数是无限制的,改进三步走: 然后还要在父窗体修改创建子窗体实例的方法,如下。

经验: 1自定义函数尽量做到独立性强、可移植性高。自定义的函数名最好不要用拼音,用有意义的英文简写。 2判断字符串是否为空或null,用string.IsNullOrEmpty(字符串) 3方法写好后,随手加上注释,并用#region括起来,写上方法的用途、标识访问级别(+代表public;-代表private)和方法名及参数。 4假如一个变量a为null,a.IsDisposed会报错。 5 new操作实际完成了3步操作: 开辟空间 创建对象 调用构造函数 6 SqlDataReader 不能New,why? 其构造函数修饰符为internal,程序集内部可以访问。并不是没有构造函数。 7解决方案和资源文件 .sln 和 .csproj中的内容有些类似目录和简介。

The Second Day 2011-09-09 2.1. 配置文件使用 第一步:新建app。添加新建项,选择应用程序配置文件(app.config),在该文本中节点中添加节点。 第二步:添加引用。在使用该文档的项目添加引用。 还要写using System.Configuration; 第三步:获取并使用。 ConfigurationManager.ConnectionStrings["connStr"].ConnectionString; 注意: 只能写2种定义好的节点: A)connectionStrings 不可加密,可以添加多个add B)appSettings 可以加密,多用于设置多行值 2.2. using实际执行过程 using(SqlConnection) {} 执行的过程为 try { SqlConnection.open(); //dosomethings } Finally { Sqlconnection.close(); } 其实就是微软给我们提供的语法糖。 语法糖: “语法糖”这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换;而且可以提高开发编码的效率,在性能上也不会带来损失。 参考C#语法糖(Csharp Syntactic sugar)大汇总 http://www.cnblogs.com/yukaizhao/archive/2010/05/25/csharp-Syntactic-sugar.html