摘要:
为了最简单地说明问题,我特地设计了一张这样的表。 一、GROUP BY单值规则 规则1:单值规则,跟在SELECT后面的列表,对于每个分组来说,必须返回且仅仅返回一个值。 典型的表现就是跟在SELECT后面的列,如果没有使用聚合函数,必须出现在GROUP BY子句后面。 如下面这个查询报错... 阅读全文
摘要:
为了最简单地说明问题,我特地设计了一张这样的表。 一、GROUP BY单值规则 规则1:单值规则,跟在SELECT后面的列表,对于每个分组来说,必须返回且仅仅返回一个值。 典型的表现就是跟在SELECT后面的列,如果没有使用聚合函数,必须出现在GROUP BY子句后面。 如下面这个查询报错... 阅读全文
摘要:
一、提出问题 不可避免地,我们都数据库总有一些字段是没有值的。不管是插入一个不完整的行,还是有些列可以合法地拥有一些无效值。SQL 支持一个特殊的空值,就是NULL。 在很多时候,NULL值导致我们的程序出现报错的现象,于是很多人就开始拒绝NULL值,想各种各样的方法来避免使用NULL值,但是很遗憾,NULL值恰恰就是满足我们的需要用于表示空值的。 空值经常存在于我们的数据库当中: 例如一个在职员工的离职时间。 例如一辆电力驱动的车的燃油消耗比。二、反模式 很多人对于NULL值感觉到恐惧,原因在于不知道什么时候就会因为一个NULL冒出一个报错。实际上都是由于对NULL值的理解有误引... 阅读全文
摘要:
多媒体文件已经广泛应用在很多程序当中。比如用户的头像,汽车的产品图片等等。 从我个人以往的经验来看,将文件的路径存储入数据库,然后文件本身存储于硬盘当中已是万年不变的解决方案。 其实,存储图片路径与存储图片文件本身,两种方案都有很好的立足点,但是大部分程序员都是将文件存储于数据库之外。虽然,这种方法没有什么大问题,但的确是存在一定的风险的。一、问题描述 下面就来论述一下关于将文件存储于数据库外部的缺点。 1、垃圾回收问题。 当你想删除一张图片时,你只能够删除掉数据库中的记录,图片文件是没有办法由SQL语句删除的,你必须在你的高级程序中维护着这些图片。保证在删除数据行的同时删除... 阅读全文
摘要:
一、说明问题 其实这篇非常简单,因为大家都是用这个方法解决的,我决定用自己的语言来描述清楚这一个问题。 假设,我们有一个列,这个列只能够取某些有效值。比如一个用户表,我们有一个姓氏列,我们需要限定里面的值为中国的姓氏,比如:赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨。二、反模式 对于这个问题,其实只有初学者可能会用这个方法,就是使用CHECK约束或者触发器来限定列的值,比如: CHECK (lastname IN ('赵','钱','孙','李')); 这样做的缺点如下: 1、获取所有可选值有困难,假设我要做个下拉列表,让用户选择可供输入的 阅读全文
摘要:
在NHibernate中,ISessionFactory是线程安全的,对应一个数据库。它是生成ISession的工厂。而ISession是线程不安全的。 创建一个ISessionFactory需要消耗比较多的资源。因此,我们只在程序初始化的时候创建一次,以后就一直使用这个ISessionFactory。 而ISession的创建只消耗很少的资源。因此我们可以随意创建。一、原始单例模式封装的ISessionFactory 因此,对于ISessionFactory,我们使用饿汉单例模式实现它。 原始饿汉单例模式封装ISessionFactory实例: //密封类 ... 阅读全文
摘要:
一、HttpContext概述 HttpContext基于HttpApplication的处理管道,由于HttpContext对象贯穿整个处理过程,所以,可以从HttpApplication处理管道的前端将状态数据传递到管道的后端,完成状态的传递任务。 HttpContext的生命周期从服务器接收的HTTP请求开始到反应发送回客户端结束。 在WebForm或类库(包括MVC)项目中,通过Current静态属性,就能够获得HttpContext的对象。 HttpContext context = HttpContext.Current; 如果是在Asp.net MVC的Controll... 阅读全文
摘要:
一、常用属性名称说明Depth获取一个值,用于指示当前行的嵌套深度。FieldCount获取当前行中的列数。HasRows获取一个值,该值指示SqlDataReader是否有行。IsClosed指定的SqlDataReader实例是否已关闭。Item[Int32]获取指定列(数字索引),通常在While.Read()中使用。Item[String]获取指定列(字符串索引),通常在While.Read()中使用。RecordsAffected获取执行 T-SQL 语句所更改、插入或删除的行数。VisibleFieldCount获取SqlDataReader中未隐藏的字段的数目。 示例: ... 阅读全文
摘要:
人在碰到自己不懂的时候,很容易就觉得自己是最差的。这个时候,无论碰到谁,可能即使水平比自己更差的,也会毫不犹豫地跟着别人的脚步走,完全不会自己去独立思考,想自己的路。 比如在学习中,碰到自己不懂的问题,就会很容易地照着同学的抄。 比如在工作中,碰到自己不懂的问题,就会很容易地按着同事的方法去做。 比如在行业中,碰到自己不擅长的领域,很容易地就跟着同行的步骤去走。 而事实上,这是很危险的做法。当你一直跟着别人的脚步走,你永远不可能超越别人。在我以往的经验当中。在自己不熟悉的领域,总是喜欢跟着别人的脚步去走,比别人牵着鼻子走,然后还以为自己很牛B,对某一个领域的了解有多么深。殊不知,有... 阅读全文
摘要:
System.Object在.Net中是所有类型的基类,任何类型都直接或间接地继承自System.Object。没有指定基类的类型都默认继承于System.Object。基类特性 正由于所有的类型都继承于System.Object。因此,所有的类型都具有下面这些特性: GetType()方法,获取对象的类型。 Equals、ReferenceEquals和==,判断对象是否相等。 ToString()方法,获取对象的字符串信息,默认返回对象带命名空间的全名。 MemberwiseClone()方法,对象实例的浅拷贝。 GetHashCode()方法,获取对象的值的散列码。 F... 阅读全文
摘要:
多态关联 先说明什么是多态关联。 假设我们有一张地址表,其中的地址可能是对于User中的,也可能是对于Orders中的。 以上,只是举个例子,实际的例子还有很多,比如我们要设计一个内容管理系统(CMS),我们的CMS有一个文章表,一个软件表。还要求支持评论,那么我们的评论表的Id是引用文章表还是引用软件表呢? 对于以上例子的缺点,貌似书本上有故意为此多态关联的模式走软的嫌疑。缺点不说了,主要是查询麻烦,其次不能够支持外键约束。解决方案 交叉表 对于这种需要外键引用为多个表的情况,可以建立一张交叉表。让Address不再依赖Orders或Users。 优点: 引用完整性支... 阅读全文
|