1、C#三层架构

C#三层架构急表示层(UI,User Interface),业务逻辑层(BLL BusinessLogicLayer),数据访问层(DAL Data Access Layer)。三层的划分是物理上的划分。表示层(UI),这个最容易理解,就是用户看到的主界面。数据访问层(DAL),也不难理解,主要是负责数据的增删改查。业务逻辑层(BLL),算是表示层和数据访问层的桥梁吧。区分层次的目的即为了“高内聚,低耦合”的思想。

2.数据库基本操作

2.1 创建数据库

CREATE  DATABASE  database_name  ON PRIMARY ( 
 NAME= , 
 FILENAME= ‘ ’ 
 SIZE=, 
 MAXSIZE=,  
FILEGROWTH= )

2.2 创建数据表

create table table_name   (    
学号 int primary key identity ,    
名称 char() not null,    
专业方向 varchar() not null,    
系部代码 char() not null,    
备注 varchar()   ) 

2.3 数据添加

INSERT [into] table_name (column_list) VALUES(data_values)

2.4 数据修改(更新)

UPDATE table_name SET  column_name=值 where[search_conditions] 

2.5 删除数据

DELETE table_name WHERE [search_conditions] 

2.6查找数据表

、输出表中的所有列     SELECT*FROM table_name  
、输出表中部分列 SELECT A,B,C FROM table_name
、选择表中的若干记录 SELECT DISTINCT 列名 FROM table_name  
、限制返回行数 SELECT TOP n  FROM table_name 
. 完整的select 语句的基本语法格式  虽然select 语句的完整语法较复杂,但是其主要的语法格式可归纳如下:  
SELECT select_list [into new_table_name]  FROM table_list 
[WHERE search_conditions] 
[GROUP BY group_by_expression] [HAVING search_condition] 
[ORDER BY  order_expression [asc|desc] ]

2.7 修改表结构

修改表结构 重命名表:  exec sp_rename 'old_table_name','new_table_name‘ 
重命名列: exec sp_rename 'table_name.old_name','new_name','column‘ 
添加新列: alter table [table_name] add [new_column] varchar() 
更改列的数据类型:  alter table [table_name]  alter column [column_name] [data_type]  
删除列:  alter table [table_name] drop column [column_name] 
删除表: drop table table_name 
删除表的所有数据: Truncate table [table_name] 
创建主键约束: alter table [table_name] 
   add constraint pk 
   primary key clustered (列名)   
创建外建约束  alter table [table_name] 
   add constraint wz   
