今天将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 .自.在. 阅读(812) 评论(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 .自.在. 阅读(769) 评论(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 .自.在. 阅读(307) 评论(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 .自.在. 阅读(85) 评论(0) 编辑

关于DIV固定定位,网上有很多方法,有些用脚本控制位置的方式,在拖动浏览器滚动条时会出现闪动,实际上用样式可以很简单的实现。

下面是在网上收集的实例代码,做了简单修改:

 

代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="UTF-8">
<head>
 
<title>跨浏览器固定定位</title>
 
<style type="text/css">
  *
{margin:0;padding:0;}
  html
{_overflow:hidden;}
  body
{_height:100%; _overflow-y:auto;padding-top:40px;padding-bottom:40px}
  #boxTop
{width:100%; height:40px;background-color:black;position:fixed;_position:absolute; top:0px; left:0px;}
  #boxBottom
{width:100%; height:40px;background-color:black;position:fixed;_position:absolute; bottom:0px; left:0px;}
 
</style>
</head>
<body>
 
<div>
  内容1
<br>
  内容2
<br>
  内容3
<br>
  内容4
<br>
  内容5
<br>
  内容6
<br>
  内容7
<br>
  内容8
<br>
  内容9
<br>
  内容10
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容
<br>
  内容12
<br>
  内容11
<br>
  内容10
<br>
  内容9
<br>
  内容8
<br>
  内容7
<br>
  内容6
<br>
  内容5
<br>
  内容4
<br>
  内容3
<br>
  内容2
<br>
  内容1
<br>
 
</div>
 
<div id="boxTop"></div>
 
<div id="boxBottom"></div>
</body>
</html>

 


 

posted @ 2010-03-18 15:15 .自.在. 阅读(90) 评论(1) 编辑
摘要: <scripttype="text/javascript">/**Ie&&FirefoxCopyToClipBoard**/functioncopyToClipBoard(){vartxt=window.location.toString();//txt+=document.title;if(window.clipboardData){window.clipboardD...阅读全文
posted @ 2010-03-14 10:56 .自.在. 阅读(92) 评论(0) 编辑
摘要:       跨页面访问ViewState仅仅适用于通过Post方法或者Server.Transfer方法从一个页面重定向到另一个页面的情况,如果你使用Response.redirect方法将无法实现跨页面访问ViewState. 通过下面的一个例子来演示扩页面访问ViewState 我们创建两个页面,分别为: 1、ViewStateConta...阅读全文
posted @ 2009-07-01 10:33 .自.在. 阅读(308) 评论(0) 编辑
posted @ 2008-12-17 22:52 .自.在. 阅读(20) 评论(0) 编辑
posted @ 2007-12-04 18:15 .自.在. 阅读(5348) 评论(25) 编辑
posted @ 2007-07-31 15:09 .自.在. 阅读(1246) 评论(1) 编辑