2010年11月 的存档
2010十一月29

查询

NHibernate 评论关闭

1)CRUD操作:
using (ISession session = NHibernateHelper.OpenSession())
using (ITransaction transaction = session.BeginTransaction())
{
session.Update(product); //session.Save(product);session.Delete(product); 或者_session.SaveOrUpdate(c);
transaction.Commit();
}

在NHibernate中提供了三种查询方式给我们选择:NHibernate查询语言(HQL,NHibernate Query Language)、条件查询(Criteria API,Criteria Query)、(根据示例查询(QBE,Query By Example)是条件查询的一种特殊情况)、原生SQL(Literal SQL,T-SQL、PL/SQL)。

2)简单查询–条件查询Criteria Query

  • 据关键字查询:session.Get<Product>(productId);
  • 据其它属性查询
  • 返回一个值:session.CreateCriteria(typeof(Product)).Add(Restrictions.Eq(“Name”, name)).UniqueResult<Product>();
  • 返回一个集合:session.CreateCriteria(typeof(Product)).Add(Restrictions.Eq(“Name”, name)).List<Product>();
  • 除了用Eq外,还可用like,between等

3)SQL语句–HQL查询

  • From子句: return _session.CreateQuery(“from Customer”) .List<Customer>();
  • select 子句 :
    
  • return _session.CreateQuery("select c.Firstname, count(c.Firstname) from Customer c group by c.Firstname").List<object[]>();
    
  • where子句:return _session.CreateQuery(“from Customer c where c.Firstname=’YJing’”) .List<Customer>();
    注:显示的名字为实体名而不是表名
  •   order by子句:return _session.CreateQuery("from Customer c order by c.Firstname asc,c.Lastname desc").List<Customer>();
  • group by子句:
      return _session.CreateQuery("select c.Firstname, count(c.Firstname) from Customer c group by c.Firstname").List<object[]>();
  • 参数传递:
     return _session.CreateQuery("from Customer c where c.Firstname=:fn").SetString("fn", firstname).List<Customer>();
2010十一月26

利用nhibernate,出现No persister for: User

开发遇到的问题 评论关闭

已将hbm.xml改成嵌入的资源还是不行,后来发现:
<hibernate-mapping xmlns=”urn:nhibernate-mapping-2.0” assembly=”MyLib” namespace=”MyLib”>
更改为<hibernate-mapping xmlns=”urn:nhibernate-mapping-2.2” assembly=”MyLib” namespace=”MyLib”> 解决!

2010十一月25

SqlServer的limit实现-ROW_NUMBER()

 为结果集构造行号,实际上是为结果集指定顺序,要排序的话就要知道排序规则:Order By
如:SELECT ROW_NUMBER() OVER(ORDER BY id DESC)AS rownum,
       departname  FROM mdDepartment md
应用:mysql的limit即可使用:
SELECT * FROM
(
SELECT ROW_NUMBER() OVER(ORDER BY id DESC)AS rownum,departname
FROM mdDepartment md
) AS a
WHERE a.rownum>=3 AND a.rownum<=5      --返回3到5行
2010十一月25

Sql Server 临时结果集与递归-CTE

sql server 评论关闭
CTE: Common Table Express 指定临时命名的结果集

1, 当sql语句比较大时,可以用CTE将小结果集拆分,以便阅读
    WITH mycre(id,name) AS ( select id ,name from mddepartment )
    SELECT * FROM frmuser JOIN mycre ON frmuser.DepartmentID= mycre.id
 注:1)CTE 之后必须直接使用,间隔sql语句就会失效
        2)在用with时并不会执行查询,只是凑sql语句,只有当with后面的select *引用cte时才会执行

2,递归使用,依次引用自身。递归 CTE 定义至少必须包含两个 CTE 查询定义(一个定位点成员和一个递归成员)
 WITH departments(id,Departname,depth) as(
    SELECT id,Departname,1 depth FROM mdDepartment md
    WHERE md.ParentID = 2   --找到广告商务部的直接子部门 定位点成员,depth指定深度
    UNION ALL
    SELECT md.id,md.Departname,depth+1 FROM mdDepartment md --找到子部门的子部门 递归成员
    JOIN departments d ON md.ParentID = d.id

)
SELECT * FROM departments
    注:1)定位点成员之间必须使用UNION ALL、UNION、INTERSECT、EXCEPT集合运算符,最后一个定位点成员与递归成员之间必须使用UNION ALL,递归成员之间也必须使用UNION ALL连接,定位点成员和递归成员中的字段数量和类型必须完全一致,递归成员的FROM子句只能引用一次CTE对象。
           2)递归成员中不允许出现下列项
              SELECT DISTINCT
              GROUP BY
              HAVING
              标量聚合
              TOP
              LEFT、RIGHT、OUTER JOIN(允许出现 INNER JOIN)
              子查询