foreign key (列名)   
references 表名(列名

 3.数据库中的三范式

1、第一范式(1NF)

在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。例如,对于图3-2 中的员工信息表,不能将员工信息都放在一列中显示,也不能将其中的两列或多列在一列中显示;员工信息表的每一行只表示一个员工的信息,一个员工的信息在表中只出现一次。简而言之,第一范式就是无重复的列。

2、第二范式(2NF)

第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。如图3-2 员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是唯一的,因此每个员工可以被唯一区分。这个唯一属性列被称为主关键字或主键、主码。

第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是非主属性非部分依赖于主关键字。

3、第三范式(3NF)

满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在图3-2的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。

4. C#中的委托

4.1  委托的申明

 public delegate void MyDelegate(string str);    //str参数为方法名,

4.2 委托的使用

MyDelegate d1 = new MyDelegate(C.M1);           //如果M1非静态则需要使用  MyDelegate d1 = new MyDelegate(new C().M1);
d1("参数1"); // 参数1表示C.M1的函数使用的参数
public static void M1(string str)               //静态属于类而不属于对象,
{
Console.WriteLine("From:C.M1: ", str);
}

注意:委托申明时(void 和 string类型,委托的申明与需要委托的函数有关)

4.3 委托的特性

MyDelegate d5 = d1 + d2;          //组合特性
MyDelegate d6 = d5 - d3; //删除特性

5. 事件

5.1 定义事件类

public class TestEventArgs : EventArgs          //集成事件EventArgs
{
public readonly char KeyToRaiseEvent;
public TestEventArgs(char keyToRaiseEvent)
{
KeyToRaiseEvent = keyToRaiseEvent;
}
}

5.2 声明事件委托和事件对象

public delegate void TestEventHandler(object sender, TestEventArgs e);     //定义delegate
public event TestEventHandler TestEvent; //用event 关键字声明事件对象

5.3 事件触发方法

protected  void OnTestEvent(TestEventArgs e)       //为什么是虚函数
{
if (TestEvent != null)
TestEven t(this, e);
}

5.4 事件引用方法

 public void RaiseEvent(char keyToRaiseEvent)
{
TestEventArgs e = new TestEventArgs(keyToRaiseEvent);
OnTestEvent(e);
}

5.5 监听事件类

 public class TestEventListener
{
//定义处理事件的方法,他与声明事件的delegate具有相同的参数和返回值类型
public void KeyPressed(object sender, TestEventSource.TestEventArgs e)
{
Console.WriteLine("发送者:{0},所按得健为:{1}", sender, e.KeyToRaiseEvent);
}
//订阅事件
public void Subscribe(TestEventSource evenSource)
{
evenSource.TestEvent += new TestEventSource.TestEventHandler(KeyPressed);
}
//取消订阅事件
public void UnSubscribe(TestEventSource evenSource)
{
evenSource.TestEvent -= new TestEventSource.TestEventHandler(KeyPressed);
}
}

5.6 测试事件类

public class Test
{
public static void Main()
{
//创建事件源对象
TestEventSource es = new TestEventSource();
//创建监听对象
TestEventListener el = new TestEventListener();
//订阅事件
Console.WriteLine("订阅事件\n");
el.Subscribe(es);
//引发事件
Console.WriteLine("输入一个字符,再按enter键");
string s = Console.ReadLine();
es.RaiseEvent(s.ToCharArray()[]);
//取消订阅事件
Console.WriteLine("\n取消订阅事件\n");
el.UnSubscribe(es); //引发事件
Console.WriteLine("输入一个字符,再按enter健");
s = Console.ReadLine();
es.RaiseEvent(s.ToCharArray()[]);
}
}

C#面试基础知识2的更多相关文章

  1. 快速掌握JavaScript面试基础知识(三)

    译者按: 总结了大量JavaScript基本知识点,很有用! 原文: The Definitive JavaScript Handbook for your next developer interv ...

  2. 快速掌握JavaScript面试基础知识(二)

    译者按: 总结了大量JavaScript基本知识点,很有用! 原文: The Definitive JavaScript Handbook for your next developer interv ...

  3. 面试基础知识集合(python、计算机网络、操作系统、数据结构、数据库等杂记)

    python python _.__.__xx__之间的差别 python中range.xrange和randrange的区别 python中 =.copy.deepcopy的差别 python 继承 ...

  4. Unity游戏开发面试基础知识

    面试第一次知识总结: 一.Unity基本操作 1.unity提供哪几种光源? 点光源.平行光.聚光灯.区域光. 2.物体发生碰撞的必要条件什么? 两个物体必须有碰撞体Collider组件,一个物体上必 ...

  5. C语言面试基础知识整理

    一.预处理 1.什么是预编译?何时需要预编译? (1)预编译又称预处理,是做些代码文本的替换工作,即程序执行前的一些预处理工作.主要处理#开头的指令,如拷贝#include包含的文件代码.替换#def ...

  6. lua面试基础知识

    1.lua中八种基础类型:nil(空),boolean(布尔),number(数字),string(字符串),userdata(自定义类型),function(函数),thread(线程),table ...

  7. Python 必备面试基础知识-3

    今天继续分享 Python 相关的面试题,你准备好了嘛! 网络编程篇 1. 简述 OSI 七层协议 是网络传输协议,人为的把网络传输的不同阶段划分成不同的层次. 七层划分为:应用层.表示层.会话层.传 ...

  8. .NET面试基础知识

    1.    什么是Asp.Net? 答:Asp.Net是一种基于.NET平台下的动态web开发技术,它使用的是codebehind(代码后置技术),可以将前台呈现和后台代码进行有效的分离.   2.  ...

  9. C++面试基础知识

    C++经典面试题(最全,面中率最高 1.new.delete.malloc.free关系 delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数.malloc与free ...

随机推荐

  1. csu-2018年11月月赛Round2-div1题解

    csu-2018年11月月赛Round2-div1题解 A(2191):Wells的积木游戏 Description Wells有一堆N个积木,标号1~N,每个标号只出现一次 由于Wells是手残党, ...

  2. SDRAM学习(二)之初始化

    目录 1.SDRAM初始化的内容(结合英文数据手册) 2.SDRAM初始化的时序 3.代码的编写 4.modesim的仿真 SDRAM初始化的内容 SDRAMs must be powered up ...

  3. 【bzoj2127】happiness 网络流最小割

    题目描述 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科与理科有着自己的喜悦值,而一对好朋友如果能同时选文 ...

  4. CSU 1809 Parenthesis(RMQ-ST+思考)

    1809: Parenthesis Submit Description Bobo has a balanced parenthesis sequence P=p1 p2…pn of length n ...

  5. 洛谷P2056 采花

    P2056 采花 52通过 99提交 题目提供者shengmingkexue 标签云端↑ 难度省选/NOI- 时空限制1s / 128MB 提交  讨论  题解 最新讨论更多讨论 求助莫队为什么被卡 ...

  6. webstorm不能使用stylus

    1.https://stackoverflow.com/questions/23583514/webstorm-8-showing-errors-for-a-correct-html-tag 2. & ...

  7. vue-cli打包之后页面为空的问题。

    做了一个demo,想看一下打包之后的样子,发现页面是空的. 发现问题就要解决: 1.首先看控制台没有报任何错误,那就证明我们的代码是没有任何问题的. 只能是路径问题造成的. 2.在路由router/i ...

  8. pat 团体天梯赛 L2-011. 玩转二叉树

    L2-011. 玩转二叉树 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜 ...

  9. 洛谷 [P3388] 割点模版

    tarjan 求无向图的割点 割点,即割去此点后原图可变为两个或多个独立的联通块 一个点 x 是割点,当且仅当存在一个x 的子节点 y ,使得 low[y] >= dfn[x] 对于根节点来说, ...

  10. 用正则表达式把页面中的px全部替换成rem

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...