今天将NHibernate升级到3.0后出现几个问题,解决它们颇费了一番功夫

问题1:升级后 ISessionFactoryImplementor 没有了OpenConnection方法,编译不通过

        public static DataSet ExecuteSQlQuery(string sSql)
        {
            ISessionFactoryImplementor factory = (ISessionFactoryImplementor)DBSessions.Factory;  
              SqlCommand cmd = new SqlCommand();
            cmd.CommandText = sSql;
            cmd.CommandType = System.Data.CommandType.Text;

            SqlConnection conn = (SqlConnection)factory.OpenConnection();
            cmd.Connection = conn;
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds);
            return ds;
        }
        解决的方法为,将factory.OpenConnection(); 改成 factory.OpenSession().Connection; 即可

             也就是,如果需要使用ado.net connection 可以直接使用ISession实例的Connection属性,类型为IDbConnection

问题2:查询时出现Antlr.Runtime.NoViableAltException异常

下面代码执行时总是报 Antlr.Runtime.NoViableAltException 
       ISession session = DBSessions.GetSession();
       string query="From Member Where id=1 ";
       IList lst = session.CreateQuery(query);
       【Member 类对应的表 BS_Members表】
找了很多资料,都说是HQL语法错误,但是上面的语句够简单了,怎么看也不像语法错误,况且别的表同样的调用方法都不会报错,
试过多种可能的方法,折腾的不轻,最后试着将Member类换个名字,比如Members,重新编译,查询,解决!!!

非常奇怪,NHibernate3.0竟让在HQL中拒绝 名称为Member的类,不管怎样总算解决了。


 
posted @ 2011-01-20 22:28 .自.在. 阅读(828) 评论(0) 编辑
由于工作需要研究了一下断点续传(上传)技术
此组件在开源项目 Silverlight Multi File Uploader 基础上改写的,
客户端基于Silverlight技术,服务端不限。
文件上传时采用了将大文件分块传输的方式,稳定,且可以通过调节块大小和一次上传文件数,调整对带宽的占用
增加断点续传后,确保了文件上传的稳定性

原项目特性有: 原文
Features:
- 可以选择多文件上传
- 同一时间上传多个文件
- 可以取消某个文件上传,或清除所有上传文件,停止所有上传任务
- 显示整体上传进度
- 删除异常,错误提醒
- 拖放方式选择文件

For developers / webmasters:
- 通过配置项设定上传文件类型 (for example, only .jpg files)
- 控制文件上传最大尺寸
- 设定同时上传的文件数
- 设定用户自定义Http Requeset参数
- 含有基于WebService的上传方式
- 通过设置参数调整控件背景色,以适应页面风格
- 方便进行界面文字的本地化
- 提供基于JavaScript 的事件和属性用于集成到页面程序

在此基础上增加了如下特性
- 单文件或所有文件 暂停或继续上传
- 上传中断后可以续传
- 可以根据文件名判断上传断点,也可以根据文件内容(MD5)判断上传断点
- 界面优化,图标方式显示上传状态

工作原理示意图如下: 绿色部分为新增特性
界面效果图:

 
 
posted @ 2010-12-29 16:24 .自.在. 阅读(847) 评论(8) 编辑
/*==================================================================
*                     通用网格工具栏示例
*===================================================================
* 说明:此工具栏包含了常用的 新增,删除,打印,导出 等按钮和搜索框;
*      本示例包括:工具栏初始化,自定义属性,自定义方法,自定义事件等关键技术点
* 用法:
* 1.创建GridToolBar实例
* #参数:指定Store 用于搜索框搜索数据
* var gridToolBar = new Ext.nRelax.GridToolBar({ store: store }); 
* 2.onDelete事件,点击删除按钮时触发
* gridToolBar.on('onDelete', doDelete);
*====================================================================
*/
//定义命名空间
Ext.ns('Ext.nRelax');

Ext.nRelax.GridToolBar = function (cfg) {
    Ext.nRelax.GridToolBar.superclass.constructor.call(this, {
        id: 'tool_bar',
        cls: 'top-toolbar',
        items: [{ id: "add", text: "新增", iconCls: "silk-add" },
            { id: "del", text: "删除", iconCls: "silk-delete", disabled: "true", handler: doDelete },
            "-",
            { id: "print", xtype: "splitbutton", iconCls: "silk-printer", text: "打印" },
            "-",
            { id: "expore", xtype: "splitbutton", text: "导出" },
            "->",
            new Ext.ux.form.SearchField({
                store: this.store,
                width: 220
            }),
            { xtype: "tbspacer"}]
    });
    //自定义事件
    this.addEvents("onDelete");
    //自定义方法
    this.test = function () {
        alert('测试自定义方法');
    }
    //自定义属性
    this.buttonDel = this.findById("del");
    this.buttonAdd = this.findById("add");
    this.buttonPrint = this.findById("print");
    this.buttonExport = this.findById("expore");
};