2010十一月25

土豆下载的视频格式转换后失真

电脑技巧 评论关闭

解决方法:不使用土豆的转换器,找到下载的源文件*.f4v, 直接更改后缀即可,如:flv,mp4

2010十一月24

中文域名解析

IIS 评论关闭

解析步骤:
1,得到中文域名的转码
2,将其添加到IIS的主机头即可。

注:1)因为操作系统的核心都是英文组成,DNS服务器的解析也是由英文代码交换,所以DNS服务器上并不支持直接的中文域名解析,所有中文域名的解析都需要转成punycode码,然后由DNS解析punycode码
2)目前,IE6.0以下不支持,以IE7.0、IE8.0、Firefox, Opera, Google Chrome, Safari等为代表的全球主流浏览器,已经实现对以“.CN”、“.中国”、“.公司”、“.网络”为结尾的中文域名的直接支持。

2010十一月24

我常用的系统命令

电脑技巧 评论关闭
  • Windows+BREAK:显示“系统属性” 对话框
  • Windows+D:显示桌面
  • Windows+E:开启“资源管理器”
  • Windows+R:开启“运行” 对话框
  • Windows+L:锁定

开始-运行:

  • mstsc 远程桌面 (Microsoft Terminal Service Client)
  • calc 计算器
  • service
  • iexplore:IE
  • explorer:我的文档
  • inetmgr:iis网络信息服务 (internet manager)
  • taskmgr—–任务管理器
  • eventvwr 事件查看器 (event viewer )
  • control 打开控制面板
  • cpl文件:Control Panel extension
  • msc文件:msconfig
  • 在C:\windows\system32下面有一系列.cpl文件,它们分别对应着控制面板中的项目
  • ncpa.cpl,网络连接(ncpa:net connetcion property)
  • appwiz.cpl,添加或删除程序 (application wizard 应用程序向导)
  • compmgmt.msc:计算机管理:Computer Management

附命令缩写对照表:

Accessibility Controls = access.cpl
Add Hardware Wizard = hdwwiz.cpl
Add/Remove Programs = appwiz.cpl
Administrative Tools = control admintools
Automatic Updates = wuaucpl.cpl
Bluetooth Transfer Wizard = fsquirt
Calculator = calc
Certificate Manager = certmgr.msc
Character Map = charmap
Check Disk Utility = chkdsk
Clipboard Viewer = clipbrd
Command Prompt = cmd
Component Services = dcomcnfg
Computer Management = compmgmt.msc
Date and Time Properties = timedate.cpl
DDE Shares = ddeshare
Device Manager = devmgmt.msc
Direct X Control Panel (If Installed)* = directx.cpl
Direct X Troubleshooter = dxdiag
Disk Cleanup Utility = cleanmgr
Disk Defragment = dfrg.msc
Disk Management = diskmgmt.msc
Disk Parmelonion Manager = diskpart
Display Properties = control desktop/desk.cpl
Dr. Watson System Troubleshooting Utility = drwtsn32
Driver Verifier Utility = verifier
Event Viewer = eventvwr.msc
File Signature Verification Tool = sigverif
Findfast = findfast.cpl
Folders Properties = control folders
Fonts = control fonts
Fonts Folder = fonts
Free Cell Card Game = freecell
Game Controllers = joy.cpl
Group Policy Editor (XP Prof) = gpedit.msc
Hearts Card Game = mshearts
Iexpress Wizard = iexpress
Indexing Service = ciadv.msc
Internet Properties = inetcpl.cpl
IP Configuration = ipconfig
Java Control Panel (If Installed) = jpicpl32.cpl
Java Application Cache Viewer (If Installed) = javaws
Keyboard Properties = control keyboard
Local Security Settings = secpol.msc
Local Users and Groups = lusrmgr.msc
Logs You Out Of Windows = logoff
Microsoft Chat = winchat
Minesweeper Game = winmine
Mouse Properties = control mouse
Mouse Properties = main.cpl
Network Connections = control netconnections
Network Connections = ncpa.cpl
Network Setup Wizard = netsetup.cpl
Notepad = notepad
Nview Desktop Manager (If Installed) = nvtuicpl.cpl
Object Packager = packager
ODBC Data Source Administrator = odbccp32.cpl
On Screen Keyboard = osk
Opens AC3 Filter (If Installed) = ac3filter.cpl
Password Properties = password.cpl
Performance Monitor = perfmon.msc
Performance Monitor = perfmon
Phone and Modem Options = telephon.cpl
Power Configuration = powercfg.cpl
Printers and Faxes = control printers
Printers Folder = printers
Private Character Editor = eudcedit
Quicktime (If Installed) = QuickTime.cpl
Regional Settings = intl.cpl
Registry Editor = regedit
Registry Editor = regedit32
Remote Desktop = mstsc
Removable Storage = ntmsmgr.msc
Removable Storage Operator Requests = ntmsoprq.msc
Resultant Set of Policy (XP Prof) = rsop.msc
Scanners and Cameras = sticpl.cpl
Scheduled Tasks = control schedtasks
Security Center = wscui.cpl
Services = services.msc
Shared Folders = fsmgmt.msc
Shuts Down Windows = shutdown
Sounds and Audio = mmsys.cpl
Spider Solitare Card Game = spider
SQL Client Configuration = cliconfg
System Configuration Editor = sysedit
System Configuration Utility = msconfig
System File Checker Utility = sfc
System Properties = sysdm.cpl
Task Manager = taskmgr
Telnet Client = telnet
User Account Management = nusrmgr.cpl
Utility Manager = utilman
Windows Firewall = firewall.cpl
Windows Magnifier = magnify
Windows Management Infrastructure = wmimgmt.msc
Windows System Security Tool = syskey
Windows Update Launches = wupdmgr
Windows XP Tour Wizard = tourstart
Wordpad = write

