文章标签 ‘C#’

[转载]利用log4net记录操作日志 – justconnor – 博客园. 1,目的:将用户操作日志写入SQL server 数据库中 2,实现步骤: 一,下载log4net.dll (推荐从官网下载 http://logging.apache.org/log4net/download_log4net.cgi) 二,在项目中引用 log4net.dll 三,添加一个配置文件:我这里命名为 log4net.config(也可以在web.config里面配置为便于管理故新建了一个配置文件) View Code <!–?xml version="1.0"?–> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net "></section> <!–这里是表示是记录1 条到缓冲区,满1条后再写入SQL server 可根据需要自定义配置–> 四,在项目的 AssemblyInfo.cs 文件的指定log4net 的配置文件路径 [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] 五,自定义记录函数 View Code   public static void Operate_Log(string operateType, string describe) { log4net.ILog logToSQL = log4net.LogManager.GetLogger("iNotes"); [...]

2012年5月17日10:55 没有评论

[转载]嘿,原来不认识你,想不到你这么好用—说说.NET中被我忽视的方法 – Gyoung – 博客园. NET中有些方法以前没有接触过,但用过了之后让人眼前一亮,哇,原来你这么好用。 下面就说说被我忽视过的方法。当然,每个人的编程经历,涉猎面及对.NET的认知程度都不一样。所以,这只是一家之言,肯定有很多不足之处,欢迎大家批评指正。 1. ADO.NET类 DataTable.Merge() 如何合并两张表?自己以前写的方法: private void UniteTable(DataTable sourceTable, DataTable targetTable) { foreach (DataRow row in sourceTable.Rows) { DataRow newRow = targetTable.NewRow(); //将sourceTable中row的值赋给对应的targetTable中的row newRow["column1"] = row["column1"]; //… targetTable.Rows.Add(newRow); } } 哎,这个方法很傻很天真吧,其实DataTable中早就提供了合并两张表的方法,就是DataTable.Merge()。合并两张表,只要一条语句就行: targetTable.Merge(sourceTable); DataRow.ItemArray 结构相同的情况下,如何将一行的值赋给另一行?自己以前都这样写: DataRow row1 = table1.Rows[0]; DataRow row2 = table2.Rows[0]; row1["column1"] = row2["column1"]; row1["column2"] = row2["column2"]; //… [...]

2012年5月8日15:12 没有评论

[转载]跟我一起制作数据采集-获取淘宝网店宝贝数据信息(一) – Eckel Cheung – 博客园. 创建项目并绘制界面 打开Visual Studio并创建一个基于.net 4.5的WPF项目:GetTaoBaoItems 之所以采用4.5是因为后面我们将要用到里面免费的新的异步编程特性. 绘制如下主界面:   下载网页 我们知道要进行网络数据采集必不可少就要下载网页内容,因此我们首先需要构建一个下载网页内容的函数: 注意using System.Net   我们下载哪个网页了? 我们可以通过类似网址查看一个店铺的所有宝贝: [淘宝店铺地址]/search.htm,如下图所示: 如上图红圈所示,宝贝是分页显示的那么第二页的地址在哪里了?我们选择第二页: 我们可以得知第k页的网址是: [淘宝店铺地址]/search.htm?search=y&viewType=grid&orderType=_newOn&pageNum=k#anchor 因此我们就可以得知我们要下载的内容应该是这样的: 先下载第一页的内容并获取红圈所示的总页数,然后下载第二页到最后一页.   下载第一页并获取总页数 为获取按钮添加点击按钮事件并在里面添加下载第一页的内容: 下面我们将要讲解我们怎么来获取页面总页数这个数据. 我们这里开始将要用到正则表达式,大家最好先到如下网页进行一定基础的了解: http://www.yesky.com/imagesnew/software/vbscript/html/jsgrpRegExpSyntax.htm 先添加如下引用: 然后在获取按钮点击事件里添加如下代码: 运行程序并点击获取按钮: 现在将这段代码重构为函数GetPageCount:   获取宝贝信息 我们当把某一页网页下载回来之后要做的就是对该网页进行分析,如下代码所示: 运行一下: 那么下面我们将上面的代码重构为函数AnalyPages: 运行代码:   将数据显示到界面上 我们先添加如下内容来存储数据: 将其绑定到listbox: 修改之前的函数AnalyPages: 运行程序:   对程序进行异步改造 先将下载网页的函数修改如下: 修改使用到了此函数的所有函数: 我们还需要对函数AnalyPages进行二次改造因为这里将会下载数百网页: 我们重构一下循环的内部部分: 改写下AnalyPages本身: [...]

2012年4月14日08:48 评论关闭

[转载]C# #if, #else和#endif预处理指令 – Peter Luo – 博客园.     #if 使您可以开始条件指令,测试一个或多个符号以查看它们是否计算为 true。如果它们的计算结果确实为true,则编译器将计算位于 #if 与最近的 #endif 指令之间的所有代码。例如, 1 #if Debug 2 string file = root + “/conf_Debug.xml”; 3 #else 4 string file = root + “/conf.xml”; 5 #endif 复制代码     这段代码会像往常那样编译,但读取Debug配置文件包含在#if子句内。这行代码只有在前面的#define命令定义了符号DEBUG后才执行。当编译器遇到#if语句后,将先检查相关的符号是否存在,如果符号存在,就只编译#if块中的代码。否则,编译器会忽略所有的代码,直到遇到匹配的#endif指令为止。一般是在调试时定义符号DEBUG,把不同的调试相关代码放在#if子句中。在完成了调试后,就把#define语句注释掉,所有的调试代码会奇迹般地消失,可执行文件也会变小,最终用户不会被这些调试信息弄糊涂(显然,要做更多的测试,确保代码在没有定义DEBUG的情况下也能工作)。这项技术在C和C++编程中非常普通,称为条件编译(conditional compilation)。 参考msdn实例: // preprocessor_if.cs #define DEBUG #define VC_V7 using System; public class MyClass { static void Main() { #if [...]

2012年4月7日16:20 评论关闭

[转载]浅谈.NET反射机制的性能优化 – 陈彦铭 – 博客园. 在进入解释型模版引擎的探讨之前,我决定先分享一下这篇博客。因为在解释型引擎里将会引入反射的概念来实现更多、更复杂的功能。可能大家谈到反射面部肌肉都开始抽搐了吧!因为在托管语言里面,最臭名昭著的就是反射!它的性能实在是太低了,甚至在很多时候让我们无法忍受。不过不用那么纠结了,老陈今天就来分享一下如何来优化反射! 概述 本文涉及到的反射优化的途径有如下两种: 通过Delegate.CreateDelegate()创建委托进行优化 通过.NET4的动态运行时进行优化 如果您还知道其他更加有效的优化途径,请不吝赐教! 准备工作 今天我们总计要对比五种不同的调用对象成员的方式,也算是一种性能测评。 在开始之前,我们首先定义一个简单的对象和一个方法,以供测试之用: namespace ReflectionOptimization { public sealed class TestObject { public int Add(int a, int b) { // 简单演示 return a + b; } } } 这个类非常简单,只提供了一个方法,这个方法返回两个整形的和。接下来我们看看执行时间测量的代码,很简单,想必您已经驾轻就熟了: private static double _Run(string description, Action action, int a, int b) { if (action == null) [...]

2012年4月7日13:46 评论关闭
备案信息:冀ICP备10007948号