控制反转 依赖注入,为了减少耦合隐藏。将特定的
model 加上remote特性,如何实现注册时候有效,但是登录时候不需要有效。绑定特定view,过滤掉特定view的的验证。
* vs调试网站数据库成功访问,但是iis中访问数据库提示
用户 'IIS APPPOOLDefaultAppPool' 登录失败。
因为msslq安装时候验证权限选择的是localsystem,而此时访问的是 iis网络账户。
iis-》右击项目 设置-》进程孤立-》内置账户
*abstract override 重写基类的虚拟方法 (abstract 和override配套使用,子类override重写抽象父类的抽象方法)
new public xx 隐藏基类方法,子类使用自己的(基类的方法必须已经定义了)
属性为abstract,类必须生命为abstract抽象类,抽象函数无实体例: public abstract void getfield();子类如果不是抽象类则必须重写父类的抽象方法
virual,override配套使用
*using System.Text.RegularExpressions;
替换多个空格为一个空格,中间一个参数为正则
- Regex.Replace("abc sfd sdf df esdf sdf", " +", " ");
替换手机号为*
Regex.Replace(“13455555555”,@”^(d{3}d{4}d{4})$”,”$1****$3”); 替换后为 134****5555
*单例模式
属性staitc private,构造函数private,一个getobject 用static声明并返回该类的类型
*virtual 虚拟,虚方法
用于子类重写override
*设置国家环境,对货币进行格式化using System.Globalization;
- CultureInfo english=new CultureInfo("en-US");
- decimal d = 99999999999999999m;
- string s = string.Format(english, "my amout is {0:c}", d);
*页面6秒关闭,左击页面显示左,右击页面显示右边
- <script type="text/javascript" >
- setTimeout('window.close()', 6*1000);
- function show() {
- if (window.event.button == 1) {
- alert("");
- }
- else {
- alert("");
- }
- }
- show();
- </script>
*hashtable ,hashmap key都不能相同
map的key可以为空,没实现线程安全
*sql 根据登录表统计在线时间 datediff(ss,起始时间,结束时间),floor()四舍五入,cast(xx as nvrchar)
sql:统计用户在线时间。有online 表, username,operate,time假设表中有数据:lizi,login,2013/1/1 12:00:33mike,login,2013/1/1 14:33:45lizi,exit,2013/1/1 19:33:55mike,exit,2012/1/1 23:33:44要得到如下信息: lizi,4:33:12(在线时间4小时,33分钟,12秒)代码:select a.[username],a.time as login_time,b.time as exit_time,cast((floor(datediff(ss,a.time,b.time)/3600 ))as nvarchar) //获取小时数, datediff(hh/mi/ss,starttime,endtime)+':'+cast((floor(datediff(ss,a.time,b.time) )%3600/60)as nvarchar) //减去整数小时后,获取分钟数+':'+cast(floor( datediff(ss,a.time,b.time))%3600%60 as nvarchar)as totaltime fromonline as a , online as b where a.[username]=b.[username] and a.operate='login' and b.operate='exit'
* 数组大小排列, 通过list<int> li=new list<int>(); li.sort();默认是从小到大排列
从大到小排序 li.sort(FromMaxToMin)(自定义函数);
class Program{static void Main(string[] args){List<int> list = new List<int>();Random r = new Random();int[] array = new int[100];int temp = 0;while (list.Count < 100){temp = r.Next(1, 10001);if (!list.Contains(temp)){list.Add(temp);}}//list.Sort(); //默认// Console.WriteLine( Comparer<int>.Default.ToString());//System.Collections.Generic.GenericComparer`1[System.Int32]list.Sort(FromMaxToMin);array = list.ToArray();foreach (int i in array){Console.WriteLine(i.ToString());}Console.Read();}//从大到小排列public static int FromMaxToMin(int a,int b){if (a > b) return -1;else if (a == b) return 0;else return 1;}}
*强命名程序集: 加密签名放到全集程序集缓存中.
标识唯一程序集,缓存中有了就方便下次直接使用
*net 读写数据库的类 ?????具体样本代码
DataSet 数据的集合 DataReader 数据只读器
DataAdapter 用于填充dataset 和 更新数据库一组指令和一个数据库连接。
DataCommand 执行sql命令
- SqlConnection con = new SqlConnection(connectionString);
- con.Open();
- SqlDataAdapter adapter = new SqlDataAdapter(sql, con);
- DataSet ds = new DataSet();
- adapter.Fill(ds);
- return ds;
- string queryString =
- "SELECT OrderID, CustomerID FROM dbo.Orders;";
- using (SqlConnection connection =
- new SqlConnection(connectionString))
- {
- SqlCommand command =
- new SqlCommand(queryString, connection);
- connection.Open();
- SqlDataReader reader = command.ExecuteReader();
- // Call Read before accessing data.
- while (reader.Read())
- {
- Console.WriteLine(String.Format("{0}, {1}",
- reader[0], reader[1]));
- }
- // Call Close when done reading.
- reader.Close();
*ASP.NET身份验证
windows机制 ,原理:iis
form :账户
passport:密钥
非对称md5(无公钥),对称(由私钥能推出共钥)
*调用webservice的方法。 1. wsdl.exe命令行工具 2. add web reference 菜单选项
*net remoting
看作一种分布式处理方式,dcom的升级,改善了很多性能
提供了一种允许对象通过应用程序域与另一对象进行交互的框架。这也正是我们使用Remoting的原因。为什么呢?在Windows操作系统中,是将应用程序分离为单独的进程。这个进程形成了应用程序代码和数据周围的一道边界。如果不采用进程间通信(RPC)机制,则在一个进程中执行的代码就不能访问另一进程。这是一种操作系统对应用程序的保护机制。然而在某些情况下,我们需要跨过应用程序域,与另外的应用程序域进行通信,即穿越边界。
*class struct区别
class:引用类型,可以作为基类型,可以实现接口继承基类,分配内存的堆上
struct:值类型,能实现接口不能继承基类,存储空间在内存的栈上。
*net remoting和webservice 应用中区别
webservice 利用http协议,穿透防火墙
remoting 除了http还可以用tcp/ip,二进制传送提高效率
*final,finally,finalize()
*异常捕捉 try 里有个return语句,finally里的语句在return之前执行
*iis 进程回收机制 会让session丢失(状态维护)
session_start 超时session_end
web.config 中的sessionstate 4个属性 off,inproc,stateserver,sqlserver
默认inproc,存在asp.net进程中,速度快,但是进程崩溃(重启或者失败)就会造成session丢失
stateserver 要指定ip端口,是一种windows服务,不依赖asp.net进程。存在stateserver的进程中。
sqlserver不依赖iis,方便集群
*xml 区分大小写,必须有结束或者加上个/字符(<over/>)
属性必有有引号,属性必须带有值
*const 常量区,常数不能改
static 静态存储区,变量
*托管
Console.WriteLine("反射-获取System.IO.BinaryReader 中的公共成员,不包括父类的成员");
Assembly a = Assembly.LoadFile(@"C:UsersipodDocumentsVisual Studio 2010Projects反射反射反射inDebugcommon.dll"); //system就不用这个了
Type MyType = a.GetType("common.helper");
MemberInfo[] Memberinfoarray = MyType.GetMembers(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);Console.WriteLine("反射-获取System.IO.BinaryReader公共成员数量:{0}",Memberinfoarray.Length);
Console.WriteLine("反射程序集name",MyType.FullName);
for (int i = 0; i < Memberinfoarray.Length; i++){Console.WriteLine("member[{0}]:{1}",i+1, Memberinfoarray[i].Name+",");}Console.ReadLine();
*datagridview使用
获取0行0列的值 datagridview.row[0].cell[0].value
*create funciton name(@name nvarchar)
returns int
as
begin
..
end
触发器 inserted i ,deleted i .after insert实现业务规则。 create trigger tri_name as… raiserror(‘error info’,’1’,’16’) rollback transaction ,commit
asp.net sessionid 该标识符是随机生成的、由 24 个字符编码组成的编号,这些字符包括小写字符 a 到 z 和数字 0 到 5
asp.net 会话状态,如果设置为 inproc的话,session中的变量类型必须为基元net类型或者可序列化的类型,因为存储在外部数据存储区中
默认session存在cookie中,但是可以放到url中,只要将web.config中的sessionstate的属性 cookieless=true ,这要的坏处是如果重写url路由就不好识别。
(http://www.xx.com/(此处是sessionid)/sdfsf.com)
1.配置web.config sessionstate 有4种,默认inproc,off,stateserver,sqlserver,自定义
inproc:存在进程中,进程关闭则session丢失
- stateserver:本地asp.net服务
设置为stateserver 默认为10秒开启成100秒,
<sessionState mode="StateServer" cookieName="mike-uid" stateConnectionString="tcpip=127.0.0.1:42424" stateNetworkTimeout="100" ></sessionState> 配置好后,必须手动开启本地服务中的ASP.NET状态服务;
- sqlserver:数据库asp.net
存在名字ASPSTATE 数据库中,<sessionState mode="SQLServer" sqlCommandTimeout="30" sqlConnectionString="Server=MIKPLE-PCSQLEXPRESS;Integrated Security=true"></sessionState>
第一次需要生成此数据库,sql脚本文件位于 默认情况下,InstallSqlState.sql 位于 %windir%Microsoft.NETFrameworkversion 中。
自定义session的value
1)自定义sessionid类继承自SessionIDManager。 重写2个方法:CreateSessionID 和Validate
2) 使用自定义的session value。
配置web.config中的system.web节点下的 sessionstate 的sessionIDManagerType="MvcApplication1.session.sessionid"
效果图如下(将sessionid 自定义成guid了)
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.SessionState;namespace MvcApplication1.session{public class sessionid: SessionIDManager{public override string CreateSessionID(HttpContext context){return Guid.NewGuid().ToString();}public override bool Validate(string id){Guid g = new Guid(id);if (id == g.ToString()){return true;}return false;}}}
???第一次访问url时候应该有个返回个sessionid,但是不设置mvc情况下就会不返回。像窝窝头第一次访问就返回55tuan-id
msdn 帮助太重要了