******第一季C#编程基础******
******第二季C#面向对象基础********
******第四季SQL数据库******
******第五季ADO.Net******
******第六季HTML******
******第七季JavaScript******
**** 第八季Dom ****
***** 第九季Jquery *****
***** 第十季Asp.Net基础*****
***** 第十一季Asp.Net中级******
**** 第十二季Asp.Net高级*****
*****第十三季AJAX******

/* **************************************第一季C#编程基础***************************************** */
第一课: 1. Console.ReadKey(); //按一个按键继续执行
2.string s = Console.ReadLine(); // 用户输入文字的时候程序是暂停的,用户输入完毕点回车后,把用户输入的东西作为返回值,声明一个string类型变量(容器)s,用s来放WriteLine函数返回的值。
3.Console.WriteLine(s+”你好”);
4.Console.WriteLine(i1+”+”i2+”=”+(i1+i2));
5.多行注释 /* 发撒反对 */
6.用占位符: Console.WriteLine(“{0}+{1}={2}”,i1,i2,i1+i2);
Console.WriteLine(“{0}+{1}={3}”,i1,i2,i1+i2,”aaa”); 【把占位符掌握】
//string.Format() 【WriteLine内部,就是调用string.Format()来实现的】
7.大小写敏感的
8.用转义字符打印出”ab” string s =”\”ab\””; ()

9.赋值号左边必须是变量、属性或索引器;
10.C#中赋值表达式也有值,它的值表示为赋值后变量的值。
11. 类型转换:Convert.ToInt32() 等;
12. 从文本文件读取数据,返回值为string数组,每个元素一行。:参考使用:string[] lines = System.IO.File.ReadAllLines(@”c:\root.ini”,Encoding.Default);

13.// String s = @”\\\\”; //@表示字符串中的\不当成转义符。

————————————————————————————–

一.string类常用函数
1.ToLower();
2.ToUpper(); Trim(); 去掉字符串两边的空白!

二.out一般用在函数有多个返回值的场所。
int.TryParse

 

 

/* **************************************第二季C#面向对象基础***************************************** */
1. 类,对象,字段,继承。 面向对象的三个特性:封装、继承、多态。
2.//public字段和属性的区别,属性可以进行非法值的判断。

3.Object是所有类的基类。 所有类都继承Object

4.异常与异常处理

5.静态类一般用来实现一些函数库。 ***Helper, SqlHelper,PageHelper。

6函数的ref、out参数(*):
①. ref必须先初始化,因为是引用,所以必须先“有”,才能引用,而out则是内部为外部赋值,所以不需要初始化,而且外部初始化也没用。
②.ref应用场景内部对外部的值进行改变,out则是内部为外部变量赋值,out一般用在函数有多个返回值的场所。

7. Application.Exit(); // 应用程序退出!

 

 

/* **************************************第四季SQL数据库***************************************** */
1. 为什么要用数据库来存储文件? (用自定义文件格式保存数据的优劣)
自己拿文件写数据 麻烦, 稍微有一点处理不好,运行不起来。 如果数据量非常大的话,从其中查数据非常慢,如果想提高查找速度,这样就对于数据结构和算法的要求非常非常高;而且最重要的问题: 并发性非常差, 并发会有不可预知的错误! 所以要用数据库来存放文件!

2.不同品牌的DBMS有自己的不同的特点:
MYSQL(速度快,但抛弃了很多非常严格的数据控制!多用于小型网站项目!)、MSSQLServer(和.Net配合的非常好!)、DB2、Oracle(DB2,Oracle属于比较大的数据库,处理安全性,速度,并发量非常大的情况!)、Acess(能当文件来用)、Sybase等。对于开发人员来讲,大同小异。

3.除了Acess、SQLServerCE等文件型数据库之外,大部分数据库都需要数据库服务器才能运行。学习、开发时是连接本机的数据库,上线运行时,数据库运行在单独的服务器中。

4.业务主键和逻辑主键(PrimaryKey) 逻辑主键是使用没有任何意义的字段做主键,完全给程序看的,业务人员不会看的数据。 推荐使用逻辑主键!

5.表间关联、外键(ForeignKey)

6.SQL语句 在很多数据库管理系统中都认!

7.Guid算法, 业界主流用Guid。

8.注意中文:比如: N \’jerry\’

———————————————————————————————————————————————————————–

