随笔分类 - C#开发
摘要:整了一个支持通过ADO方式访问多种数据库(OLE,MySQL,SQL Server,Oracle)的 C# 库 Database。实现相当简单,用工厂方法创建各种数据库访问的 wrapper 类即可。
阅读全文
摘要:Signal 是微软支持的一个运行在 Dot NET 平台上的 html websocket 框架。它出现的主要目的是实现服务器主动推送(Push)消息到客户端页面,这样客户端就不必重新发送请求或使用轮询技术来获取消息。
可访问其官方网站:https://github.com/SignalR/ 获取更多资讯。
SignalR 的实现机制与 .NET WCF 或 Remoting 是相似的,都是使用远程代理来实现。在具体使用上,有两种不同目的的接口:PersistentConnection 和 Hubs,其中 PersistentConnection 是实现了长时间的 Javascript 轮询(类似于 Comet),Hub 是用来解决实时信息交换问题,它是利用 Javascript 动态载入执行方法实现的。SignalR 将整个连接,信息交换过程封装得非常漂亮,客户端与服务器端全部使用 JSON 来交换数据。
阅读全文
摘要:当 timeout = 0, 即 Sleep(0),如果线程调度器的可运行队列中有大于或等于当前线程优先级的就绪线程存在,操作系统会将当前线程从处理器上移除,调度其他优先级高的就绪线程运行;如果可运行队列中的没有就绪线程或所有就绪线程的优先级均低于当前线程优先级,那么当前线程会继续执行,就像没有调用 Sleep(0)一样。
当 timeout > 0 时,如:Sleep(1),会引发线程上下文切换:调用线程会从线程调度器的可运行队列中被移除一段时间,这个时间段约等于 timeout 所指定的时间长度。为什么说约等于呢?是因为睡眠时间单位为毫秒,这与系统的时间精度有关。通常情况下,系统的时间精度为 10 ms,那么指定任意少于 10 ms但大于 0 ms 的睡眠时间,均会向上求值为 10 ms。
阅读全文
摘要:在WPF开发过程中碰到一个需求,要求保证窗口大小不变,即便是双击 titlebar 也不能改变窗口大小和位置。要实现这样的效果,需要执行如下步骤:
1,分别设置窗口的 Width/MaxWidth/MinWidth, Height/MaxHeight/MinHeight的为相同的值,设置窗口的 ResizeMode 为 NoResize,设置初始状态为 Normal;
2,让窗口响应 WindowStateChanged 事件:StateChanged="OnWindowStateChanged",响应函数如下:
阅读全文
摘要:WCF 机制确实不错,虽然谈不上对它有多了解,但仅从应用的角度看,有两个显著:封装通信,契约编程。下面演练一个Demo 来看看如何将 WCF 部署在IIS里头。这个 Demo 服务器提供一个运算服务,该运算服务是部署在IIS中,客户端根据服务器契约调用该服务,得到结果。
阅读全文
摘要:今天发现 Log4Net 输出到不同数据库时,其 commandtext 使用的语法居然也不同,摸索了好一会,分享一下:
阅读全文
摘要:BeforeFieldInit 与类静态构造函数
阅读全文
摘要:使用 Open XML 操作文档模板自动生成报表:如何创建文档模板,通过编程方式修改模板内容,在这里只讲怎样修改文本和图片。
阅读全文
摘要:今天在使用 Entity Framework 处理并发冲突时,碰到一个奇怪的BUG:DBContext 实例和 Model entity 不在同一个命名空间下,Entity Framework 4.1 中的 GetDatabaseValues()就会抛出异常。经查证,这是 Entity Framework 4.1 的一个BUG。本文列出两种解决方案。
阅读全文
摘要:要在C#工程中根据不同的项目配置使用不同的 reference,而该 reference 路径是相对路径,这时我们可以修改 csproj 项目文件,在其中添加 reference 路径,如下示例:
阅读全文
摘要:EF对Sql Server的支持非常好,无论是Code First,还是 Model First 还是 Database First 都支持的很好,但是对非微软系数据库的支持就不那么友好了,现在唯一能保证的是对大部分数据库的 Database First 支持的很好。所以在这里,我们让 Entity framework 支持多数据库实现的思路就是基于 Database First 的。首先在各数据库中创建好数据库表(这里有很多讲究的地府,字段类型必须一致,可以使用Power Designer工具来简化手工劳动),再基于某一数据库生成概念模型,存储模型以及映射关系,然后拷贝生成的存储模型文件并修改,使之能与其他数据库匹配起来,从而获得对多数据库的支持。
本示例演示了对Sql Server 2008和MySQL 5.5两种书库的支持,使用的 MySQL Connector Net 6.3.5。请参考前文安装相关的软件。下面讲述具体步骤:
阅读全文
摘要:本文讲述了在VS2010中使用NHibernate 3.2与MySQL的一个简单示例。
阅读全文
摘要:本文讲述了在VS2010中使用Entity Frame与MySQL的一个简单示例。
阅读全文
摘要:条款21:限定类型的可见性
并非所有人都需要知道所有事。也并非你创建的所以类型都需为public。你应只赋予每个类型用来完成你工作所必须的最小的可见性,通常比你能想象的还要少。内部或私有类型能实现public接口,所有客户都可以访问由在私有类型中声明的public接口定义的功能
创建public类型实在是太容易了,并且,通常那样做也是适宜的。许多独立存在的类都应该是内部的,还可以在类中创建protected或private嵌套类来进一步限制其可见性。一个类的可见性越少,在对整个系统更新时所须做的改动就越少;可访问一段代码的地方越少,在对之进行修改时所须做的改动也就越少。
阅读全文
摘要:题记:网络中已不乏[Effective C#]的中文翻译版,中文版本也已出版,但是内容比较老,不是最新版(C# 4.0),这就是我翻译该系统文章的原因之一;本人虽然胡乱码过几年C/C++,Java,Objective-C,但却是C#新手,一边翻译一边学习是我翻译该系列文章的原因之二。因为是新手,错误疏落难免,还请各位指正。版权申明:[Effective C# 4.0 译]系列翻译文章仅为学习爱好之用,遵循“署名-非商业用途-保持一致”创作公用协议,请支持英文正版。
第三章 用C#表达你的设计
初学者设法使用外语(人类语言)进行交流。他们学得词汇,也能够把它们拼凑起来以表达他们的观点。在从初学者过渡到语言专家的过程中,他们开始使用这门外语中合适的惯用语。这样,该门外语就变得不再那么“外”了,他们开始能更有效,更清晰说这门外语。编程语言也是如此。你所选择的技术能够让你的设计意图与那些维护,扩展或使用你开发的软件的开发人员交流。C#类型都生存于.NET环境下,该环境对所有类型的能力作了一些假设。如果你违反这些假设,你就增加类型不能正确工作的可能性。
本章的这些条款不
阅读全文
摘要:《C#与.NET高级程序设计》读书笔记-隔离存储,序列化
阅读全文
摘要:《C#与.NET高级程序设计》读书笔记-CIL和动态程序集
阅读全文
摘要:《C#与.NET高级程序设计》读书笔记-多线程
阅读全文
摘要:《C#与.NET高级程序设计》读书笔记-类型反射,晚期绑定,进程,对象上下文
阅读全文