09 2012 档案

摘要:这几天一直在学习ADO.NET的一些知识,现对ADO.NET数据库访问做个小结,以便和大家交流学习. 要使用ADO.NET提供的数据库访问对象,必须首先在应用程序的开始引用两个命名空间:System.Data和System.Data.SqlClient。请注意这两个命名空间是不同的命名空间,前者不包括后者。System.Data 命名空间提供对表示 ADO.NET 结构的类的访问。通过 ADO.NET 可以生成一些组件,用于有效管理多个数据源的数据。比如我们经常使用的dataset类和datatable类就是由这个命名空间里面的类所提供的。而System.Data.SqlClient命名空.. 阅读全文
posted @ 2012-09-29 17:47 美梦成真 阅读(1243) 评论(0) 推荐(0)
摘要:过多的锁定也会有麻烦。在死锁中,至少有两个线程被挂起,并等待对方解除锁定。由于两个线程都在等待对方,就出现了死锁,线程将无限等待下去。 看下面的示例: 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.T... 阅读全文
posted @ 2012-09-29 17:06 美梦成真 阅读(485) 评论(0) 推荐(0)
摘要:最近一直在学习C#的多线程编程,发现多线程编程并不容易。在启动访问相同数据的多个线程时,会间歇性地遇到难以发现的问题。下面来讨论与线程相关的问题:争用条件。如果两个或多个线程访问相同的对象,或者访问不同步的共享状态,就会出现争用条件。看下面的例子: 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Text; 5: using System.Diagnostics; 6: using System.... 阅读全文
posted @ 2012-09-29 16:45 美梦成真 阅读(1280) 评论(0) 推荐(0)
摘要:任务结束时,它可以把一些有用的状态信息写到共享对象中。这个共享对象必须是线程安全的。另一个选项是使用返回某个结果的任务。使用Task类的泛型版本,就可以定义返回某个结果的任务的返回类型。为了返回某个结果任务调用的方法可以声明为带任意返回类型。示例方法TaskWithResult()利用一个元组返回两个int值。该方法的输入可以是void或object类型,如下所示: 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Tex... 阅读全文
posted @ 2012-09-17 12:11 美梦成真 阅读(6973) 评论(0) 推荐(0)
摘要:利用任务连续性,可以在一个任务结束后启动另一个任务。任务也可以构成一个层次结构。一个任务启动一个新任务时,就启动了一个父/子层次结构。下面的代码段在父任务内部新建一个任务。创建子任务的代码与创建父任务的代码相同,唯一的区别是这个任务从另外一个任务内部创建。 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Text; 5: using System.Threading; 6: using Syste... 阅读全文
posted @ 2012-09-17 11:29 美梦成真 阅读(6114) 评论(0) 推荐(0)
摘要:通过任务,可以指定在任务完成之后,应开始运行之后另一个特定任务。例如,一个使用前一个任务的结果的新任务,如果前一个任务失败了,这个任务就应执行一些清理工作。任务处理程序都不带参数或者带一个对象参数,而任务的连续处理方法都有一个Task类型的参数,这里可以访问起始任务的相关信息:如下面的示例代码: 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Text; 5: using System.Threading; ... 阅读全文
posted @ 2012-09-14 17:26 美梦成真 阅读(18257) 评论(0) 推荐(0)
摘要:.NET 4.0包含的新名称空间System.Threading.Tasks,它包含的类抽象出了线程功能。任务表示应完成的某个单元的工作。这个单元的工作可以在单独的线程中运行,也可以以同步的方式启动一个任务,这需要等待主调线程。使用任务不仅可以获得一个抽象层,还可以对底层线程进行许多控制。启动任务 1)、使用TaskFactory类的实例,在其中把TaskMethod()方法传递给StartNew方法,就会立即启动任务。 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: ... 阅读全文
posted @ 2012-09-14 14:41 美梦成真 阅读(29870) 评论(5) 推荐(2)
摘要:之前,在项目的管理员后台删除会员信息的时候,要求与会员相关的所有表信息删除。这里的删除,指的都是逻辑删除,即将记录的状态置为删除状态,不是从数据库直接删除的物理删除。尽管最后项目经理要求不采用触发器的方案,采用在程序端置状态的方式来实现,还是来mark一下,就算是对Sql server触发器复习一下吧。该触发器的代码如下所示: 1: ---在membership会员信息表里面删除指定membershipid的企业会员时(实际上没有进行物理删除,只是将status置为-1) 2: ---将与企业会员有关的信息表里面的相关信息进行逻辑删除,即status置为-1 3: ... 阅读全文
posted @ 2012-09-13 11:34 美梦成真 阅读(359) 评论(0) 推荐(0)
摘要:前段时间,应公司产品部的兄弟的请求,我写了一个Sql脚本来帮助他们统计不存在明细信息的地区列表。需求是这样的,在项目中存在一张如下的地区表:和这样地区表关联的还有一张地区明细表:产品组的同事需要录入地区的详细信息,但是现在不记得之前录入了多少条记录,现在还剩下多少条记录,现在他们想知道现在没有录入详细信息的地区的列表。这个地区列表是个多级的地区列表,最多包括省,市,区,街4级分类。刚开始想用游标来实现,发现查询的速度很慢,故转而采用存储过程。 1: set ANSI_NULLS ON 2: set QUOTED_IDENTIFIER ON 3: go 4... 阅读全文
posted @ 2012-09-13 11:16 美梦成真 阅读(291) 评论(0) 推荐(0)
摘要:近来,在项目的后台管理部分开发了一个邮件群发的模块,故将核心的邮件发送代码mark一下。在C#中使用SmtpClient对象通过SMTP传送邮件信息的示例如下: 1: public static bool Send(string host, string from, string fromPassword, string fromDisplayName, 2: List<ToMailAddress> toMailAddress, string subject, string body, out string desc, params string[] at... 阅读全文
posted @ 2012-09-13 10:39 美梦成真 阅读(1060) 评论(0) 推荐(0)
摘要:最近我应项目需求,在后台数据统计页面,需要将数据统计分为采集数据统计和非采集数据两个部分。当我完成功能的开发后,打开这个页面,发现页面打开相当慢。于是开始调查起页面打开慢的原因,由于是数据的呈现页面,马上联想到应该与数据库查询有关,立马用VS的断点调试功能定位到数据库的查询部分,提取数据的查询语句。如下所示: 1: SELECT COUNT(0) AS TotalCount... 阅读全文
posted @ 2012-09-12 17:57 美梦成真 阅读(4309) 评论(0) 推荐(0)
摘要:最近,在项目中有用到编辑器CKEditor。 CKEditor是新一代的FCKeditor,是一个重新开发的版本。CKEditor是全球最优秀的网页在线文字编辑器之一,因其惊人的性能与可扩展性而广泛的被运用于各大网站。 使用: 1、首先从官方网站http://ckeditor.com/download下载CKEditor压缩包,最新版本是CKEditor 3.6.4.解压后将文件夹拷贝到项目... 阅读全文
posted @ 2012-09-11 11:46 美梦成真 阅读(322) 评论(0) 推荐(0)
摘要:创建线程需要时间。如果有不同的小任务需要完成,就可以事先创建许多线程,在应完成这些任务的时候发出请求。这个线程数最好在需要更多的线程时增加,在需要释放资源时减少。在.NET Framework中不需要自己创建这样一个列表,该列表由ThreadPool类托管。这个类会在需要时增减线程池中的线程数,直到最大的线程数。池中的最大线程数是可以配置的。在双核CPU中,默认设置为1023个工作线程和1000个I/O线程。也可以指定在创建线程池时应立即启动的最小线程数,以及线程池中可用的最大线程数。如果有更多的作业需要处理,线程池中的线程个数达到了极限,最新的作业就要排队,且必须等待线程完成其任务。 来看. 阅读全文
posted @ 2012-09-11 10:39 美梦成真 阅读(1139) 评论(0) 推荐(0)
摘要:前面一段时间,一直在看<<C#高级编程>>第七版线程、任务和同步这一章的知识。创建线程,除了前面介绍的使用委托创建线程之外,创建线程的第二种方式是使用Thread类创建线程。 1.创建线程 使用Thread类可以创建和控制线程。下面的代码是创建和启动一个新线程的简单例子。 1: using System; 2: using System.Collections.Generic; 3: using System.Linq; 4: using System.Text; 5: using System.Threading; ... 阅读全文
posted @ 2012-09-10 18:07 美梦成真 阅读(676) 评论(0) 推荐(0)
摘要:前段时间,在项目中遇到了一个问题,在会员中心当会员注册或者会员修改自己地区信息的时候,如果选择最底级地区,整个地区回退到最顶级地区的选择菜单,整个详细的地区信息不能正常显示。于是,从前端js函数代码着手调查产生这个效果的原因。刚开始的时候,在前端js函数中增加判断所获取的地区是否是最底级地区的判断,,但是一直解决不了这个问题。后来,转变思路,在后台获取地区信息的函数中当用户选择是底级地区(不存在子级地区)的时候,将它对应的所有父级地区信息全部保存起来。这样当选择底级地区的时候,锁获取的地区信息就不为空。 所以特意来记录一下。 前台调用后台代码: 1: <span i... 阅读全文
posted @ 2012-09-06 17:06 美梦成真 阅读(1989) 评论(0) 推荐(0)
摘要:1.Html.Action返回的指向指定控制器指定action的超链接标签<a>标签.如果没有指定controller,则默认为本页面对应的Controller.如<%:Html.Action("TopNavigation","Email") %>返回<a href="/Email/TopNavigation"></a>2.Url.Action返回的是指定控制器指定action的完整URL地址<form name="form1" action="< 阅读全文
posted @ 2012-09-03 10:42 美梦成真 阅读(7447) 评论(0) 推荐(0)