版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lenkty/article/details/78001636
1.反射一般用法:
public string Get(T tt)
{
string myString = string.Empty;
Type t = tt.GetType();
FieldInfo[] fields = t.GetFields();
foreach (FieldInfo field in fields)
{
myString += field.Name + ":" + field.GetValue(tt) + ",";
}
return myString.Trim(',');
}
2.asp.net 路由含义
<add path="request.aspx" verb="*" type="Bll.Handler.Test"/>
path这个呢就是我们访问的网页地址,就是上面输入的,我们找不到的那个文件名然后对应的处理程序是type="Bll.Handler.Test"
verb="*" 是指定接收的方式,*是Get,Post都可以,也可以直接写Post这样就只接收Post提交了。你访问request.aspx其实访问的就是Bll.Handler.Test.cs
3.SQL case 用法 A.select case when p.name is NULL then '无' else p.name end from MyTest.dbo.People p
B.select case p.name when is NULL then '无' else p.name end from MyTest.dbo.People p 注:is null 无效报错,其他值可用
常用函数:isnull()函数 is(a,b)如果a返回的结果是null则返回b,否则返回a的结果
4.sql over()函数用法: over()类似于在常用方法后加入条件
创建表
CREATE TABLE [dbo].[People](
[people_id] int identity(1,1) not null,
[book_id] [int] NOT NULL,
[name] [varchar](20) NULL,
[book_sum] int NULL,
PRIMARY KEY CLUSTERED
(
[people_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
A.含义:选择ID,统计每个id下拥有的书的总数合,划分方法是over(partition by p.book_id ):根据book_id进行划分和分组(group by)类似但不一样,分组放在最后
select p.book_id, SUM(p.book_sum) over(partition by p.book_id ) '总数' from MyTest.dbo.People p
5.asp.Net用户控件用法
A.新增用户控件类.ascx文件
B.在.ascx中添加你需要的HTML元素,在.ascx.cs中修改需要的方法(不动也行)
C.在web.config的<system.web>中增加
<pages>
<controls>
<add tagPrefix="myUI" src="~/CustomTools/WebUserControl.ascx" tagName="Texts"/>
</controls>
</pages>
其中myUI类似<asp:Button>中的asp ,Texts类似Button ,src是增加的用户控件的路径
D:中页面中应用用户控件<myUI:Texts runat="server"></myUI:Texts>
6 select 1 使用:取出book表中没有在book_id=p.boik_id的条件下所有结果
select b.* from books b where not exists
(
select 1 from People p where b.book_id=p.book_id
)
7.ToString("x2") x2表示输出两位小写十六进制的数如13=0x0d X2表示输出两位大写的十六进制数17=0xA2
8.NameValueCollection使用,特点键值可以相同,如相同则合并如下
NameValueCollection myCol = new NameValueCollection();
myCol.Add("red", "rojo");//如果键值red相同结果合并 rojo,rouge
myCol.Add("green", "verde");
myCol.Add("blue", "azul");
myCol.Add("red", "rouge");
名词解释:utils-使用工具类。 ref和out区别-用Ref型参数时,传入的参数必须先被初始化。而Out则不要要。
9.配置文件 在<system.web>下
<authorization>
<deny users = "?"/>
<allow users= "*" />
</authorization>
其中的 <deny users = "?"/> ‘?’表示匿名用户不允许访问 <allow users= "*" /> ‘*’表示允许所有用户访问
此外:认证方式设置
<authentication mode="Forms">
<forms loginUrl="/Login.aspx" defaultUrl="/login.aspx" timeout="180" name=".tutor_cookie"></forms>
</authentication>
10.sql ExecuteScalar()返回一个对象,使用SELECT @@IDENTITY;既可以获取刚插入的id
public int Insert(Base.UI.Model.Class_LessonRecording model)
{
string Sql = @"INSERT INTO Class_LessonRecording (FileName,FilePath,CLID,CreateTime,UpdateTime)
VALUES(@FileName,@FilePath,@CLID,@CreateTime,@UpdateTime);SELECT @@IDENTITY;";
SqlParameter[] pars = new SqlParameter[]{
new SqlParameter("@FileName",SqlDbType.VarChar)
,new SqlParameter("@FilePath",SqlDbType.VarChar)
,new SqlParameter("@CLID",SqlDbType.BigInt)
,new SqlParameter("@CreateTime",SqlDbType.DateTime)
,new SqlParameter("@UpdateTime",SqlDbType.DateTime)
};
pars[0].Value = model.FileName;
pars[1].Value = model.FilePath;
pars[2].Value = model.CLID;
pars[3].Value = model.CreateTime;
pars[4].Value = model.UpdateTime;
object o = SqlHelper.ExecuteScalar(ConnectionString, CommandType.Text, Sql, pars);
if (o != null && o != DBNull.Value)
{
model.Id = Convert.ToInt64(o);
return 1;
}
return 0;
}
11.jquery 选择器 closest()
A.closest() 方法获得匹配选择器的第一个祖先元素,从当前元素开始沿 DOM 树向上 eg:$('li.item-a').closest('ul').css('background-color', 'red');
B.var a = jQuery.extend(true, { name: "John", location: { city: "Boston" } }, { last: "Resig", location: { state: "MA" } });
=>: { name: “John”, last: “Resig”,location: { city: “Boston”, state: “MA” } } 注:类似于合并,但当有重复键时,具体选择哪一个,尚不清楚
C.var $self = $(obj) $self表示self是一个Jqeruy对象,和var self = $(obj)效果一样。注:一个变量是 $self一个是 self
12.C#自定义事件
A.定义委托和委托的事件
class AA{
public delegate void TextChang(DownLoad myDownLoad, string Content);
public event TextChang TextChanging; //接收字节数据事件
B.事件执行
private void OnTextChanging(string Content)
{
//触发订阅事件
TextChanging(this,Content);
}
C.事件触发
void XX{
OnTextChanging("xxxxxx");
}
}
D.订阅事件
class C {
AA aa=new AA();
//订阅文本改变事件
aa.TextChanging += new DownLoad.TextChang(UpdateText);
E.实现事件
private void UpdateText(DownLoad MyDownLoad, string Content)
{
myCortolo.InnerHtml += "委托" + Content;
}
}
13.Js回调函数的使用,类似于12.C#事件
var ii = 0;
A.设置启动函数
var clikeMe = function (callback) {
$("span").click(function () {
if (typeof callback != 'function') {
callback = false;
}
B. //触发监听
callback(this, 'you clik me?? ' + ii + " times");
ii++;
});
}
var setText = function (doc, text) {
$(doc).text(text)
}
C. //启动回调监听
clikeMe(setText);
14.点击播放html
public static string AudioHtml(string audioPath, int id)
{
string html = string.Empty;
html += "<audio src=\""+audioPath+"\" id = \"aud" + id + "\" ></audio>";
html += "<img style=\"height:20px;width:20px\" src=\"../../../img/zstart.png\" id=\"playpause" + id + "\" />";
html += "<script type=\"text/javascript\" >";
html += "var aud" + id + " = document.getElementById(\"aud" + id + "\");";
html += "var img" + id + " = document.getElementById(\"playpause" + id + "\");";
html += "img" + id + ".onclick = function(){if(aud" + id + ".paused){aud" + id + ".play();}else{aud" + id + ".pause();}};";
html += "aud" + id + ".addEventListener(\"play\", function(e) {img" + id + ".src = \"../../../img/zstop.png\";}, false);";
html += "aud" + id + ".addEventListener(\"pause\", function(e) {img" + id + ".src = \"../../../img/zstart.png\";}, false);";
html += "</script >";
return html;
}
15.A.关于C#中[Serializable]的用法
[Serializable]
public class LessonRecordingEntity
{
}
在类的上面加上[Serializable]属性,表示该类是可以被序列化的。序列化就是:把一个对象转成另一个对象方便传输,当接收端收到这个序列化后的对象能够反序列成原来的对象。
如:把一个Dictionary<string,int> dic序列化为dic.toJson()传输出去,接收端在接到一个json时能反序列化为原来的Dictionary对象。
此外:序列化和反序列化并不是C#或Java中独有的概念。
B.数据契约(DataContract)用法 http://www.cnblogs.com/Gavinzhao/archive/2010/06/01/1748736.html
服务契约定义了远程访问对象和可供调用的方法,数据契约则是服务端和客户端之间要传送的自定义数据类型。一旦声明一个类型为DataContract,
那么该类型就可以被序列化在服务端和客户端之间传送。
[DataContract]
public class UserInfo
{
[DataMember]
public string UserName
{
get;
set;
}
public string Zodiac
{
get;
set;
}
}
上面这段代码把UserInfo类声明为DataContract,将UserName 属性声明为DataMember(数据成员)。Zodiac成员没有被声明为DataMember,因此在交换数据时,不会传输Zodiac的任何信息。
除了Name和Namespace以外,DataMember还有以下参数,它们的含义分别如下。
(1)IsRequired:值为true时,要求序列化引擎检查对象是否存在该值;若无,则会有异常抛出。
(2)Order:bool类型值,值为true时,序列化和反序列化过程将会按成员定义的顺序进行,这对依赖于成员位置的反序列化过程无比重要。
(3)EmitDefaultvalue:为成员属性设置一个默认值。
一般情况下,将类型声明为DataContract就可以满足传送的需求了,不过特殊情况是难以避免的,这时就需要对要传送的SOAP消息进行更加精确的控制,MessageContract可以满足这种需求。
把一个类型声明为MessageContract,意味着它可以被序列化为SOAP消息,可以声明类型的成员为SOAP消息的各个部分,如Header、Body等,如下所示。
[MessageContract]
public class UserMessage
{
private string user = String.Empty;
private string authKey = String.Empty;
[MessageBodyMember(
Name = "UserName",
Namespace = "http://www.wcf.com")]
public string User
{
get { return user; }
set { user = value; }
}
[MessageHeader(
Name = "AuthKey",
Namespace = "http://www.wcf.com",
MustUnderstand = true
)]
public string AuthKey
{
get { return authKey; }
set { this.authKey = value; }
}
}
User成员被声明为MessageBody(消息体)的一个成员,AuthKey被声明为消息头(MessageHeader)的一个成员。这个类将可以生成如下的SOAP消息。
<s:Envelope>
<s:Header>
<a:Action s:mustUnderstand="1">http://UserMessage/Action</a:Action>
<h:AuthKey s:mustUnderstand="1" xmlns:h="http://www.wcf.com">xxxx</h:AuthKey>
</s:Header>
<s:Body>
<UserMessage xmlns="Microsoft.WCF.Documentation">
<User xmlns="http://www.wcf.com">abcd</User>
</UserMessage>
</s:Body>
</s:Envelope>
MessageHeader中,MustUnderstand参数表示读取该头的程序必须能够识别头的内容,否则不能继续处理。Name/Namespace的作用与前面的元素相同。
另有Relay参数,若为true,头的内容被接收到以后会在响应消息中回发给消息发送端。
16.sql server 游标的使用
declare @id int,@name varchar(20),@auths varchar(20) --创建变量
declare mycur cursor for select book_id,book_name,book_auth from books --为筛选结果创建游标
open mycur --打开游标
fetch next from mycur into @id,@name,@auths--准备遍历
while(@@FETCH_STATUS=0)
begin
print 'bookID:'+convert(varchar,@id)+' , bookName: '+ @name+' ,bookAuth: '+@auths;--打印结果
fetch next from mycur into @id ,@name,@auths--进入下一个筛选结果
end
close mycur --关闭游标
deallocate mycur;--释放游标
17.sql 禁用和启用自增字段
set identity_insert App_PromotionChannel ON --允许对自增列Id插入指定数据
INSERT [dbo].[uc_TeachEvaluateCategory] ([ECID], [CatName], ……) VALUES (162, N'4', ……)
.
.
.
set identity_insert App_PromotionChannel OFF --关闭对自增列Id插入指定数据
go
18.html5通知功能
if (window.Notification) {
var popNotice = function () {
if (Notification.permission == "granted") {//granted, denied, 或default.
var notification = new Notification("Hi,帅哥:", {
body: new Date().toTimeString().split(' ')[0] + '\r\n可以加你为好友吗?',
icon: 'http://image.zhangxinxu.com/image/study/s/s128/mm2.jpg',
noscreen:true
});
notification.onclick = function () {
text.innerHTML = '张小姐已于' + new Date().toTimeString().split(' ')[0] + '加你为好友!';
notification.close();
};
}
};
setInterval(function () {
if (Notification.permission == "granted") {
popNotice();
} else if (Notification.permission != "denied") {
Notification.requestPermission(function (permission) {
popNotice();
});
}
document.title = "【你有新消息】";
setTimeout(function () {
document.title = "Notification"
}, 3000)
}, 5000);
}
19 .net 中缓存使用,创建两个依赖于一个的缓存,当这个缓存改变的时候,那两个缓存自动失效
string errorData = "缓存内容";
CacheDependency fileDependency = new CacheDependency(Server.MapPath("Files/12.jpg"));
Cache.Insert("ERROR_INFO", errorData, fileDependency, DateTime.MaxValue, TimeSpan.FromMinutes(2));//無操作2m或文件修改失效
//Cache.Insert("ERROR_INFO", errorData, fileDependency, Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(5));//無操作5s或文件修改失效
eg:
if (Cache["NUM"] == null || Cache["NAME"] == null || Cache["ADDR"] == null || Cache["SAL"] == null)
{
#region 解决办法:只要确保每个CacheDependency 只与一个缓存项关联即可。
//只要 NUM 缓存 数据改变时 则 NAME ADDR 自动清空,NUM 不被清空 。NAME ADDR 就依赖于NUM
CacheDependency keyDependency1 = new CacheDependency(null, new string[] { "NUM" });
CacheDependency keyDependency2 = new CacheDependency(null, new string[] { "NUM" });
if (Cache["NUM"] == null)
{
Cache.Insert("NUM", "5435");
}
Cache.Insert("NAME", "Shubhabrata", keyDependency1);
Cache.Insert("ADDR", "Bhubaneswar", keyDependency2);
#endregion
content.InnerText = Cache.Get("ERROR_INFO").ToString();
}
protected void Unnamed_Click1(object sender, EventArgs e)
{
Cache["NUM"] = "1243";
object str = Cache.Get("NAME") == null ? "null" : Cache.Get("NAME");
content.InnerText = str.ToString();
}
20.js自定义fromdata提交数据和选择图片自动显示(文件)
A.HTML
<div style="width: 640px; height: 480px; position: relative">
<input id="avatarSlect" type="file" style="position: absolute; z-index: 10; opacity: 0;
width: 100%; height: 100%;">
<img id="avatarPreview" src="" title="Click the blank area and select Image" style="position: absolute;
z-index: 9; float: left; width: 100%; height: 100%">
<progress id="Progress" style="position:absolute;bottom:0;width:100%;z-index:11;height:5px;color:lightgreen" value="0" max="100"></progress>
</div>
B.JS
var formData = new FormData();
formData.append("__", "FaceRecoginitionHR");
formData.append("applyid", applyid);
formData.append('file', $("#avatarSlect")[0].files[0]); /*获取上传的图片对象*/
//显示图片
var obj = $("#avatarSlect")[0].files[0];
var fr = new FileReader();
fr.onload = function () {
$("#avatarPreview").attr('src', this.result);
// console.log(this.result);
$("#avatar").val(this.result);
};
fr.readAsDataURL(obj);
//显示进度条
$("#Progress").val("0");
fr.onprogress = function (e) {
$("#Progress").val((e.loaded / e.total) * 100);
}
$.ajax({
url: '/Ajax/Web.UI.Fun.Tutor.aspx/',
type: 'POST',
data: formData,
dataType: 'json',
contentType: false,
processData: false,
success: function (data) {
if (data.result == "success") {
$("#myresults").html("Success! Face already recorded");
$("#btn_skips").val("Go on");
}
else if (data.result == "found") {
if (data.isblack == "black")
$("#myresults").html("Exists In BlackList! Name:" + data.name + ",ApplyID:" + data.apply);
else
$("#myresults").html("Already exists! Name:" + data.name + ",ApplyID:" + data.apply);
}
else {
$("#myresults").html("Error! Please try again Or Skip");
}
},
error: function () {
alert("Ajax error!");
}
})
21.大数据之ETL(Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程)-数据清洗,国外工具:Kettle纯java编写,windows运行需要java环境
22.linq 对dataTable查询后的结果 使用NewtonSoft的JsonConvert.SerializeObject()需要对查询结果 CopyToDataTable()操作
23.ORM(Object Relationship Mapper)框架
Dapper,类似SqlHelper 轻量级ORM 讲解地址:http://www.cnblogs.com/huangxincheng/p/5828470.html
XLinq,类EF的框架 支持linq查询 讲解地址:http://www.cnblogs.com/wzxinchen/p/4700506.html
24.linq to entity 和 linq to sql 和 linq to object
1)linq to entity 需要objectContext对象,而Linq to object不需要。
2)linq to entity 返回的是IEnumerable<T>类型,而 linq to object返回的是IQuerable<T>类型。
3)linq to entity 通过表达式树的方式被翻译为SQL,表达式树允许被看作一个简单单元,闭然后并翻译成为恰当且合适的SQl语句。而linq to object 不需要被翻译。
4)linq to entity 被转化为SQL语句,因此在特定的数据库中执行,而linq to object在本地的机器内存中执行。
注:
linq to sql 是.net 3.5的一部分,提供了运行时的管理关系型数据基础。
需要注意的一点是,在处理LINQ To Entities时是LINQ的延迟执行。
标准的查询运算符在何时执行,取决于运算是返回一个单值或者序列值。某些返回单值(比如Average和Sum)立即就执行了。而方法序列值则延迟了查询的执行,并且返回了一个可枚举(enumerable )的对象。
这些方法不消耗对象数据直到查询对象被枚举。这就是延迟执行。
操作IEnumerable<T>类型的集合时,参数被立刻传递给方法,查询结果被立刻返回;
而在IQuerable<T>类型集合的扩展方法没有实施任何查询行为,但只是创建了代表查询的表达式树。查询进程被IQuerable<T>类型的源数据处理。
public string Get(T tt)
{
string myString = string.Empty;
Type t = tt.GetType();
FieldInfo[] fields = t.GetFields();
foreach (FieldInfo field in fields)
{
myString += field.Name + ":" + field.GetValue(tt) + ",";
}
return myString.Trim(',');
}
2.asp.net 路由含义
<add path="request.aspx" verb="*" type="Bll.Handler.Test"/>
path这个呢就是我们访问的网页地址,就是上面输入的,我们找不到的那个文件名然后对应的处理程序是type="Bll.Handler.Test"
verb="*" 是指定接收的方式,*是Get,Post都可以,也可以直接写Post这样就只接收Post提交了。你访问request.aspx其实访问的就是Bll.Handler.Test.cs
3.SQL case 用法 A.select case when p.name is NULL then '无' else p.name end from MyTest.dbo.People p
B.select case p.name when is NULL then '无' else p.name end from MyTest.dbo.People p 注:is null 无效报错,其他值可用
常用函数:isnull()函数 is(a,b)如果a返回的结果是null则返回b,否则返回a的结果
4.sql over()函数用法: over()类似于在常用方法后加入条件
创建表
CREATE TABLE [dbo].[People](
[people_id] int identity(1,1) not null,
[book_id] [int] NOT NULL,
[name] [varchar](20) NULL,
[book_sum] int NULL,
PRIMARY KEY CLUSTERED
(
[people_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
A.含义:选择ID,统计每个id下拥有的书的总数合,划分方法是over(partition by p.book_id ):根据book_id进行划分和分组(group by)类似但不一样,分组放在最后
select p.book_id, SUM(p.book_sum) over(partition by p.book_id ) '总数' from MyTest.dbo.People p
5.asp.Net用户控件用法
A.新增用户控件类.ascx文件
B.在.ascx中添加你需要的HTML元素,在.ascx.cs中修改需要的方法(不动也行)
C.在web.config的<system.web>中增加
<pages>
<controls>
<add tagPrefix="myUI" src="~/CustomTools/WebUserControl.ascx" tagName="Texts"/>
</controls>
</pages>
其中myUI类似<asp:Button>中的asp ,Texts类似Button ,src是增加的用户控件的路径
D:中页面中应用用户控件<myUI:Texts runat="server"></myUI:Texts>
6 select 1 使用:取出book表中没有在book_id=p.boik_id的条件下所有结果
select b.* from books b where not exists
(
select 1 from People p where b.book_id=p.book_id
)
7.ToString("x2") x2表示输出两位小写十六进制的数如13=0x0d X2表示输出两位大写的十六进制数17=0xA2
8.NameValueCollection使用,特点键值可以相同,如相同则合并如下
NameValueCollection myCol = new NameValueCollection();
myCol.Add("red", "rojo");//如果键值red相同结果合并 rojo,rouge
myCol.Add("green", "verde");
myCol.Add("blue", "azul");
myCol.Add("red", "rouge");
名词解释:utils-使用工具类。 ref和out区别-用Ref型参数时,传入的参数必须先被初始化。而Out则不要要。
9.配置文件 在<system.web>下
<authorization>
<deny users = "?"/>
<allow users= "*" />
</authorization>
其中的 <deny users = "?"/> ‘?’表示匿名用户不允许访问 <allow users= "*" /> ‘*’表示允许所有用户访问
此外:认证方式设置
<authentication mode="Forms">
<forms loginUrl="/Login.aspx" defaultUrl="/login.aspx" timeout="180" name=".tutor_cookie"></forms>
</authentication>
10.sql ExecuteScalar()返回一个对象,使用SELECT @@IDENTITY;既可以获取刚插入的id
public int Insert(Base.UI.Model.Class_LessonRecording model)
{
string Sql = @"INSERT INTO Class_LessonRecording (FileName,FilePath,CLID,CreateTime,UpdateTime)
VALUES(@FileName,@FilePath,@CLID,@CreateTime,@UpdateTime);SELECT @@IDENTITY;";
SqlParameter[] pars = new SqlParameter[]{
new SqlParameter("@FileName",SqlDbType.VarChar)
,new SqlParameter("@FilePath",SqlDbType.VarChar)
,new SqlParameter("@CLID",SqlDbType.BigInt)
,new SqlParameter("@CreateTime",SqlDbType.DateTime)
,new SqlParameter("@UpdateTime",SqlDbType.DateTime)
};
pars[0].Value = model.FileName;
pars[1].Value = model.FilePath;
pars[2].Value = model.CLID;
pars[3].Value = model.CreateTime;
pars[4].Value = model.UpdateTime;
object o = SqlHelper.ExecuteScalar(ConnectionString, CommandType.Text, Sql, pars);
if (o != null && o != DBNull.Value)
{
model.Id = Convert.ToInt64(o);
return 1;
}
return 0;
}
11.jquery 选择器 closest()
A.closest() 方法获得匹配选择器的第一个祖先元素,从当前元素开始沿 DOM 树向上 eg:$('li.item-a').closest('ul').css('background-color', 'red');
B.var a = jQuery.extend(true, { name: "John", location: { city: "Boston" } }, { last: "Resig", location: { state: "MA" } });
=>: { name: “John”, last: “Resig”,location: { city: “Boston”, state: “MA” } } 注:类似于合并,但当有重复键时,具体选择哪一个,尚不清楚
C.var $self = $(obj) $self表示self是一个Jqeruy对象,和var self = $(obj)效果一样。注:一个变量是 $self一个是 self
12.C#自定义事件
A.定义委托和委托的事件
class AA{
public delegate void TextChang(DownLoad myDownLoad, string Content);
public event TextChang TextChanging; //接收字节数据事件
B.事件执行
private void OnTextChanging(string Content)
{
//触发订阅事件
TextChanging(this,Content);
}
C.事件触发
void XX{
OnTextChanging("xxxxxx");
}
}
D.订阅事件
class C {
AA aa=new AA();
//订阅文本改变事件
aa.TextChanging += new DownLoad.TextChang(UpdateText);
E.实现事件
private void UpdateText(DownLoad MyDownLoad, string Content)
{
myCortolo.InnerHtml += "委托" + Content;
}
}
13.Js回调函数的使用,类似于12.C#事件
var ii = 0;
A.设置启动函数
var clikeMe = function (callback) {
$("span").click(function () {
if (typeof callback != 'function') {
callback = false;
}
B. //触发监听
callback(this, 'you clik me?? ' + ii + " times");
ii++;
});
}
var setText = function (doc, text) {
$(doc).text(text)
}
C. //启动回调监听
clikeMe(setText);
14.点击播放html
public static string AudioHtml(string audioPath, int id)
{
string html = string.Empty;
html += "<audio src=\""+audioPath+"\" id = \"aud" + id + "\" ></audio>";
html += "<img style=\"height:20px;width:20px\" src=\"../../../img/zstart.png\" id=\"playpause" + id + "\" />";
html += "<script type=\"text/javascript\" >";
html += "var aud" + id + " = document.getElementById(\"aud" + id + "\");";
html += "var img" + id + " = document.getElementById(\"playpause" + id + "\");";
html += "img" + id + ".onclick = function(){if(aud" + id + ".paused){aud" + id + ".play();}else{aud" + id + ".pause();}};";
html += "aud" + id + ".addEventListener(\"play\", function(e) {img" + id + ".src = \"../../../img/zstop.png\";}, false);";
html += "aud" + id + ".addEventListener(\"pause\", function(e) {img" + id + ".src = \"../../../img/zstart.png\";}, false);";
html += "</script >";
return html;
}
15.A.关于C#中[Serializable]的用法
[Serializable]
public class LessonRecordingEntity
{
}
在类的上面加上[Serializable]属性,表示该类是可以被序列化的。序列化就是:把一个对象转成另一个对象方便传输,当接收端收到这个序列化后的对象能够反序列成原来的对象。
如:把一个Dictionary<string,int> dic序列化为dic.toJson()传输出去,接收端在接到一个json时能反序列化为原来的Dictionary对象。
此外:序列化和反序列化并不是C#或Java中独有的概念。
B.数据契约(DataContract)用法 http://www.cnblogs.com/Gavinzhao/archive/2010/06/01/1748736.html
服务契约定义了远程访问对象和可供调用的方法,数据契约则是服务端和客户端之间要传送的自定义数据类型。一旦声明一个类型为DataContract,
那么该类型就可以被序列化在服务端和客户端之间传送。
[DataContract]
public class UserInfo
{
[DataMember]
public string UserName
{
get;
set;
}
public string Zodiac
{
get;
set;
}
}
上面这段代码把UserInfo类声明为DataContract,将UserName 属性声明为DataMember(数据成员)。Zodiac成员没有被声明为DataMember,因此在交换数据时,不会传输Zodiac的任何信息。
除了Name和Namespace以外,DataMember还有以下参数,它们的含义分别如下。
(1)IsRequired:值为true时,要求序列化引擎检查对象是否存在该值;若无,则会有异常抛出。
(2)Order:bool类型值,值为true时,序列化和反序列化过程将会按成员定义的顺序进行,这对依赖于成员位置的反序列化过程无比重要。
(3)EmitDefaultvalue:为成员属性设置一个默认值。
一般情况下,将类型声明为DataContract就可以满足传送的需求了,不过特殊情况是难以避免的,这时就需要对要传送的SOAP消息进行更加精确的控制,MessageContract可以满足这种需求。
把一个类型声明为MessageContract,意味着它可以被序列化为SOAP消息,可以声明类型的成员为SOAP消息的各个部分,如Header、Body等,如下所示。
[MessageContract]
public class UserMessage
{
private string user = String.Empty;
private string authKey = String.Empty;
[MessageBodyMember(
Name = "UserName",
Namespace = "http://www.wcf.com")]
public string User
{
get { return user; }
set { user = value; }
}
[MessageHeader(
Name = "AuthKey",
Namespace = "http://www.wcf.com",
MustUnderstand = true
)]
public string AuthKey
{
get { return authKey; }
set { this.authKey = value; }
}
}
User成员被声明为MessageBody(消息体)的一个成员,AuthKey被声明为消息头(MessageHeader)的一个成员。这个类将可以生成如下的SOAP消息。
<s:Envelope>
<s:Header>
<a:Action s:mustUnderstand="1">http://UserMessage/Action</a:Action>
<h:AuthKey s:mustUnderstand="1" xmlns:h="http://www.wcf.com">xxxx</h:AuthKey>
</s:Header>
<s:Body>
<UserMessage xmlns="Microsoft.WCF.Documentation">
<User xmlns="http://www.wcf.com">abcd</User>
</UserMessage>
</s:Body>
</s:Envelope>
MessageHeader中,MustUnderstand参数表示读取该头的程序必须能够识别头的内容,否则不能继续处理。Name/Namespace的作用与前面的元素相同。
另有Relay参数,若为true,头的内容被接收到以后会在响应消息中回发给消息发送端。
16.sql server 游标的使用
declare @id int,@name varchar(20),@auths varchar(20) --创建变量
declare mycur cursor for select book_id,book_name,book_auth from books --为筛选结果创建游标
open mycur --打开游标
fetch next from mycur into @id,@name,@auths--准备遍历
while(@@FETCH_STATUS=0)
begin
print 'bookID:'+convert(varchar,@id)+' , bookName: '+ @name+' ,bookAuth: '+@auths;--打印结果
fetch next from mycur into @id ,@name,@auths--进入下一个筛选结果
end
close mycur --关闭游标
deallocate mycur;--释放游标
17.sql 禁用和启用自增字段
set identity_insert App_PromotionChannel ON --允许对自增列Id插入指定数据
INSERT [dbo].[uc_TeachEvaluateCategory] ([ECID], [CatName], ……) VALUES (162, N'4', ……)
.
.
.
set identity_insert App_PromotionChannel OFF --关闭对自增列Id插入指定数据
go
18.html5通知功能
if (window.Notification) {
var popNotice = function () {
if (Notification.permission == "granted") {//granted, denied, 或default.
var notification = new Notification("Hi,帅哥:", {
body: new Date().toTimeString().split(' ')[0] + '\r\n可以加你为好友吗?',
icon: 'http://image.zhangxinxu.com/image/study/s/s128/mm2.jpg',
noscreen:true
});
notification.onclick = function () {
text.innerHTML = '张小姐已于' + new Date().toTimeString().split(' ')[0] + '加你为好友!';
notification.close();
};
}
};
setInterval(function () {
if (Notification.permission == "granted") {
popNotice();
} else if (Notification.permission != "denied") {
Notification.requestPermission(function (permission) {
popNotice();
});
}
document.title = "【你有新消息】";
setTimeout(function () {
document.title = "Notification"
}, 3000)
}, 5000);
}
19 .net 中缓存使用,创建两个依赖于一个的缓存,当这个缓存改变的时候,那两个缓存自动失效
string errorData = "缓存内容";
CacheDependency fileDependency = new CacheDependency(Server.MapPath("Files/12.jpg"));
Cache.Insert("ERROR_INFO", errorData, fileDependency, DateTime.MaxValue, TimeSpan.FromMinutes(2));//無操作2m或文件修改失效
//Cache.Insert("ERROR_INFO", errorData, fileDependency, Cache.NoAbsoluteExpiration, TimeSpan.FromSeconds(5));//無操作5s或文件修改失效
eg:
if (Cache["NUM"] == null || Cache["NAME"] == null || Cache["ADDR"] == null || Cache["SAL"] == null)
{
#region 解决办法:只要确保每个CacheDependency 只与一个缓存项关联即可。
//只要 NUM 缓存 数据改变时 则 NAME ADDR 自动清空,NUM 不被清空 。NAME ADDR 就依赖于NUM
CacheDependency keyDependency1 = new CacheDependency(null, new string[] { "NUM" });
CacheDependency keyDependency2 = new CacheDependency(null, new string[] { "NUM" });
if (Cache["NUM"] == null)
{
Cache.Insert("NUM", "5435");
}
Cache.Insert("NAME", "Shubhabrata", keyDependency1);
Cache.Insert("ADDR", "Bhubaneswar", keyDependency2);
#endregion
content.InnerText = Cache.Get("ERROR_INFO").ToString();
}
protected void Unnamed_Click1(object sender, EventArgs e)
{
Cache["NUM"] = "1243";
object str = Cache.Get("NAME") == null ? "null" : Cache.Get("NAME");
content.InnerText = str.ToString();
}
20.js自定义fromdata提交数据和选择图片自动显示(文件)
A.HTML
<div style="width: 640px; height: 480px; position: relative">
<input id="avatarSlect" type="file" style="position: absolute; z-index: 10; opacity: 0;
width: 100%; height: 100%;">
<img id="avatarPreview" src="" title="Click the blank area and select Image" style="position: absolute;
z-index: 9; float: left; width: 100%; height: 100%">
<progress id="Progress" style="position:absolute;bottom:0;width:100%;z-index:11;height:5px;color:lightgreen" value="0" max="100"></progress>
</div>
B.JS
var formData = new FormData();
formData.append("__", "FaceRecoginitionHR");
formData.append("applyid", applyid);
formData.append('file', $("#avatarSlect")[0].files[0]); /*获取上传的图片对象*/
//显示图片
var obj = $("#avatarSlect")[0].files[0];
var fr = new FileReader();
fr.onload = function () {
$("#avatarPreview").attr('src', this.result);
// console.log(this.result);
$("#avatar").val(this.result);
};
fr.readAsDataURL(obj);
//显示进度条
$("#Progress").val("0");
fr.onprogress = function (e) {
$("#Progress").val((e.loaded / e.total) * 100);
}
$.ajax({
url: '/Ajax/Web.UI.Fun.Tutor.aspx/',
type: 'POST',
data: formData,
dataType: 'json',
contentType: false,
processData: false,
success: function (data) {
if (data.result == "success") {
$("#myresults").html("Success! Face already recorded");
$("#btn_skips").val("Go on");
}
else if (data.result == "found") {
if (data.isblack == "black")
$("#myresults").html("Exists In BlackList! Name:" + data.name + ",ApplyID:" + data.apply);
else
$("#myresults").html("Already exists! Name:" + data.name + ",ApplyID:" + data.apply);
}
else {
$("#myresults").html("Error! Please try again Or Skip");
}
},
error: function () {
alert("Ajax error!");
}
})
21.大数据之ETL(Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程)-数据清洗,国外工具:Kettle纯java编写,windows运行需要java环境
22.linq 对dataTable查询后的结果 使用NewtonSoft的JsonConvert.SerializeObject()需要对查询结果 CopyToDataTable()操作
23.ORM(Object Relationship Mapper)框架
Dapper,类似SqlHelper 轻量级ORM 讲解地址:http://www.cnblogs.com/huangxincheng/p/5828470.html
XLinq,类EF的框架 支持linq查询 讲解地址:http://www.cnblogs.com/wzxinchen/p/4700506.html
24.linq to entity 和 linq to sql 和 linq to object
1)linq to entity 需要objectContext对象,而Linq to object不需要。
2)linq to entity 返回的是IEnumerable<T>类型,而 linq to object返回的是IQuerable<T>类型。
3)linq to entity 通过表达式树的方式被翻译为SQL,表达式树允许被看作一个简单单元,闭然后并翻译成为恰当且合适的SQl语句。而linq to object 不需要被翻译。
4)linq to entity 被转化为SQL语句,因此在特定的数据库中执行,而linq to object在本地的机器内存中执行。
注:
linq to sql 是.net 3.5的一部分,提供了运行时的管理关系型数据基础。
需要注意的一点是,在处理LINQ To Entities时是LINQ的延迟执行。
标准的查询运算符在何时执行,取决于运算是返回一个单值或者序列值。某些返回单值(比如Average和Sum)立即就执行了。而方法序列值则延迟了查询的执行,并且返回了一个可枚举(enumerable )的对象。
这些方法不消耗对象数据直到查询对象被枚举。这就是延迟执行。
操作IEnumerable<T>类型的集合时,参数被立刻传递给方法,查询结果被立刻返回;
而在IQuerable<T>类型集合的扩展方法没有实施任何查询行为,但只是创建了代表查询的表达式树。查询进程被IQuerable<T>类型的源数据处理。
Linq to Entity 外键的处理被翻译成join语句。
--任何问题沟通请发送邮件到:[email protected]或加入qq群594096777讨论。