一。SQL语句入门: 1. Create Table T_Person(Id int NOT NULL,Name nvarchar(50),Age int Null)
2.Drop table T_Person1
3.Insert into T_Person(Id,Name,Age) Values(1,‘Jim’,20)
4.Select
———————————————————————————————————-
二。主键选择: 1. SQL Server 中两种常用的主键数据类型:int(或bigint)+标识列(又称自动增长字段);uniqueidentifier(又称Guid、UUID)
2. Guid算法是一种可以产生唯一标识的高效算法,SQLServer中生成Guid的函数newid(), .Net中生成Guid的方法:Guid.NewGuid(),返回是Guid类型。 业界主流倾向于使用Guid。
———————————————————————————————————-
三。数据插入: 1.可以给字段的默认值,如果Guid类型主键的默认值设定为newid()就会自动生成,很少这么干
2.主键:insert into Person3(Name,Age) values(\’lily\’,38);insert into Person4(Id,Name,Age) values(newid(),\’tom\’,30);
———————————————————————————————————-

四。数据更新 更新一个列:Update T_Person Set Age=30
更新多个列:Update T_Person Set Age=30,Name=‘tom’
更新一部分数据:Update T_Person Set Age=30 where Name=\’tom\’,用where语句表示只更新Name是‘tom’的行,注意SQL中等于判断用单个=,而不是==。

where中还可以使用复杂的逻辑判断Update T_Person Set Age=30 where Name=\’tom\’ or Age<25, or相当于C#中的|| (或者)

where中可以使用的其他逻辑运算符:or、and、not、<、>、>=、<=、!=(或<>)等

———————————————————————————————————-
五。数据删除 删除表中全部数据:Delete From T_Person。
Delete只是删除数据,表还在,和Drop Table不同。
Detele 也可以带where子句来删除一部分数据:Delete From T_Person where where FAge>20

———————————————————————————————————-
六。数据检索 简单的数据检索:Select * From T_Employee
只检索需要的列:Select FNumber From T_Employee、Select FName,FAge From T_Employee
列别名: Select FNumber AS 编号,FName AS 姓名,FAge AS Age111 From T_Employee
使用where检索符合条件的数据:Select FName From T_Employee Where FSalary<5000。 故事:新员工的数据检索噩梦。
还可以检索不与任何表关联的数据:select 1+1;select newid();select getdate();

———————————————————————————————————-
七。数据汇总

———————————————————————————————————-
八。数据排序 Order by 子句位于Select语句的末尾,它允许指定按照一个列或者多个列进行排序,还可以指定排序方式是升序(从小到大排列,ASC)还是降序(从大到小排列,DESC)。
按照年龄升序排序所有员工信息的列表:Select * from T_Employee order by FSalary ASC(或者DESC);
Select * from T_Employee order by FAge DESC,FSalary DESC;
按照年龄升序排序所有员工信息的列表:select * from T_Employee order by FAge ASC;
按照年龄从大到小排序,如果年龄相同则按照工资从大到小排序:Select * from T_Employee order by FAge DESC,FSalary DESE;
Order by 子句要放到where 子句之后:select * from T_Employee where FAge>23 order by FAge DESC,FSalary DESC;
——————————————————————————————————————–
九。数据分组
Group by having 聚合函数

——————————————————————————————————————–
十。限制结果集的行数
select top 3 * from T_Employee order by FSalary DESC
——————————————————————————————————————–
十一。类型转换函数
select cast(\’123\’ as int),cast(\’2008-08-08\’ as datetime),convert(datetime,\’2009-09-09\’),convert(varchar(50),123) [写存储过程时,经常要用到的!]

——————————————————————————————————————–
十二。空值处理函数
select ISNULL(FName,‘佚名’) as 姓名 from T_Employee

——————————————————————————————————————–
十三。CASE函数用法1
单值判断,相当于Switch case

——————————————————————————————————————–
十四。 索引 index
即使创建了索引,仍然有可能全表扫描,比如like、模糊匹配、函数、类型转换等。

——————————————————————————————————————–
十五。 表连接 Join

 

/* **************************************第五季ADO.Net***************************************** */

1.在ASP.net程序中只要将mdf文件放到项目的App_Data文件夹即可,在连接字符串中使用
SqlConnection conn = new SqlConnection(@”Data Source=.\;AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True”);
做连接字符串即可。
Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Test.mdf;Integrated Security=True;User Instance=True

2.有一个比较很直接的想法,就是让程序去连接项目中的mdf文件,而不是连接bin/Debug下那个。
经过查询资料找到了修改方法,在Program.cs文件Main函数最开始加入如下代码:
string dataDir = AppDomain.CurrentDomain.BaseDirectory;
if (dataDir.EndsWith(@”\bin\Debug\”)
|| dataDir.EndsWith(@”\bin\Release\”))
{
dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
AppDomain.CurrentDomain.SetData(“DataDirectory”, dataDir);
}

