摘要: 有天晚上还没睡着的时候,突然想起以前做课程设计时,有同学搞那个公交线路查询,老师上课时还提过什么只能查出换乘两次的线路,我不知道是那程序限制了换乘的次数还是那个算法查不出换乘两次以上的线路了,如果是后者,那个算法就有点糟糕。后来就想,如果给我做的话怎么做呢,别人写公交查询,我这个列车迷就写个地铁线路查询,其实感觉地铁的比公交的简单多了。 这样的线路查询,说白了其实也是图的遍历问题,大二学数据结构的时候,在课上老师有说到图的遍历算法能解决线路查询问题,也说到某些物体移动的动画,图能搞出来。后者我完全不明白了。前者我现在还能用得上。 最直接的方法,就把各个站点作为一个结点连在一起,成为一个... 阅读全文
posted @ 2013-04-19 08:30 猴健居士 阅读(5585) 评论(26) 推荐(11) 编辑
摘要: 上一次的博文说错了东西,幸好有园友指出。才把错误改正过来,顺便也把利用SocketAsyncEventArgs进行Socket异步通信这方面的知识整理一下。 之前看了网上的代码,每进行一次异步操作都new 一个SocketAsyncEventArgs对象,然后网友评论太浪费资源了,于是就误以为用BeginXXX进行Socket异步通信会更优,幸好有园友指出我的误区,再看了这篇文章《net3.5与.net2.0 Socket性能比较》之后才发现SocketAsyncEventArgs是.NET Framework 3.5才出现的,而IAsyncResult是.NET Framework ... 阅读全文
posted @ 2013-04-16 12:44 猴健居士 阅读(10965) 评论(15) 推荐(6) 编辑
摘要: 异步这个词以前在课堂上也听过,那时候只是听,直到在做项目的时候用到多线程,在体会到异步是怎样的,到最近做的东西对异步更加深刻了,进程通信时调Windows API SendMessage和PostMessage的区别。最近搞的Socket编程也是有异步的,Socket当然要有异步才行,不然服务端Accept一次就卡一次在那里,客户端Connect一次就卡一次。每Send一次,Receive一次都会卡一次,这样不好。 在网上谷歌过一下,发现Socket的异步可以有两种方式,一种是用 SocketAsyncEventArgs 配合AcceptAsync,SendAsync,ReceiveAs... 阅读全文
posted @ 2013-04-13 13:52 猴健居士 阅读(7272) 评论(14) 推荐(0) 编辑
摘要: 这篇文章橙色的文字都是废话,不耐烦的园友可以跳过那些文字。包括这句话。 最初接触Socket编程的是在学校的java课上,可那时候没心学java,老师讲的Socket也没怎么理会,上机操作时,上网拷了一段C#的客户端和服务端代码,分别与java写的服务端和客户端进行通信。至于整个通信流程是怎样的没理会,直到写上一篇博文时才清楚。 还记得那时候上课老师问过如果一个服务端要跟两个客户端通信,那怎么办?接着他复制粘贴了一下创建Socket,绑定,监听那几行代码。1 ServerSocket ss1 = new ServerSocket(8081);2 Socket s1 = ss1.acce... 阅读全文
posted @ 2013-04-10 12:52 猴健居士 阅读(19569) 评论(2) 推荐(3) 编辑
摘要: 基础比较差,知识不够全面,Socket编程方面还是个空白页,网上关于这方面的文章不少,学习了之后,做一下笔记。关于Socket的概念等基础知识我就不想累赘了。本文只想通过跟实际的事情的类比来记忆一个很简单的Socket编码过程。好,直奔主题。话说有个呆子A君,想干这个客服,他就先搞到一个能正常通话的手机,能正常通话肯定会有电话号码。那么客服人员A君,向外公布了他的客服电话,管他是通过什么途径,总之有人知道就行了。总之这个A君就等啊等啊 等着他的电话响。花开两朵各表一枝。有个茂利B君也不知通过什么途径得到了A君的电话,于是B君掏出他的山寨手机。B君迅速拨号,嘟嘟嘟。。。。与此同时,A君的电话响了 阅读全文
posted @ 2013-04-05 13:21 猴健居士 阅读(3902) 评论(13) 推荐(1) 编辑
摘要: 背景对于.NET 原本提供的DataGridView控件,制作成如下形式的表格是毫无压力的。但是如果把表格改了一下,变成如下形式传统的DataGridView就做不到了,如果扩展一下还是行的,有不少网友也扩展了DataGridView控件,不过有些也只能制作出二维的表头。或者使用第三方的控件,之前也用过DevExpress的BoundGridView。不过在没有可使用的第三方控件的情况下,做到下面的效果,就有点麻烦了。那得自己扩展了,不过最后还是用了一个控件库的报表控件,Telerik的Reporting。不过我自己还是扩展了DataGridView,使之能制作出上面的报表。准备学习了一些网友 阅读全文
posted @ 2013-04-03 08:29 猴健居士 阅读(6472) 评论(17) 推荐(13) 编辑
摘要: 近日与同事聊天提及到进程通信,还没搞过,于是就谷歌一下。发现实现进程通信的方法也不只一种,调用Windows API的,用IPC通道的,共享内存,利用Socket、配置文件、注册表等等。我后来尝试的只有IPC通道和Windows API。而用API的还有分同步的SendMessage和异步的PostMessage。目前来看用API的大部分都是用SendMessage。我也分别介绍一下吧。IPC通道用IPC通道其实是Remoting里的其中一种,这种方式用起来感觉有点像Web Service。首先定义一个类,这个类供通讯的目标进程调用。 1 public class IPCMessa... 阅读全文
posted @ 2013-03-29 14:20 猴健居士 阅读(1961) 评论(4) 推荐(3) 编辑
摘要: 读写Ini文件,可以使用最直接的方法——文件IO,可是分析ini文件里的各个节、参数又要自己分析,使用流时又要注意资源的释放,故懒人就用系统的API了。这个Helper类一点也不复杂。 1 [DllImport("kernel32")] 2 private static extern long WritePrivateProfileString(string section, string key, string val, string filePath); 3 4 [DllImport("kernel32")] 5 priva... 阅读全文
posted @ 2013-03-26 14:24 猴健居士 阅读(391) 评论(0) 推荐(0) 编辑
摘要: 有不少园友指点,用NPOI操作Excel会比用ADO.NET 和COM 要好,于是尝试一下用NPOI封装一个ExcelHelper,在使用本类之前,要添加NPOI.dll引用。要添加两个个命名空间 using NPOI.SS.UserModel;using NPOI.HSSF.UserModel;类代码如下: 1 public class NPOIExcelHelper 2 { 3 #region 公共方法 4 5 #region 导出 6 7 /// 8 /// 数据导出 9 ... 阅读全文
posted @ 2013-03-19 18:45 猴健居士 阅读(1046) 评论(2) 推荐(1) 编辑
摘要: 近日突发奇想,封装一个Excel的帮助类,好让日后做一些Excel操作时方便一点,至少导入导出会方便点吧。不过在封装过程中发现自己太差劲了,问题多多,搞这么百来行代码花了很长时间,于是写篇日志,记录一下这个ExcelHelper,也顺便记录一下封装过程中遇到的一些问题。整个Helper中包括了读和写两部分,读是利用ADO.NET的OleDB进行读,与查询SQL Server很相像,查询语句是这种形式SELECT * FROM [Sheet1$A1:A10]“$”符号后面可以加一个范围,表明要读取哪一部分,如果不加的话就表明全表读取了。下面则是读那部分的方法,一个是通用的查询,另一个则是导入 1 阅读全文
posted @ 2013-03-14 19:16 猴健居士 阅读(5636) 评论(10) 推荐(4) 编辑
摘要: 本文只列举一个压缩帮助类,使用的是有要添加一个dll引用ICSharpCode.SharpZipLib.dll。另外说明一下的是,这个类压缩格式是ZIP的,所以文件的后缀写成 .zip还有,如果用这个类来解压rar格式的压缩文件时会报错,就网上说的那个"Wrong Local header signature: 0x21726152"异常。只要解压ZIP压缩格式的压缩文件就不会报错了。 下面就是Helper类的代码 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using 阅读全文
posted @ 2013-03-06 18:05 猴健居士 阅读(1654) 评论(0) 推荐(0) 编辑
摘要: 日前收到一个小任务,要做一个通用的在线升级程序。更新的内容包括一些dll或exe或、配置文件。升级的大致流程是这样的,从服务器获取一个更新的配置文件,经过核对后如有新的更新,则会从服务器下载相应的文件更新到被升级的程序目录下。如果被升级的程序在升级之前已经启动,程序则会强制关闭它,待到升级完成之后重新启动相应的程序。在升级之前程序会自动备份一次,以防升级失败造成程序不能运行。首先来的是数据实体 1 public class FileENT 2 { 3 public string FileFullName { get; set; } 4 5 ... 阅读全文
posted @ 2013-03-03 09:47 猴健居士 阅读(2795) 评论(5) 推荐(3) 编辑
摘要: 做了几个项目,有接触过MVC,不过不是用微软定义的那套MVC的框架,是别人写的一个很简单的MVC框架。因此对于微软的那个MVC框架,无论几点零版本的。鄙人还不会用。近日从 lulu Studio的系列博文 《ASP.NET MVC 入门系列教程》从头学起。 先对项目简单了解一下 在上图中可以明显的看到MVC那三个玩意了:代表M的模型(Model),代表V的视图(View),代表C的控制器(Controller)。就是下图这个经典的品字形图,了解过MVC的肯定见过。 图上原本有的一些文字就不列出来的,但光看这些东西还是对MVC一头雾水的。至少请求的过程还不知道是什么回事。那就回到还没用... 阅读全文
posted @ 2013-02-14 17:00 猴健居士 阅读(7266) 评论(13) 推荐(3) 编辑
摘要: 先来一段客套话 SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至今已经有12个年头,SQLite也迎来了一个版本 SQLite . 阅读全文
posted @ 2013-02-09 09:24 猴健居士 阅读(4969) 评论(3) 推荐(3) 编辑
摘要: 本文定义了一个DBHelper类,是SQLite的。需要添加一个System.Data.SQLite的dll,可以到SQLite的官网下载。类的代码如下 1 using System; 2 using System.Data; 3 using System.Data.SQLite; 4 using System.Configuration; 5 using System.Collections; 6 7 namespace Common 8 { 9 public abstract class SQLiteHelper 10 { 11 //Da... 阅读全文
posted @ 2013-02-08 20:49 猴健居士 阅读(1047) 评论(1) 推荐(0) 编辑
摘要: 汇总一下各种数据库查询数据库里所有表的名称及指定表的字段及其数据类型的SQLSQL Server1 select name from sysobjects where type='U' --表2 sp_columns 'TableName' --字段信息3 SELECT [name] FROM Sy... 阅读全文
posted @ 2013-02-07 22:51 猴健居士 阅读(919) 评论(1) 推荐(0) 编辑
摘要: 本文记录各种数据库与.NET类型的对照,包括Oracle,SQL Server,MySQL,SQLite首先是Oracle的 序号Oracle数据类型.NET类型1BFILEbyte[]2BLOBbyte[]3CHARstring4CLOBstring5DATEDateTime6FLOATDecimal7INTEGERDecimal8INTERVAL YEAR TO MONTHInt329INTERVAL DAY TO SECONDTimeSpan10LONGstring11LONG RAWbyte[]12NCHARstring13NCLOBstring14NUMBERDecimal15NVA 阅读全文
posted @ 2013-02-07 22:23 猴健居士 阅读(951) 评论(1) 推荐(0) 编辑
摘要: 在开发基于三层架构的项目初期,都会按照数据库的表结构定义一堆的实体类,但是一个表里有那么多的字段,一个库又有那么多个表,建这些实体类的工作量不少,作为一个懒人,肯定想些法子解决这么麻烦的问题。写一个实体生成器。 为了生成器能兼容各仲类型的数据库,我把生成器的架构定义成如下形式 还是说明一下吧!在数据库的上一层定义了各种数据的Controler,负责建立各种数据的连接等等,在DAL的每一个类都实现IDAL接口,每一种数据库的DAL类都定义了各自查询SQL,在BLL处通过读取配置,获知当前需要对哪个类型的数据库操作,再通过反射机制动态生成相应的DAL实例。这样如果再有新的数据库类型,只要添... 阅读全文
posted @ 2013-02-05 22:59 猴健居士 阅读(2896) 评论(11) 推荐(3) 编辑
摘要: 经过一整天的折腾,总算对手动配置WCF有些感觉了,于是写篇博文记录一下心得。根据蒋金楠老师的博文所说的, WCF的终结点有三个要素组成,分别是地址(Address)、绑定(Binding)和契约(Contract),简记可写成Endpoint = ABC。地址:地址决定了服务的位置,解决了服务寻址的问题。绑定:绑定实现了通信的所有细节,包括网络传输、消息编码,以及其他为实现某种功能对消息进行的相应处理。绑定的类型包括BasicHttpBinding、WsHttpBinding、NetTcpBinding等。契约:契约是对服务操作的抽象,也是对消息交换模式以及消息结构的定义。以上这些内容摘抄自蒋 阅读全文
posted @ 2013-01-27 10:31 猴健居士 阅读(3321) 评论(12) 推荐(6) 编辑
摘要: js获取键盘按键的键码event.keyCode,下面则是键盘的键码分布,记录一下,以备不时之需。 阅读全文
posted @ 2013-01-21 14:33 猴健居士 阅读(470) 评论(0) 推荐(0) 编辑
摘要: 最近做的一个Web项目需要对URL进行过滤,在网上搜了一下,知道J2EE有个Filter的东西,而在.NET方面,其实也可以实现。 下面是类的定义。 为了实现过滤的效果,Filters类需要实现IHttpMoeld接口,实现该接口需要有两个方法,一个是Dispose,另一个是Init。Init的参数 阅读全文
posted @ 2013-01-20 22:13 猴健居士 阅读(3458) 评论(4) 推荐(3) 编辑
摘要: 第一次写jQuery插件。自己感觉写的也不怎么样。写jQuery插件利用的就是这个东东jQuery.fn,例如jQuery.fn.pluginName=function(){};这个是我写的分页插件的样子插件通过一个外放的函数来进行翻页操作,无论是点击前进、后退、还是改变页面大小,都会调用该函数。先看看插件的代码结构 1 (function ($) { 2 3 //存放插件所需的属性字段 4 var PagerFields = { 5 }; 6 7 //插件的私有函数 8 ... 阅读全文
posted @ 2013-01-19 18:16 猴健居士 阅读(4008) 评论(3) 推荐(2) 编辑
摘要: 第一次自主封装Util类,尝试封装一个日志的操作类LogUtil,逻辑不复杂,也没调用那些复杂的类,只是简单的IO操作。 1 using System; 2 using System.IO; 3 4 namespace Common 5 { 6 /// <summary> 7 /// 日志类 8 /// </summary> 9 public static class LogUtil 10 { 11 /// <summary> 12 /// 配置默认路径 13 /// </summary... 阅读全文
posted @ 2012-12-31 17:08 猴健居士 阅读(4896) 评论(2) 推荐(0) 编辑
摘要: 在Web的应用方面有js的插件实现自动完成(或叫智能提示)功能,但在WinForm窗体应用方面就没那么好了。TextBox控件本身是提供了一个自动提示功能,只要用上这三个属性:AutoCompleteCustomSource:AutoCompleteSource 属性设置为CustomSource 时要使用的 StringCollection。AutoCompleteMode:指示文本框的文本完成行为。AutoCompleteSource:自动完成源,可以是 AutoCompleteSource 的枚举值之一。就行了, 一个简单的示例如下textBox1.AutoCompleteCustomS 阅读全文
posted @ 2012-12-25 15:22 猴健居士 阅读(3939) 评论(5) 推荐(2) 编辑
摘要: LayoutControl是一个不错的布局控件,即使是程序在运行当中,用户也可以按照个人喜好进行布局。但是此时如果LayoutControl里放置了PictureEdit,有可能会引发异常,异常信息是:内存不足。如果是通过以下方式PictureEdit1.Image = Image.FromStream(MyFileStream);或者将[]byte转换成Image对象,在,内存不足的异常就会被抛出。这貌似是控件的一个bug。解决的办法是调用Bitmap构造函数,即PictureEdit1.Image =new Bitmap( Image.FromStream(MyFileStream)) ; 阅读全文
posted @ 2012-11-07 09:34 猴健居士 阅读(779) 评论(0) 推荐(0) 编辑
摘要: 滚轮翻页与传动的翻页更为方便,经过本人一番探讨与琢磨终于在XtraGrid的GridView中实现了鼠标滚轮翻页。我新建了一个组件继承原本的GridControl,在组件中添加了一个ImageList,专门存放一些资源图片。用于实现动态图的效果。添加一个自定义委托的参数与枚举,委托参数用于传递分页的信息。 public class PagingEventArgs : EventArgs { public int PageSize { get; set; } public int PageIndex { get; set; } } public... 阅读全文
posted @ 2012-10-20 11:56 猴健居士 阅读(1777) 评论(2) 推荐(1) 编辑
摘要: 支持多种类型的数据集合作为数据源 XtraGrid与传统的DataGridView一样,支持多种类型作为其数据源。下面例子是将DataTable, List<T>和数组分别绑定到XtraGrid里面。 //定义数据源List<Person> peopleList=new List<Person>{ { ID = 1, FirstName = "Magnus", LastName = "Hedlund", Sex = true, Birth = new DateTime(1999, 9, 9), Chinese = 60 阅读全文
posted @ 2012-10-17 12:00 猴健居士 阅读(2487) 评论(0) 推荐(1) 编辑
摘要: 支持多种类型的数据集合作为数据源 jqGrid可以绑定三种类型的数据:XML,JSON和数组。使用不同的数据类型主要是设置datatype属性,它的值分别为'xml','json','local'(数组)$("#grid1").jqgrid(........datatype: "xml",........); 下面则列举各种数据类型的格式 XML格式: <rows> <page></page> <total></total> <records 阅读全文
posted @ 2012-10-16 14:04 猴健居士 阅读(8764) 评论(1) 推荐(0) 编辑
摘要: 将JqGrid和XtraGrid拿来比较,觉得怪怪的,因为前者用于Web,后者是用于WinForm的。因此只能比较两者的功能优劣,实现某种功能、效果的方便性和效率。首先分别粗略介绍XtraGrid和jqGrid DevExpress是目前.net下最为强大和完整的UI控件库, XtraGrid是这个控件库中重要的控件之一。在XtraGrid中集成了大量的高级特征,所以使用它进行开发的人员只需要对其属性进行简单的设置或编 写少量的代码,就能创建出十分美观的界面,从而使开发的工作效率大幅提高。 特点如下完全支持ADO.NET,一闪而过的数据装入速度,XtraGrid充分利用内建的ADO.N... 阅读全文
posted @ 2012-10-15 13:20 猴健居士 阅读(1555) 评论(0) 推荐(1) 编辑
摘要: Script.NET本身没有实现调用脚本库的功能。如果将一堆已经定义好的函数放在一个脚本文件里头作为脚本库,要调用这个脚本库时只需要稍作改动就行。首先建立一个XML文档专门存放哪个脚本会调用哪些库,结构如下<?xml version="1.0" encoding="utf-8" ?><LibMapping> <MainScript scriptName=""> <LibScript libFileName=""/> </MainScript></Li 阅读全文
posted @ 2012-10-13 10:03 猴健居士 阅读(594) 评论(0) 推荐(0) 编辑
摘要: Script.NET (S#) 是一种允许为你的应用程序自定义行为,与本地.NET对象、类型和组件交互动态的脚本语言。托管应用程序本身可以改变一个xml配置脚本运行时的默认行为,更换绑定的方法,属性,构造原生的行为.NET类型,名称,函数和类型的解析等。Script.NET 支持以下平台:.NET Framework 2.0, 3.5Compact Framework 3.5Silverlight 4XBox (via XNA framework)下载地址:http://www.protsyk.com/scriptdotnet/versions/latest/新建一个控制台项目之后,添加Scr 阅读全文
posted @ 2012-10-09 17:58 猴健居士 阅读(686) 评论(0) 推荐(0) 编辑
摘要: 用LINQ进行连接查询,感觉挺别扭,还是用SQL比较舒服,故记录一下,以备后用。先把数据列出来 class Pet { public string PetName { get; set; } public string OwnerName { get; set; } } class Person { public string FirstName { get; set; } public string LastName { get; set; } } List<Person> persons = new... 阅读全文
posted @ 2012-09-27 09:40 猴健居士 阅读(2058) 评论(3) 推荐(0) 编辑
摘要: 最近在模仿师父搭一个框架,该系统原本是用MySQL数据库的,在析构函数理关闭MySqlConnection连接没有抛异常,可是我换成了SQL Server数据库,在析构函数里关闭SqlConnection连接,异常抛出来了:Internal .Net Framework Data Provider error 1。 网上的有个说法是不要析构函数里调用非托管类型。可是为什么用MySqlConnection时没事。还有另一种说法,把关闭连接(close())封装成方法,调用那个方法就行。可是我本来就已经将关闭连接封装了一个方法,照样是报错。 后来终于找到一个可行的解决办法了:在原本有析构函数的.. 阅读全文
posted @ 2012-09-12 23:30 猴健居士 阅读(644) 评论(0) 推荐(0) 编辑
摘要: 利用反射技术除了可以查看类的成员信息外,当然可以构造一个类的对象,并且给它的字段赋值,调用它的方法。下面列出这次主要用到的类及方法Assembly:使用 Assembly 类可以加载程序集、浏览程序集的元数据和构成部分、发现程序集中包含的类型以及创建这些类型的实例。返回类型方法名说明Assembly Load(String)通过给定程序集的长格式名称加载程序集。TypeGetTypes获取此程序集中定义的类型。 ObjectCreateInstance(String, Boolean)使用可选的区分大小写搜索,从此程序集中查找指定的类型,然后使用系统激活器创建它的实例。ObjectCreate 阅读全文
posted @ 2012-09-08 11:06 猴健居士 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 日前因需要将一个用C#写的控制台程序添加到windows 服务中。上网百度一下,搜到了诸如通过添加注册表的办法。尝试之后发现行不通。后来发现简单的控制台程序是不能通过这种方式添加到windows服务。正确的做法是在VS建一个windows服务,在Service1的OnStart和OnStop方法中添加相应的代码 protected override void OnStart(string[] args) { ////服务启动时执行代码 } protected override void OnStop() ... 阅读全文
posted @ 2012-09-04 23:41 猴健居士 阅读(848) 评论(2) 推荐(0) 编辑
摘要: 反射查看类的成员信息利用C#的反射机制,可以查看封装的类型的基本信息及元数据。本文中的示例则是利用反射机制来查看类的成员信息,包括字段,方法,构造函数。下面先列举示例中所用到的类Type: System.Reflection 功能的根,也是访问元数据的主要方式。使用 Type 的成员获取关于类型声明的信息,如构造函数、方法、字段、属性 (Property) 和类的事件,以及在其中部署该类的模块和程序集。(摘自MSDN)PropertyInfo : 发现属性 (Property) 的属性 (Attribute) 并提供对属性 (Property) 元数据的访问。ParameterInfo:发现参 阅读全文
posted @ 2012-09-02 13:06 猴健居士 阅读(623) 评论(0) 推荐(0) 编辑