天道酬勤,学无止境

C#基础

Log4Net使用详解(续)

说明自从上次在2008年在博客上发表过有关log4net的用法介绍文章之后(网址:http://blog.csdn.net/zhoufoxcn/archive/2008/03/26/2220533.aspx),有不少朋友在博文下留言询问一些细节,现在就一些比较普遍的问题做一些稍微深入的解答,希望大家满意。 首先说明一点的是,log4net解决的问题是提供一个记录日志的框架,它提供了向多种目标写入的实现,比如利用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库(包括MS SQL Server, Access, Oracle9i,Oracle8i,DB2,SQLite)中,一般来说我们只需要提供一个描述性的字符串,然后log4net就会自动提供有关运行时的一些信息。 Log4Net的版本仍是1.2.10(2008年我写博文的时候也是这个版本),有.NET1.0和.NET1.1和.NET2.0版本,如果有正在使用高于.NET2.0开发的也不用担心,可以直接引用这个类库,像在.NET2.0中开发一样,它的网址是:http://logging.apache.org/log4net/ 关于在Web中支持的问题 在我们开发项目时都会使用到config文件,可以在config文件中配置log4net。这一点Web项目和WinForm项目都是一样的。需要注意的是

2021-11-24 15:51:37    分类:博客    c#   asp.net   休闲   C#基础

System.Data.SQLite数据库介绍

SQLite介绍 在介绍System.Data.SQLite之前需要介绍一下SQLite,SQLite是一个类似于Access的单机版数据库管理系统,它将所有数据库的定义(包括定义、表、索引和数据本身)都保存在一个单一的文件中。并且,SQLite是一个用C实现的类库,它在内存消耗、文件体积、简单性方面都有不错的表现,如果数据在10W条以下,查询速度也是相当快的。 SQLite具有以下特征: 实现多数SQL92的标准,包括事务(原子性、一致性、隔离性和持久性)、触发器和大多数的复杂查询。 不对插入或者更新的数据进行类型检查,你可以将字符串插入到整数列中(这个可能让有些用户不太适应)。 支持Windows/Linux/Unix等主流系统,还支持嵌入式系统如Android或Windows Mobile。 System.Data.SQLite System.Data.SQLite是SQLite的加强版,它可以无需.NET Framework支持,由于它内部包含了一个ADO.NET 2.0引擎,所以.NET开发人员可以利用System.Data.SQLite方便地开发.NET程序。 System.Data.SQLite及SQLite也有一些限制,比如不支持行级及表级锁,当一个连接锁定数据库以用于写入数据,其它的数据库连接只能等待那个连接操作完成之后进行读写操作,SQLite

2021-06-02 18:37:32    分类:博客    数据库   system   Data   C#基础

ADO.NET与ORM的比较(4):EntityFramework实现CRUD

说明:个人感觉在Java领域大型开发都离不了ORM的身影,所谓的SSH就是Spring+Struts+Hibernate,除了在学习基础知识的时候被告知可以使用JDBC操作数据库之外,大量的书籍中都是讲述使用Hibernate这个ORM工具来操作数据。在.NET中操作数据库的方式有多种,除了最直接的方式就是使用ADO.NET之外,还可以使用NHibernate这个Hibernate在.NET中的实现ORM,如果你对第三方的ORM持怀疑态度,你还可以使用来自微软的实现、根正苗红的Linq或者EntityFramework。 大部分从早期就开始使用.NET开发的程序员可能对ADO.NET有种迷恋,使用ADO.NET可以充分将我们早期的SQL知识发挥得淋漓尽致,并且出于对性能的考虑,有些人对.NET中的ORM还保持一种观望态度,包括我自己也是这种态度。不过即使在实际开发中不用,并不代表我们不能去了解和比较这些技术,任何事物的出现和消亡总有其原因的,我们可以了解它们的优点和长处。所以本人抽出了几个周末的时间分别用ADO.NET、NHibernate、Linq和EntityFramework来实现对数据库单表数据的创建、读取、更新和删除操作,也就是所谓的CRUD(C:Create/R:Read/U:Update/D:Delete)。 通过实现相同功能的比较,大家自己判断那种方式更适合自己

2021-05-19 07:54:31    分类:博客    .net   ado.net   nhibernate   C#基础

接口(interface)原来是可以被继承(extends)的

在传统的教科书或者书籍中都会灌输我们一个观念,那就是抽象类可以被继承(extends),接口可以被实现(implements),但是抽象类不能被实现(implements),接口也不能被继承(extends),但是今天这个观点有些地方被颠覆了。 抽象类可以被继承(extends),接口可以被实现(implements),但是抽象类不能被实现(implements),这三个观点确实没有什么问题,但是接口却是可以被继承的,当然你也许会举一个类似下面的例子来证明接口是不能被继承的,代码如下:确实上面的代码不能被编译通过,会出现以下错误:也许你就想以上面的例子来证明我的观点是错误的,但是请看下面的例子:看看图中高亮部分代码,它是可以通过编译的,下面的编译结果: 另外在C#中我也做过测试,因为在C#中实现和继承没办法从类似于java的implements或者extends关键字看出来,它都是用:符号来体现的,不过看具体代码还是可以看出来的,请看下面一段代码: using System;using System.Collections.Generic;using System.Text;namespace Day2{ interface InterfaceA { int Add(); } interface InterfaceB : InterfaceA { int Minus(); }}

2021-05-11 19:27:17    分类:博客    职场   接口   休闲   C#基础

HTML解析利器HtmlAgilityPack

在以前的项目中周公曾有解析HTML的情况,当时是采用正则表达式一步步将无关的HTML注释及JS代码部分删除掉,然后再用正则表达式找出需要提取的部分,可以说使用正则表达式来做是一个比较繁琐的过程,特别是对于正则表达式不是很熟悉或者要处理的HTML很复杂的情况下。前一阵子周公还是通过这个办法将http://wz.csdn.net/zhoufoxcn上保存的网址导入到http://cang.baidu.com,本来还想将周公博客上的文章好好整理一下,但是考虑到使用正则真的是很繁琐也很麻烦,所以就一直没有动手。 直到前两天在网上发现了一个.NET下的HTML解析类库HtmlAgilityPack。HtmlAgilityPack是一个支持用XPath来解析HTML的类库,在花了一点时间学习了解HtmlAgilityPack的API和XPath之后,周公就做了一个简单的工具完成了这个功能,目前在CSDN上周公博文的收集地址为:http://blog.csdn.net/zhoufoxcn/archive/2011/06/23/6564578.aspx,在51CTO上周公博文的收集地址为http://zhoufoxcn.blog.51cto.com/792419/595327。HtmlAgilityPack是一个开源的.NET类库,它的主页是http://htmlagilitypack

2021-03-27 01:50:01    分类:博客    .net   c#   html   C#基础

在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求

这个需求来自于我最近练手的一个项目,在项目中我需要将一些自己发表的和收藏整理的网文集中到一个地方存放,如果全部采用手工操作工作量大而且繁琐,因此周公决定利用C#来实现。在很多地方都需要验证用户身份才可以进行下一步操作,这就免不了POST请求来登录,在实际过程中发现有些网站登录是HTTPS形式的,在解决过程中遇到了一些小问题,现在跟大家分享。 通用辅助类 下面是我编写的一个辅助类,在这个类中采用了HttpWebRequest中发送GET/HTTP/HTTPS请求,因为有的时候需要获取认证信息(如Cookie),所以返回的是HttpWebResponse对象,有了返回的HttpWebResponse实例,可以获取登录过程中返回的会话信息,也可以获取响应流。 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Security; using System.Security.Cryptography.X509Certificates; using System.DirectoryServices.Protocols; using System.ServiceModel.Security; using System.Net

2021-03-27 01:48:46    分类:博客    c#   http   https   C#基础

在.NET使用JSON作为数据交换格式

我们知道在.NET中我们有多种对象序列化的方式,如XML方式序列化、Binary序列化,其中XML序列化是一种比较通用的在各语言之间传递数据的方式。除了这两种序列化方式之外,在.NET中还可以使用JSON序列化。 JSON(JavaScript Object Notation)是一种轻量级轻量级的数据交换格式,并且它独立于编程语言,与XML序列化相比,JSON序列化后产生的数据一般要比XML序列化后数据体积小,所以在Facebook等知名网站中都采用了JSON作为数据交换方式。在.NET中有三种常用的JSON序列化的类,分别是System.Web.Script.Serialization.JavaScriptSerializer类、System.Runtime.Serialization.Json.DataContractJsonSerializer类和Newtonsoft.Json.JsonConvert类。 为了便于下面的演示,下面提供一个类的代码: [DataContract] public class User { /// <summary> /// 编号 /// </summary> [DataMember] public int UserId { get; set; } /// <summary> /// 用户名 /// </summary> [DataMember]

2021-03-27 01:47:10    分类:博客    .net   json   Newtonsoft   C#基础

在.NET数据库访问方面的Dapper类库介绍

在开发带数据库的.NET系统中我使用过各种方式,包括直接使用ADO.NET、使用基于ADO.NET封装的各类工具(其中有自己封装的)、还有各类ORM类库,比如NHibernate、MyBatisNet、Linq to SQL、Entity Framwrok等,在上面的工具或类库中,MyBatisNet一段时间曾是我的最爱:由于它基于XML的配置可以灵活适应一些特殊的场景,不过有时候在面对中小型项目时又觉得MyBatisNet有些大材小用,此外还有一个原因是MyBatisNet这个基于Java的MyBatis改造而来的项目最近几乎没有更新了。很早就听说过Dapper这个类库了,只不过一直没有尝试使用,但是很早就知道它是国外大型IT问答社区StackOverFlow最早开发并开源的。最近用了一下,感觉确实很方便。Dapper的源代码放在github上托管,并且可以用NuGet方式添加到项目中,只不过我现在开发的桌面软件有一部分用户还在使用WindowsXP系统,因此不能使用高于.NET Framrwork4.5以上版本开发且开发工具是Visual Studio 2015,这也限制了我不能使用最新版本的Dapper,于是我选择了Dapper 1.50.2这个版本。 我们可以在Visual Studio 2015中直接使用NuGet来添加,具体办法就是“工具”-“NuGet包管理器”-

2021-03-26 22:15:15    分类:博客    dapper   orm   Net   C#基础

.NET 产品版权保护方案 (.NET源码加密保护)

说 明:你希望自己用.net辛辛苦苦做出来的软件被人轻易破解吗?你希望自己花了大量人力物力用.net开发出来的产品被竞争对手轻易获取核心代码吗?这是 一篇比较详尽地介绍如何保护自己的.net源代码的文章,如混淆、加密和强名称等,出于保护原作者的角度,所以本人没有掐头去尾作为自己个人的文章,正因 为是全文转载,所以并不代表本人完全赞同作者的全部观点,也不代表本人本人提作者提到的软件做广告,这一点请大家注意,不要认为我为别人做广告而骂我,其 实我根本不认识作者。一. 前言 大家好,我是康世杰,大家可以叫我Jason。 我和大家一样,都是搞技术出身,也未当过讲师,所以口材有限,如果讲得不好之处,还希望大家多多海含,谢谢。 今天是我们第一次见面,能认识你们,真的很高兴。 下面我们不要耽误大家的宝贵时间,让我们马上开始上课吧。 DotNet 是 ms开发并推广的企业解决方案,也是Ms以后几年的核心发展战略之一,所以我觉得 DotNet 是有前途的,他有一个优秀的概念,还有一个强大的财团,想失败都很难啊。DotNet 缺乏的是大型企业高层管理人员对它的信心,这还需要时间和事例去证明,世界上待开发的大案件还很多,Java 和 DotNet 最终谁的市场比例多,现在还说不清楚。 二. 简介DOTNET 编译原理 相信大家都使用过 Dotnet ,可能还有不少高手

2021-03-26 20:18:49    分类:博客    .net   加密   产品   C#基础