3.为什么用using。 Close:关闭以后还能打开。 Dispose:直接销毁,不能再次使用。using在出了作用域以后调用Dispose,SqlConnection、FileStream等的Dispose内部都会做这样的判断:判断有没有close,如果没有Close,如果没有Close就先Close再Dispose。

4.SQL注入漏洞攻击: 2\’ or \’1\’ = \’1 用参数化查询 来避免SQL注入攻击 cmd.CommandText = “select count(*) from T_Users where UserName=@UN and Password=@P”;
cmd.Parameters.Add(new SqlParameter(“UN”,username));
cmd.Parameters.Add(new SqlParameter(“P”,password ));

5.//创建连接是非常耗时的,因此不要每次操作都创建连接。 //!!!!!!参数不能重复添加,在while中一直用的就是一个SqlCommand对象!

6. string connStr = ConfigurationManager.ConnectionStrings[“ConnStr”].ConnectionString; // 从配置文件中读连接字符串
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = “”;
}
}

7.DRY原则 (don\’t repeat yourself) 尝试封装代码!

8.cmd.CommandText = “select * from city where proID=@proID”;
cmd.Parameters.Add(new SqlParameter(“proID”,proID)); //参数化查询!

9.DataSet是占内存, 小数据的量,可以往DataSet里面放! DataTable中不能放太多数据,否则会把内存压爆的!

10.对于数据库来说,连接是非常宝贵的资源,一定要用完了就close 或者dispose。

———————————————————————————————————————————————
// 可空数据类型 int? i

// 弱类型 DataSet //强类型DataSet 数据集

一些问题: 1.看mdf中数据没有改变,把那段神奇的代码放到Main中。
2.登陆错误三次被锁定的问题,输入对了也不让登陆,这是错误吗? 就应该如此,防止暴力破解。
3.执行UpdateQuery以后本地DataSet并没有更新。
————————————————————————————
类型化DataSet易错点: adapter.IncErrorTimesById(user.Id);
//和上次一样IncErrorTimesById是直接修改数据库,没有修改本地DataSet中的数据,所以仍然没有变。可以重新GetData重新获取数据。
———————————————————————————–

类型化DataSet原理之Connection: 可以手动打开数据库连接, 可以进行一系列批量操作!
————————————————————————————
类型化DataSet之批量操作:
adapter.Connection.Open(); //执行批量操作之前先打开连接
for (int i = 0; i < 3000; i++)
{
adapter.Insert(i.ToString(), i.ToString(), 0);
}
adapter.Connection.Close(); //批量操作完成后关闭连接

 

/* **************************************第六季HTML***************************************** */

<font color=”red”>hello</font>

Acid测试
W3C标准

IETester
维基百科离线版
Trident,WebKit

动态页面:服务器动态生成的HTML页面发给浏览器。

HTML中有一些标签可以不关闭,这是和XML不同的地方,但是为了遵循XHTML规范,推荐像XML一样严格关闭。 <br/> <img src=”1.gif”/>

注释:HTML使用和XML一样的 <!–注释内容–> 来做注释。
特殊字符: &lt;(小于号,less than);&gt:(大于号,greater than);&nbsp;(空格,no-break space)。 使用工具、免除记忆!

“&nbsp;”表示空格。
为什么<>要用&lt;&gt;代替? 就是因为<>有特殊含义:标签的定义。

<a>的target属性设定为”_blank”就可以在新窗口中打开超链接。 国内的网站很多都是默认在新窗口中打开的。

select分组选项,可以使用optgroup对数据进行分组,分组本身不会被选择,无论对于下拉列表还是列表框都适用。

伪选择器:
A:visited{TEXT-DECORATION:none}
A:active{TEXT-DECORATION:none}
A:link{text-decoration:none}
A:hover{text-decoration:underline}

 

/* **************************************第七季JavaScript***************************************** */

1.事件: 只有超链接的href中的JavaScript中才需要加“JavaScript:”,因为它不是事件,而是把“JavaScript:”看成像“http:”、“ftp:”、“thunder://”、“ed2k://”、“mailto:”一样的网络协议,交由js解析引擎处理。只有href中这是一个特例。

