03 2012 档案
摘要:今天在开源社区看到某个人问如何将表里某列字符串按照group by的分组连接成一个字符串,相当于字符串版的sum函数。想了半天没想出好办法。最后突然想起来SqlServer可以用CLR写函数,所以用C#写了个聚合函数。代码基本参考了msdn上下面的例子,喜欢原版的可以直接看msdn: http://msdn.microsoft.com/zh-cn/library/ms131056.aspx 折腾步骤:在VS2010里面创建一个Visual C# Sql CLR 数据库项目(数据库=>SQL Server=>C# Sql CLR 数据库项目),创建提示中需要输入数据库信息。注意将.N
阅读全文
摘要:我们经常会把一些树形的结构放在一张表里,例如家谱,菜单等。这种表最大的问题就是当我们需要查询某个记录的所有子记录时,很难用简单的sql搞定。我们可以专门写个过程来做这种事情,下面是我写的一个例子: 树形结构表存放的是家谱,表比较简单,结构如下: 家谱表CREATE TABLE `people` ( `id` INT(11) NOT NULL, `name` VARCHAR(50) NULL DEFAULT NULL, `pid` INT(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`)); 下面是查询所有后代的过程:查询子...
阅读全文
摘要:最近一个项目有个页面导航的需求,就是在总页面里支持子页面的跳转,同时记录跳转历史,实现向后向前跳转的功能,类似浏览器的向前向后导航按钮。子页面我简单的用iframe实现了,跳转历史跟踪参考了一下Asp.Net本质论的一个例子,这里把整个代码分享一下。 最核心的是导航组件: public class PathNavigator : Control { private Stack<string> _prevs = new Stack<string>(); private Stack<string> _nexts = new Stack<string>
阅读全文
摘要:调用.Net重载函数Python里面没有函数重载,所以调用.net中的重载方法会出现问题,这时我们可以按照下面格式调用:类.方法.Overloads[方法类型列表](方法参数)例子 :BitConverter.ToString(BitConverter.GetBytes.Overloads[System.Double](10.2))...
阅读全文
摘要:存储过程和游标核心: #变量必须声明在最前面 declare noMoreRows bool default false; declare _id int; declare _name varchar(25); #声明游标 declare xxRows cursor for select * from xx; #当游标移动到最后空行时设置noMoreRows为true declare CONTINUE handler for NOT FOUND set noMoreRows=true; #打开游标 ...
阅读全文
摘要:条件表达式:(?(if)then|else)说明:if是分组名称或序号,如果是命名分组匹配,也就是格式为(?<name>xxx)的,则为名称name;如果是普通分组,也就是格式为(xxx)的,则为序号。 then是分组匹配时要匹配的项, else是分组不匹配时要匹配的项。例子:表达式是'(<(?<tag>\w+)\s+[^>]*\s*>)?\w+(?(tag)</\k<tag>>)', 用来匹配超链接标签。 要匹配的字符串是'<a href='idiot.com'>alala&
阅读全文
摘要:mysql auto_increment 在 innodb 和 myisam 中的区别
阅读全文
摘要:C#有三种计时器,一个只能在winform 之类的窗口程序之中用,后台能用的只剩下了System.Timers.Timer和System.Threading.Timer, 但这两个计时器都不完备,我们业务中遇到的一些特殊需求无法满足,比如同一时间计时回调不能同时执行等。于是,我花了点时间包装了两个新计时器,一个支持任务串行化(计时器委托在同一时间只有一个执行),一个支持固定延迟(保证上次任务执行结束和此次任务执行开始之间时间恒定)。1. 恒定频率计时器(支持串行化)。 封装的FixedRateTimer类:C# /// <summary> /// 频率恒定计时器 ///...
阅读全文
摘要:最近做后台发现很多地方需要队列,我用东西一般有两个要求: 1) 够傻够简单。 2) 有源码,能看又能改。 最后相中了0mq,下面介绍如何安装和写个简单的例子。一. linux平台:ubuntu&python。安装软件下载页面:http://www.zeromq.org/intro:get-the-software1. prerequisites安装:sudo apt-get install libtool autoconf automake uuid-dev build-essential2. 下载解压安装包:wget http://download.zeromq.org/ze...
阅读全文
摘要:昨天工作不忙,脑袋又开始抽抽了,从linux shell的管道想到java的piped stream,从.net的工作流想到了自来水管,从自来水管想到了一个城市复杂的下水道系统( 这都想的啥:( )。反正不管怎么说,最后还是相处了点东西,跟大家扯扯淡。 作为一个程序员,我们写代码的时候经常会发现越写越乱,这一般是没有做好设计的缘故。怎么设计,简单的来说就是画一些流程图啊、类图什么的。不过有时候画了也不顶事,搞到最后还是很乱。其实我觉得画不画图无所谓,关键是脑子里要想清楚,想的太乱的时候可以画画图理一理思维,但最终还是要在脑子里搭个模型出来。软件系统说白了就是一个数据处理器,一坨数据进去,...
阅读全文
摘要:最近做了个后台服务需要多台机器同时执行若干任务,我在数据库里给每个任务配置了一个机器的ip地址,以便让每台机器上的服务启动的时候知道哪些任务是自己要执行的。结果为了个小问题折腾了半天,那就是服务如何获取本地ip地址。下面是代码,一般取第一个地址就OK了。 foreach( IPAddress ip in Dns.GetHostAddresses(Dns.GetHostName())) { if(ip.AddressFamily == AddressFamily.InterNetwork) { ...
阅读全文
摘要:最近经常做小项目,如果想代码写的靠谱点就必须用到日志,但是常用的日志框架,比如企业库或者log4net都要配置个半天,如果想自定义某个功能也比较麻烦。没办法自己实现了个傻瓜日志类,代码很土鳖,不过简单易改,无配置。 public static class SBLogger { static SBLogger() { _LogDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"Log"); if (!Directory.Exists(_LogD...
阅读全文
摘要:在.Net里用正则的时候,有一些选项会给我们很大帮助,选项一般以一个字母表示,在使用的时候我们可以在构建Regex类的时候在构造方法里面用枚举或的方式传入, 如下面: Regex r = new Regex(@"\w+", RegexOptions.Compiled | RegexOptions.IgnoreCase); 也可以直接放在正则表达式字符串的前面, 格式为 (?{选项列表}){正则表达式} 例如'(?i)abc'中的i表示忽略大小写,对应枚举RegexOptions.IgnoreCase。下面介绍几个常用的选项:1. 单行模式:n,RegexOp
阅读全文
摘要:最近做一些东西经常用到正则表达式,而且经常改动。如果把正则写成常量,需要转义,看起来很坑爹。如果配置到xml,一个麻烦,另外xml特殊字符也需要转义,仍然坑爹。为了能让正则表达式可配置,看起来又好维护,我将正则表达式放到一个txt里面,每行一个,格式为{name}##{regex},同时支持#开头的注释。下面是加载解析代码: /// <summary> /// 正则表达式加载类 /// </summary> internal static class RegExps { static RegExps() { ...
阅读全文
摘要:在处理很多IO逻辑时或者想在做后台计算时,我们都会用到并发。并发简单的分两种类型,一种是计算密集型,一种是IO密集型, 下面先介绍一下。1. 计算密集型: 如果我们把线程里面处理的事情看做一个任务,计算密集型就是这个任务主要做的事情是处理计算和逻辑,换句话说就是主要吃CPU。计算密集型的一个典型场景是在客户端程序后台做一些耗时的计算来避免界面假死。计算密集型任务并发处理,除了能避免某些线程阻塞外(比如界面假死),还能充分利用CPU资源,现在的PC机和笔记本一般都是双核或者4核,服务器更可能有好几个CPU,这样并发执行可以让计算机同时执行多个任务。2. IO密集型:IO密集型任务里面一般...
阅读全文
浙公网安备 33010602011771号