doDelete = function () {
    //这里不能直接用This因为这里的This指删除按钮,可以用this.id测试
    //触发事件
    this.ownerCt.fireEvent("onDelete");
}

//继承父控件
Ext.extend(Ext.nRelax.GridToolBar, Ext.Toolbar);


//第一个参数为自定义控件的xtype
Ext.reg('gridtoolbar', Ext.nRelax.GridToolBar); 
posted @ 2010-11-19 00:06 .自.在. 阅读(342) 评论(0) 编辑

今天整理了一段代码,用于图片上传前预览,并获取图片的长、宽、及字节数,可以用于图片上传前的校验。

脚本如下:

 

<html>
    
<head>
    
<script   language="javascript"   type="text/javascript">   
      
function getimginfo()   
      {   
          
var img=new Image();   
          img.src
=document.all.file.value;   
          
var sInfo="Width:"+img.width+
                    
"px Height:"+img.height+
                    
"px Size:"+getsizestring(img.fileSize);   
          alert(sInfo);
      }
      
function getsizestring(len)
      {
            
var kb=len/1024;
            if(kb<1024)
                
return kb.toFixed(2)+"K";
            
else
            {
                
var m=kb/1024;
                return m.toFixed(2)+"M";
            }
      }
      
</script>   
    
</head>   
    
<body>   
      
<table   width="90%"     border="0"   cellspacing="0"   cellpadding="0">   
        
<tr> 
            
<td>
                 
<img  width="60"   height="60"   id="picdemo">
            
</td>
            
<td>   
              
<input   type="file"   id="file"  onchange="document.all.picdemo.src=this.value" class="allinput">&nbsp;   
              
<input   type="submit"   name="Submit"   value="上传"   onClick="getimginfo();">   
            
</td>   
        
</tr>   
      
</table>   
    
</body>
</html>

 

 

posted @ 2010-03-25 16:40 .自.在. 阅读(86) 评论(0) 编辑


<script type="text/javascript">
/*
*Ie && Firefox CopyToClipBoard
*
*/ 
function copyToClipBoard() {
    
var txt = window.location.toString();
        
//txt += document.title;
    if(window.clipboardData) { 
        window.clipboardData.clearData();   
        window.clipboardData.setData(
"Text",txt);
    }
else if(navigator.userAgent.indexOf("Opera"!= -1) {   
        window.location 
= txt;   
    } 
else if (window.netscape) {   
        
try {   
            netscape.security.PrivilegeManager.enablePrivilege(
"UniversalXPConnect");   
        } 
catch (e) {   
            alert(
"被浏览器拒绝!\n请在浏览器地址栏输入'about:config'并回车\n然后将'signed.applets.codebase_principal_support'设置为'true'");   
        }   
        
var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);   
        
if (!clip)   
            
return;   
        
var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);   
        
if (!trans)   
            
return;   
        trans.addDataFlavor(
'text/unicode');   
        
var str = new Object();   
        
var len = new Object();   
        
var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);   
        
var copytext = txt;   
        str.data 
= copytext;   
        trans.setTransferData(
"text/unicode",str,copytext.length*2);   
        
var clipid = Components.interfaces.nsIClipboard;   
        
if (!clip)   
            
return false;   
        clip.setData(trans,
null,clipid.kGlobalClipboard);
    } 
    alert(
"你已经成功复制本帖地址,请直接粘贴推荐给你的朋友!");
}
</script> 
<a href="javascript:;" onClick="copyToClipBoard();">推荐给朋友</a>
posted @ 2010-03-14 10:56 .自.在. 阅读(94) 评论(0) 编辑
摘要:       跨页面访问ViewState仅仅适用于通过Post方法或者Server.Transfer方法从一个页面重定向到另一个页面的情况,如果你使用Response.redirect方法将无法实现跨页面访问ViewState. 通过下面的一个例子来演示扩页面访问ViewState 我们创建两个页面,分别为: 1、ViewStateConta...阅读全文
posted @ 2009-07-01 10:33 .自.在. 阅读(328) 评论(0) 编辑
posted @ 2008-12-17 22:52 .自.在. 阅读(20) 评论(0) 编辑
摘要: 最近由于工作关系,整理一个操作手册,共享一下。写的比较简单,以说明问题为主,欢迎大家评论。整理PM过程思路远胜于掌握工具本身,欢迎下载阅读全文
posted @ 2007-12-04 18:15 .自.在. 阅读(5393) 评论(25) 编辑
posted @ 2007-07-31 15:09 .自.在. 阅读(1262) 评论(1) 编辑
posted @ 2006-11-22 23:32 .自.在. 阅读(336) 评论(1) 编辑