2.JS的变量:①JavaScript中既可以使用双引号声明字符串,也可以使用单引号声明字符串。主要是为了方便和html集成,避免转义符的麻烦。
② JavaScript中有null、undefined两种,null表示变量的值为空,undefined则表示变量还没有指向任何的对象,未初始化。两者的区别 有参考资料。
var i = 10; //声明一个变量,名字为i,指向10这个整数,一旦指向10,i就是int类型了。

3.<a href=”javascript:alert(\’hello\’)”>点点</a>
<a href=”1.htm” onclick=”alert(\’hello2\’)”>点点</a>
<input type=”button” value=”点” onclick=”alert(\’点我了\’)” />

4. Array: 数组用法其实是dictionary用法的一个特例而已

 

/* ************************************** 第八季Dom ***************************************** */

SetAttribute

ime-mode 只有IE支持,其他浏览器不支持

不同浏览器的差异:appendChild,insertCell,px
JQuery之类的框架进行了封装,将不同浏览器的差异帮开发人员处理了,开发人员只要调用JQuery的方法,JQuery的会帮助在不同浏览器中进行翻译。用JQuery就可以解决不同浏览器上Dom的不同。对于CSS的不同是美工的事。IETester、FF、Chrome。

WSDL、SOAP

trouble shooting 能力: 善用调试, 添加监视,快速监视

 

/* ******************************************************* 第九季Jquery ***************************************** */