2010十一月24

安全删除U盘时,常常会遇到提示“无法停止‘通用卷’设备”

电脑技巧 评论关闭

安全删除U盘时,常常会遇到提示“无法停止‘通用卷’设备,请稍候再停止该设备。”
第一种方法:
往往在把U盘的文件或者数据取出来的时候,都是用的“复制”“粘贴”方式,而如果复制的是U盘上的文件,这个文件就会一直放在系统的剪切板里,处于待用状态。而如果这种情况下要删除U盘的话,就会出现上面的无法停止U盘的提示。
相应的解决办法就是:清空剪切板,或者在你的硬盘上随便进行一下复制某文件再粘贴的操作
第二种方法:
同时按下键盘的\”Ctrl\”+\”Alt\”+\”Del\”组合键,这时会出现\”任务管理器\”的窗口,单击\”进程\”标签,在\”映像名称 \”中寻找\”rundll32.exe\”进程,选择\”rundll32.exe\”进程,然后点击\”结束进程\”,这时会弹出任务管理器警告,问你确定是否关闭此进程,点击\”是\”,即关闭了\”rundll32.exe\”进程。再删除U盘就可以正常删除了。
使用这种方法时请注意:如果有多个\”rundll32.exe\”进程,需要将多个\”rundll32.exe\”进程全部关闭。
第三种方法:
按下键盘的\”Ctrl\”+\”Alt\”+\”Del\”组合键,出现\”任务管理器\”的窗口,单击\”进程\”,寻找 \”EXPLORER.EXE\”进程并结束它。继续进行下面的操作,在任务管理器中点击“文件”??“新建任务”??输入EXPLORER.EXE?? 确定。再删除U盘。

2010十一月23

WMIC: 查看进程或服务的所在目录

电脑技巧 评论关闭

wmic:Windows Management Instrumentation Command-line(Windows管理规范命令行)
开始-运行-wmic :
进程:
process
查看指定 process where name=”editor.exe”
服务:
service get caption,pathname

2010十一月21

开发功能需要了解的情况

设计好的思路 评论关闭

最具体的功能到底需要哪些,需要做到多细,都要由哪些详细的功能也都没了解,最终有多少个工作量?有没有参考例子
这个功能倒是那个部门用?有几个人用?都有谁谁来用?真的是单机版就可以了吗?
新项目如何正式上线?老数据如何倒入,什么时候导入?新系统如何测试?2个系统如何平滑衔接?
有没有签订正规的合同

2010十一月21

后台向前台进行URL传参,若是中文出现%符号,需要解码

http://localhost/phnix2/confirm.html?1=1&CustomerName=%ba%c3%b5%c4&tel=4444444&phone=33333333&mail=333333&CustomerAddress=%bc%d2%cd%a5%c8%cb&Remark=%bc%d2%cd%a5%c8%cb&CustomerId=51

