今天将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)判断上传断点
- 界面优化,图标方式显示上传状态
此组件在开源项目 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">
<input type="submit" name="Submit" value="上传" onClick="getimginfo();">
</td>
</tr>
</table>
</body>
</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">
<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) 编辑