1. JQuery的优点:尺寸小、使用简单方便(Write Less,Do More。链式编程($(“#div1”).draggble().show().hide().fly()))、隐式迭代)、屏蔽浏览器差异跨浏览器兼容性好(IE6.0+,FF 2+,Safari 3.0+,Opera 9.0+,Chrome)、插件丰富、开源、免费

2.简单的JQuery的 ready 是注册事件的函数,和普通的dom不一样,不需要在元素上标记on**这样的事件。 和onload类似,但是onload只能注册一次

3.注意选择器表达式中的空格不能多不能少。易错!

4.可以做无刷新分页

5.如果想获得事件相关信息,只要给响应的匿名函数增加一个参数:e,e就是事件对象。 e.stopPropagation();

6.网页分析工具: IE8 内置了, IE6/7需要安装Internet Explorer Developer Toolbar

/* ************************************************** 第十季Asp.Net基础*********************************** */

1.提交到服务器的表单元素一定要设定name属性。(id是给Dom用的,name是给服务器用的)

2.get是通过url传递表单值,post通过url看不到表单域的值;get传递的数据量是有限的,如果要传递大数据量不能用get,post则没有这个限制:post会有浏览器提示重新提交表单的问题,get则没有。

3.ViewState初探(重点,常考),回答ViewState原理的时候:说Input版本(TextBox)自增和Div版本(Label)的不同。(完美!!!) Label版本的值存到了ViewState中,TextBox版本的不用存,因为TextBox就是Input,自己就会提交给服务器,不需要隐藏字段。

4.互联网优化的案例:1.图片服务器的域名和网站主服务器的域名不一样,降低Cookie的流量传输.

5.Session原理:在Cookie中存放sessionId,通过取到sessionid,传入服务端内存中,取得dictionary键值对中的值。 所以session是跨页面的! 不要放太多的对象到Session,Session会有超时销毁的机制。

6。有一个网页分析工具,叫httpwatch

7.web开发原则:1.最小权限原则。2.能在浏览器端完成的事情,就不要到服务端去做。

8. 127.0.0.1是回环地址(LoopBack),就是表示通过回环地址访问本机,哪怕是本机外网地址也访问不了。localhost就是127.0.0.1的别名,是无法在外部访问的。
0.0.0.0 任意IP(Any IP),不用写死绑定的IP了,通过任何一块网卡都可以访问网络程序。

9.ASP.net 小型服务器的开源版本: CassiniDev

10.客户端校验是为了很好的客户端体验,服务器端校验是最后一次把关,防止恶意请求。 ASP.Net Validation就是ASP.Net内置的数据校验技术,会在客户端和服务器端同时校验。

11.<asp:Button来讲,onclick是服务端事件,OnClientClick是最终生成到客户端浏览器中的onclick代码。

12.HypeLink1.Visible = false是根本不输出到客户端。 || 应该是在机密页面打开之前做权限校验,而不是在一个页面中做校验,如果正确就导向机密页面,不正确就不导向。

13.HttpUtility.HtmlEncode就可以将字符串中的<、/等特殊字符转换为HTML显示的字符。

 

 

/* ************************************************** 第十一季Asp.Net中级*********************************** */

1.如果直接访问图片UrlReferrer就是null,如果是嵌入到别的网页中的请求。 UrlReferrer就是页面的地址。

2.Response.Redirect和Server.Transfer区别 (想象,呼叫中心坐席告诉客户一个号码和帮客户转换的区别。)

3.HttpUtility和HttpContext

4.Web原则:能直接将生成的内容以流的形式输出给浏览器,就不要生成临时文件。

5.application/octet-stream

6.mdf建在App_Data下

7.NPOI

8.IsNULL(ErrorTimes,0)

9.aspx最终也会生成一个类,这个类是继承自aspx.cs中的类。查看反编译以后的代码,可以看到就是编译生成了普通的.Net代码。因为aspx生成的代码是aspx.cs类的子类,所以就明白了为什么“aspx中调用cs的成员级别必须是protected或者public,不能是private的。”

10.不要在控件的属性中写<%%>。 用JavaScript和jquery

11. HTML控件:<img src=”images/坐时光机,杀死从前的自己.gif” width=”100″ height=”100″ />
runat=server的HTML控件<img src=”~/baodiao/images/坐时光机,杀死从前的自己.gif” width=”100″ height=”100″ runat=”server”/>
服务端控件:<asp:Image ID=”Image1″ runat=”server”
ImageUrl=”~/baodiao/images/坐时光机,杀死从前的自己.gif” />

12.BulletedList2.DataSource = new int[] { 3,5,6,8,9};//一般实现IEnumerable接口的数据都可以设置
BulletedList2.DataBind(); 【ASP.NET 2.0中还用这种老方法的】

 

 

/* ************************************************** 第十二季Asp.Net高级*********************************** */

 

1.更改数据库的数据后,要强制刷新数据才能在页面显示:Repeater1.DataBind(); //强制刷新数据

3.ListView 生成模板后,要做以下修改:①:生成的样式要提到style中,不要内联。 ②:ItemTemplate里面一般也没必要用<asp:Label展示只读数据,所以直接输出<%# Eval(“Name”)%> ③:LayoutTemplate中必须有一个id为itemPlaceholder的服务端控件,之上为头,之下为尾。 ④:LayoutTemplate表头内容要汉化,所有Template中的不需显示的字段,比如Id,都要删掉。

4. ListView:操作: ①判断数据行的类型e.Item.ItemType == ListViewItemType.DataItem ②取得行对应的DataRowView; 【当e.Item.DataItem在vs2008里取不到的时候】用{ ListViewDataItem lvDataItem = (ListViewDataItem)e.Item; DataRowView rowView = (DataRowView)lvDataItem.DataItem; } ③ 在FindControl的时候注意AlternatingItemTemplate的问题。

5.ObjectDataSource绑定Id为Guid类型的表的时候会生成一个” DataObjectTypeName=”System.Guid” “,有问题,删掉就行。

6.高效率分页:select * from
(SELECT Id, Name, Age,Gender,IsVIP,Row_Number() over(Order by Id) rownum
FROM dbo.T_Users
where Id>3) t
where t.rownum>@startRowIndex and t.rownum<=@startRowIndex+@maximumRows

7.JQueryUI的js 在JQuery之后引入

8.if(Request.UserHostAddress==”211.8.8.8″) //可以只允许这个特定IP地址的人上传

9..Net4.0有一个Bug:(配合ListView)取控件的客户端ID的时候,PriceTextBox.ClientID,渲染到客户端的代码中时,ID值没有ListView1_ 这个前缀。 解决方法1:加ListView1_前缀。 解决方法2:给控件增加额外属性myid,用JQuery通过myid找到该控件,然后对其操作。

10.DropDownList绑定的时候,绑定SelectedValue就可以,当发现不能绑定的时候再写代码。

11.用户控件的好处是,可以把重复的控件,代码写在一起,当成一个整体的普通控件来用。

12.可以在定义错误页中判断Request.UserHostAddress【取得请求者的主机地址(IP地址)】来设置某些ip看到异常信息,可以读取Session,如果是管理员则可以看异常信息。(开发者自己发挥!)

 

/* ************************************************** 第十三季AJAX*********************************** */

1.AJAX是一种进行页面局部异步刷新的技术。 原理:在客户端页面中由XMLHTTPRequset来发出Http请求和获得服务器的返回数据,这样页面就不会刷新了。 XMLHTTPRequest是AJAX核心对象。

2.XMLHTTPRequest 写的异步刷新,客户端请求后返回的是实际需要的内容。 没有多余的框架等重新渲染的内容。

 

 

版权声明:本文为heskysky原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/heskysky/archive/2012/08/25/2655683.html