URL传到前台后,前台js利用unescapte等方法均得不到中文。

解决方法:
后台:项目添加引用 Microsoft.Jscript
利用Microsoft.JScript.GlobalObject.escape(URL); 进行编码
前台利用unescape解码

2010十一月19

DataSource可获得的数据源

ASP.NET 评论关闭
DataSource对下列数据源有效

    * DataTable
    * DataView
    * DataSet
    * DataViewManager
    * 任何实现 IListSource 接口的组件
    * 任何实现 IList 接口的组件:可利用此特性进行每条记录数据的对象封装

如: list.Add(new Product {id = 1, name = "Melon", price = 12});
        list.Add(new Product {id = 2,name = "Pear", price = 13});
        list.Add(new Product {id = 3,name = "Milk", price = 14});
        list.Add(new Product {id = 4,name = "Coca Cola", price = 15});
        list.Add(new Product {id = 5,name = "Pepsi Cola", price = 16});
        gv.DataSource = list;
        gv.DataBind();
2010十一月19

开发调试时避免缓存影响效果

电脑技巧 评论关闭

IE – 选项 – 常规-设置-检查所存网页的较新版本 – 每次访问此页时检查(E)
Firefox 下的设置方法:
1.在firefox的地址栏上输入about:config回车
2.找到browser.cache.check_doc_frequency选项,双击将3改成1保存即可。
0: 每个进程一次 每次启动Firefox时检查
1: 每次访问此页时检查
2: Never 不检查
3: 自动

2010十一月19

数据库操作类Session说明

NHibernate 评论关闭

1,连接数据库:
var configuration = new Configuration();
configuration.Configure(); //自动探索hibernate.cfg.xml或web.config中的nhibernate
configuration.AddAssembly(typeof(Product).Assembly); //指定加载哪个程序集,若不写,则默认加载工程本身
2, 连接完数据库后创建Session: _sessionFactory = configuration.BuildSessionFactory(); SessionFactory.OpenSession();
3,利用Session完之后,因是延迟加载,需用 _Session.Flush(); 提交更新,或者待Session销毁时自动提交,如:
using (ISession session = NHibernateHelper.OpenSession())
{
session.Save(user);
}

2010十一月19

Nhibernate入门

NHibernate 评论关闭
下载:nhibernate

使用方式:
1,项目引入dll:

    * Antlr3.Runtime.dll
    * Castle.Core.dll
    * Iesi.Collections.dll
    * LinFu.DynamicProxy.dll
    * log4net.dll
    * NHibernate.ByteCode.Castle.dll
    * NHibernate.ByteCode.LinFu.dll
    * NHibernate.dll
    * nunit.core.dll
    * nunit.framework.dll

2,编写数据库连接:对于一般的应用程序,编写hibernate.cfg.xml放在根目录下,属性设置为始终复制,因为nhibernate是对输出目录bin的文件进行读取的,对于web可在web.config中进行添加。
      1)hibernate.cfg.xml,在官方文档的Configuration_Templates文件夹下有模板,例子如下:
       



  
NHibernate.Driver.SqlClientDriver

      Server=(local);initial catalog=nhibernate;Integrated Security=SSPI;user id=sa;password=123abc;min pool size=1;max pool size=512
    
10
false
NHibernate.Dialect.MsSql2000Dialect
true
60
true 1, false 0, yes 'Y', no 'N'
NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu
  


     2) web.config 在下进行Nhibernate 配置

