.Net程序员随笔-HTML-JS-C#-框架

版权声明:本文为博主原创文章,未经博主允许不得转载。 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>类型的源数据处理。

Linq to Entity 外键的处理被翻译成join语句。


--任何问题沟通请发送邮件到:[email protected]或加入qq群594096777讨论。








猜你喜欢

转载自blog.csdn.net/lenkty/article/details/78001636