3,编写实体类 4,编写实体类映射文件 如:Product.hbm.xml,将此其属性设置为嵌入资源,这是因为NHibernate是通过查找程序集中的资源文件来进行实体的映射,故要将映射文件嵌入到程序集中。 如: 注:1), 要为Microsoft Visual Studio 2008添加编写NHibernate配置文件智能提示的功能。只要在下载的NHibernate里找到configuration.xsd和 nhibernate-mapping.xsd两个文件并复制到X:\Program Files\Microsoft Visual Studio 9.0\Xml\Schemas目录即可。 2),此时即可通过架构类来自动生成数据库表 var cfg = new Configuration(); cfg.Configure(); cfg.AddAssembly(typeof(Product).Assembly); new SchemaExport(cfg).Execute(true, true, false); 5,因为操作数据库是用Session来完成的,可编写一helper类,用来集中处理, 编写NHibernateHelper.cs如下: using NHibernate; using NHibernate.Cfg; using NHebernateTest.Domain; namespace NHebernateTest.Repositories { public class NHibernateHelper { private static ISessionFactory _sessionFactory; private static ISessionFactory SessionFactory { get { if (_sessionFactory == null) { var configuration = new Configuration(); configuration.Configure(); //configuration.AddAssembly(typeof(Product).Assembly); _sessionFactory = configuration.BuildSessionFactory(); } return _sessionFactory; } } public static ISession OpenSession() { return SessionFactory.OpenSession(); } } } 6,编写操作类及接口,操作类即是引用上面的helper类进行数据库的操作。 1)CRUD操作: using (ISession session = NHibernateHelper.OpenSession()) using (ITransaction transaction = session.BeginTransaction()) { session.Update(product); //session.Save(product);session.Delete(product); transaction.Commit(); } 2)查询 * 据关键字查询:session.Get(productId); * 据其它属性查询 * 返回一个值:session.CreateCriteria(typeof(Product)).Add(Restrictions.Eq("Name", name)).UniqueResult(); * 返回一个集合:session.CreateCriteria(typeof(Product)).Add(Restrictions.Eq("Name", name)).List();
2010十一月18

form提交时通过Request获取值时是控件的name指定而不是id的原因

javascript 评论关闭

因为id是唯一的,而name可以重复,故对于多个radio而言可用一个name表示,然后Request直接通过此name获取值。

2010十一月18

SchemaExport:根据实体类的配置文件生成数据库表

	先编写持久化类和映射文件,然后使用SchemaExport工具生成数据库架构。这样的方式就是领域驱动设计/开发。
好处:当领域模型需要改变,只需修改NHibernate结构和应用程序,不需要修改数据库架构,只要利用SchemaExport工具重新生成数据库架构就可以了。但是使用数据库只是其中一种方式,我们也可以使用XML文件来存储数据。

	NHibernate的hbm2dll提供SchemaExport工具:给定一个连接字符串和映射文件,不需输入其他东西就可以按照持久化类和映射文件自动生成数据库架构
SchemaExport工具就是把DDL脚本输出到标准输出,同时/或者执行DDL语句。SchemaExport工具提供了三个方法,分别是 Drop()、Create()、Execute(),前两个方法实质是调用Execute()方法。通常使用Execute()方法来生成数据库架构的。

如:
	var cfg = new Configuration();

	cfg.Configure(); //自动寻找hibernate.cfg.xml文件读取数据库连接信息

	cfg.AddAssembly(typeof(Product).Assembly); //根据Product类查找Product.hbm.xml

	new SchemaExport(cfg).Execute(true, true, false);
	//第一个true输出sql创建语句到控制台,第二个用来先删除后创建
2010十一月14

NHibernate

NHibernate 评论关闭
2010十一月13

共享区的使用 – NoSql初步

1,商务通存数据,一种方式是存放到数据库中,客户的录入的信息存放数据库,然后客服端定时读取。这种的频繁对数据库的读写,且数据在磁盘上,速度、效率很有影响。另一种方式是在内存中设置一共享区如建立一static List集合,客户端向里面存,客服取,共同维护这一共享区,然后定时将此共享区的内容存入数据库即可。
至于客服端与服务器进行静态类共享的问题(即客服端与服务器共享服务器内存),可以利用web service来解决。在客户端点应用程序中添加服务器端的webservice,会自动引用服务器的命名空间,然后直接使用类即可。因为此类指定静态的,故做到了共享。 可参见PowerTalk的聊天信息存读方式。

即共享区用:static + webservice构造,static负责共享,webservice负责同一

Web Service本身其实是在实现应用程序间的通信。
客户端的概念是调用服务器上的远程过程,通常方式为实例化一个远程对象并调用其方法和属性。:服务器暴露出远程对象的接口,客户端就好像在本地使用的这些对象的接口一样,这样就隐藏了底层的信息,客户端也就根本不需要知道对象是在哪台机器上。

2, 将数据存放到内存中定时转储的方式属于NOSQL,代表之一Redis
Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

2010十一月13

开源的在线客服系统-Comm100

comm100
注册一个编号,可以新建多个客服。支持文本和语音聊天,客服转接和加入对话 ,监控访客动态,主动抓住客户等。还开以开论坛、知识库,关键是开源,免费的。
效果如下:
客户界面(可定制):
客户界面

信息来时提醒:
信息来时的提醒界面

客服界面:
客服界面