goyier 的blog

让学习成为一种生活方式

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  26 随笔 :: 1 文章 :: 0 评论 :: 0 引用

置顶随笔 #

摘要: js浮点运算替代函数 转自:http://www.cnsdn.com.cn/blog/article.asp?id=2079//除法函数,用来得到精确的除法结果//说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。//调用:accDiv(arg1,arg2)//返回值:arg1除以arg2的精确结果function accDiv(arg...阅读全文
posted @ 2009-12-15 16:20 goyier 阅读(303) 评论(0) 编辑

2010年10月29日 #


为什么行排它锁仍无法锁住其它进程去select该数据行?

 

例:

表tmp,10000条数据,id为主键.

在进程一(spid=55)中执行:

 

 在进程二(spid=64)中执行:

 

查看锁信息:

 

可以看到进程二对id=10这行的S锁并不会被进程一中的X锁锁住,这似乎与微软所说的共享锁和排它锁不兼容冲突了,为什么?

 

<!--[endif]-->解释:
在一般情况下,当SQL Server使用默认的锁定方式(行级锁)读取一行记录时,需要依次在相应的表、页和行上获得IS锁(意向共享锁)和S锁(共享锁)。如果是这样的话,那么连接64就会因为无法直接获得ID=10这行上的S锁而被连接55阻塞(S锁与X锁是互斥的)。

这里就涉及到SQL Server在锁管理中的一种特殊情况,当连接64已经获得ID=10这行所在页上的IS锁时(IS和IX兼容),SQL Server会首先检查改页是否为脏页(dirty page),即该页自上一次写入磁盘后(通常是在checkpoint时发生)是否被更新过。如果该页非脏页的话,则SQL Server不需要再在行上获得S锁就可以直接去读取ID=10这行的数据,因为这时已可以保证该页中的所有数据都未在其他任何活动事务中被更新过(即不会出现脏读的问题)。这样对于这个查询语句来说,加行锁这步就被省略掉了(即使加了rowlock锁提示也是如此)。

而如果我们将连接64中的语句写为
select * from tmp with(xlock) where ID=10

select * from tmp with(paglock) where ID=10
则以上查询会分别因为无法获得行上的X锁(与X锁互斥)和页上的S锁(与IX锁互斥)而被连接55阻塞。


 

posted @ 2010-10-29 09:45 goyier 阅读(73) 评论(0) 编辑

2010年8月2日 #

 

在2010中提供的新的界面风格令人耳目一新,但有些用户还是很怀念2007下的界面,为此提供了能够兼容2007界面风格的机制.

2010中如果想要让一个网站切换到2007下的界面风格,可用对象模型将网站"UIVersion"改为3.当切换到3时,网站的母版页自动改为"default.master".

将此切换功能打包作为一个解决方案.为此我们将有一个页面将提供此切换功能。将此页面作为一个自定义操作放置在"网站设置"下的

"外观"栏中.

页面实现:

    1.新建页面 "ChangeUIVersion.aspx",复制"Layouts"目录下的页面"ChangeSiteMasterPage.aspx"(此页面为网站的母版页设置页面)中的内容,然后粘贴到"ChangeUIVersion.aspx"中。

    2.添加页面对程序集"Bonainfo.Sharepoint"的引用,修改页面基类为"Bonainfo.Sharepoint.Code. ChangeUIVersionBase",此类集成自

     "Microsoft.SharePoint.Publishing.Internal.CodeBehind.AreaChromeSettingsPage".

    3.修改页面"ChangeUIVersion.aspx",增加输入区域"sectionUIVersion",添加程序集资源文件"Bonainfo.resx"(用于本地化支持),并将输入区域进行本地化设置.

    4.创建页面基类"ChangeUIVersionBase"

    5.添加功能(Feature)"ChangeUIVersion".

    6.添加元素

           

 

代码
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  
<CustomAction 
     
Id="ChangeUIVersion"
     Location
="Microsoft.SharePoint.SiteSettings"
     GroupId
="Customization"
     Title
="UI版本切换"     
    
>
    
<UrlAction  Url="_layouts/ChangeUIVersion.aspx"/>
  
</CustomAction>
</Elements>

 

    7.部署此解决方案

开发环境为Vs2010+Sharepoint 2010

完整代码打包下载Bonainfo.Sharepoint

posted @ 2010-08-02 11:11 goyier 阅读(67) 评论(0) 编辑

2010年1月25日 #

1.打开此工具出现如下图错误时,需要"WCF Http Activation" 功能

2.可按照如下地址所示方法进行解决

http://blog.sharepointdevelopment.nl/category/VSeWSS.aspx

posted @ 2010-01-25 16:34 goyier 阅读(59) 评论(0) 编辑

2009年12月18日 #

转自 http://blog.aladada.com/Joince/2009/01/08/17812

介绍    
Asp.net是微软.Net战略的一个组成部分。它相对以前的Asp有了很大的发展,引入了许多的新机制。本文就Asp.net页面的生命周期向大家做一个初步的介绍,以期能起到指导大家更好、更灵活地操纵Asp.net的作用。    
当一个获取网页的请求(可能是通过用户提交完成的,也可能是通过超链接完成的)被发送到Web服务器后,这个页面就会接着运行从创建到处理完成的一系列事件。在我们试图建立Asp.net页面的时候,这个执行周期是不必去考虑的,那样只会自讨苦吃。然而,如果被正确的操纵,一个页面的执行周期将是一道有效而且功能强大的工具。许多开发者在编写Asp.net的页面以及用户控件的时候发现,如果知道整个过程中发生了什么以及在什么时候发生将对完成整个任务起到很重要的帮助作用。下面我就向大家介绍一下一个Asp.net页面从创建到处理完成过程中的十个事件。同时,也向大家展示如何在这些事件中添加自己的代码以达到预定的效果。    
一.初始化对象    
一个页面的控件(以及页面本身)最初应被正确的初始化。通过在你的C文件的构造函数中声名所有对象(如图1),页面就知道要创建多少对象以及它们的类型。一旦你在你的构造函数中声名了所有的对象,你就可以通过继承类、方法、事件或是属性访问它们。然而,如果你的一些对象是在Aspx文件中指定的一些控件,那么这些控件就没有属性可言了。同时,通过代码访问它们会产生一些意外的错误,因为这些控件实例是没有一个确定的创建顺序的(如果它们是被一起创建的)。还有,你可以通过OnInit来重载初始化事件    
二.导入Viewstate数据    
在初始化事件后,所有控件只可以通过它们的ID被引用访问(因为还没有相应的DOM可使用)。在LoadViewState这个事件中,所有的控件将获得它们的第一个属性:Viewstate属性。这个属性最终将被返回给服务器以判断这个页面是已经被用户访问完毕还是仍然在被用户所访问。Viewstate属性以“名称/值”对的字符串方式被保存,它包含了控件的文本以及值等信息。该属性被存储在一个隐藏的<input>控件的值属性里,在请求页面时被传递。这种方式比起Asp3.0的维持、判断页面状态的方式有了很大的进步啊。还有,你可以重载LoadViewState事件函数来对相应的控件进行值设定。    
三.用LoadPostData处理Postback数据    
在页面创建的这个阶段,服务器对页面上的控件提交的表单数据(在Asp.net中称postback数据)进行处理。当一个页面提交一个表单时,框架就在每个提交了数据的控件上执行一个IPostBackDataHandler接口操作。然后页面执行LoadPostData事件,解析页面,找到每个执行了IpostBackDataHandler接口操作的控件,并用恰当的postback数据更新这些控件状态。Asp.net是通过用NameValue集中的“名称/值”对和每个控件的唯一的ID匹配来实现这一操作的。所以,在Asp.net的页面上每个控件必须有一个唯一的ID,不可以出现几个控件共有ID的情况。即使是用户自定义的一些控件,框架也会赋予它们各自唯一的ID的。在LoadPostData事件后,就要执行下面的RaisePostDataChanged事件了。    
四.导入对象    
在Load事件中,对象都实例化了。所有的对象第一次被布置在DOM页面(在Asp.net中称控件树)里了并且可以通过代码或是相关的位置被引用。这样,对象就可以很容易的从客户端获得诸如宽度、高度、值、可见性等在Html中的属性值。在Load事件中,当然还有像设置控件属性等操作的发生。这个过程是整个生命周期中最重要、最主要的,你可以通过调用OnLoad来重载Load事件    
五.RaisePostBackChanged事件    
就像在上面提到的那样,这个事件是发生在所有的控件执行了IPostBackDataHandler接口操作并被正确的postback数据更新后的。在这个过程中,每个控件都被赋予一个布尔值来标志该控件有没有被更新。然后,Asp.net就在整个页面上寻找任何已被更新过的控件并执行RaisePostDataChanged事件操作。不过,这个事件是要在所有的控件都被更新了以及Load事件完成后才进行的。这样就保证了一个控件在被postback数据更新前,别的控件在RaisePostDataChanged事件中是不会被手动改变的。    
六.处理客户端PostBack事件    
当由postback数据在服务器端引起的事件都完成后,产生postback数据的对象就执行RaisePostBackEvent事件操作。可是会有这种情况,由于一个控件状态的改变使得它将表单返回给服务器或是用户点击了提交按钮使得表单返回给服务器。在这种情况下应该有相应的处理代码来体现事件驱动这一面向对象(OOP)编程原则。由于要满足呈现给浏览器的数据的精确性要求,在一系列postback事件中RaisePostBackEvent事件是最后发生的。    
在postback过程中改变的控件不应在执行功能函数被调用后更新。也就是说,任何由于一个预期的事件而改变的数据应该在最终的页面上被反映出来。你可以通过修改RaisePostBackEvent函数来满足你的要求    
七.预先呈递对象    
可以改变对象并将改变保存的最后时刻就是这一步――预先呈递对象。这样,你可以在这一步对控件的属性、控件树结构等作出最后的修改。同时还不用考虑Asp.net对其作出任何改变,因为此时已经脱离了数据库调用以及viewstate更新了。在这一步之后,对对象的所有修改将最终被确定,不能被保存到页面的viewstate中了。你可以通过OnPreRender来重载这一步。    
八.保存ViewState    
所有对页面控件的修改完成后viewstate就被保存了。对像的状态数据还是保留在隐藏的<input>控件里面,呈现给Html的对象状态数据也是从这里取得的。在SaveViewState事件中,其值能被保存到viewstate对象,然而这时在页面上控件的修改却不能了。你可以用SaveViewState来重载这一步    
九.呈递给Html    
运用Html创建给浏览器输出的页面的时候Render事件就发生了。在Render事件过程中,页面调用其中的对象将它们呈递给Html。然后,页面就可以以Html的形式被用户的浏览器访问了。当Render事件被重载时,开发者可以编写自定义的Html代码使得原先生成的Html都无效而按照新的Html来组织页面。Render方法将一个HtmlTextWriter对象作为参数并用它将Html在浏览器上以网页的形式显示。这时仍然可以做一些修改动作,不过它们只是客户端的一些变化而已了。你可以重载Render事件    
十.销毁对象    
在呈递给Html完成后,所有的对象都应被销毁。在Dispose事件中,你应该销毁所有在建立这个页面时创建的对象。这时,所有的处理已经完毕,所以销毁任何剩下的对象都是不会产生错误的,包括页面对象。你可以重载Dispose事件,见图6。    
全文总结    
以上就是Asp.net页面生命周期中的十个事件。每次我们请求一个Asp.net页面时,我们都经历着同样的过程:从初始化对象到销毁对象。通过了解Asp.net页面的内部运行机制,我相信大家在编写、调试代码的时候会更加游刃有余的

posted @ 2009-12-18 08:51 goyier 阅读(27) 评论(0) 编辑

2009年12月15日 #

js浮点运算替代函数 转自:http://www.cnsdn.com.cn/blog/article.asp?id=2079


//除法函数,用来得到精确的除法结果
//说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
//调用:accDiv(arg1,arg2)
//返回值:arg1除以arg2的精确结果
function accDiv(arg1,arg2){
    var t1=0,t2=0,r1,r2;
    try{t1=arg1.toString().split(".")[1].length}catch(e){}
    try{t2=arg2.toString().split(".")[1].length}catch(e){}
    with(Math){
        r1=Number(arg1.toString().replace(".",""))
        r2=Number(arg2.toString().replace(".",""))
        return (r1/r2)*pow(10,t2-t1);
    }
}

//给Number类型增加一个div方法,调用起来更加方便。
Number.prototype.div = function (arg){
    return accDiv(this, arg);
}

//乘法函数,用来得到精确的乘法结果
//说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
//调用:accMul(arg1,arg2)
//返回值:arg1乘以arg2的精确结果
function accMul(arg1,arg2)
{
    var m=0,s1=arg1.toString(),s2=arg2.toString();
    try{m+=s1.split(".")[1].length}catch(e){}
    try{m+=s2.split(".")[1].length}catch(e){}
    return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)
}

//给Number类型增加一个mul方法,调用起来更加方便。
Number.prototype.mul = function (arg){
    return accMul(arg, this);
}

//加法函数,用来得到精确的加法结果
//说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
//调用:accAdd(arg1,arg2)
//返回值:arg1加上arg2的精确结果
function accAdd(arg1,arg2){
    var r1,r2,m;
    try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
    try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
    m=Math.pow(10,Math.max(r1,r2))
    return (arg1*m+arg2*m)/m
}

//给Number类型增加一个add方法,调用起来更加方便。
Number.prototype.add = function (arg){
    return accAdd(arg,this);
}

posted @ 2009-12-15 16:20 goyier 阅读(303) 评论(0) 编辑

2009年8月3日 #

摘要: 在moss中添加多语言支持,此前一直没有处理过,今天在网上搜了几篇博文:1.http://www.cnblogs.com/netcai/archive/2008/12/17/1357157.html2.http://bbs.winos.cn/thread-39286-1-8.html按照以上两篇所述进行操作,一切完成以后,竟然发现在创建网站集的时候,根本没有选择语言的下拉列表,苦寻了半天,原来还需...阅读全文
posted @ 2009-08-03 13:37 goyier 阅读(190) 评论(0) 编辑

2009年7月28日 #

摘要: silverlight 3.0 的某些鼠标事件,似乎不支持全屏,如:MouseEnter,MouseLeave,有待验证阅读全文
posted @ 2009-07-28 07:36 goyier 阅读(172) 评论(0) 编辑

2009年7月27日 #

摘要: 这几天在测试moss2007内置的工作流的时候,想看看源码,但是在12下找了很长时间,没有找到“Microsoft.Office.Workflow.Routing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c”这个程序集,终于用xcopy命令将gac中的所有文件都copy到另外一个目录...阅读全文
posted @ 2009-07-27 11:07 goyier 阅读(106) 评论(0) 编辑

2009年7月15日 #

摘要: windows server 2008 域环境下部署程序集需要用域管理员账户阅读全文
posted @ 2009-07-15 10:58 goyier 阅读(76) 评论(0) 编辑

2008年10月17日 #

摘要: 1.Wait活动首先等待一段指定的时间的流逝,然后在完成.代码如下:[代码]这个自定义的Wait活动依赖TimerService的实现,TimerServices管理着实际的计时器,在Wait活动的Execute方法中,创建一个WF程序队列并注册了ContinueAt方法,随后调用TimerServices的SetTimer方法,将一个代表计时器的Uid传入方法,当计时器被触发时,TimerSer...阅读全文
posted @ 2008-10-17 16:19 goyier 阅读(92) 评论(0) 编辑

2008年10月16日 #

摘要: 1.任何需要外部实体输入的活动,都必须解决两方面问题 第一:必须要让外部实体知道该活动需要输入消息第二:当消息到达时,接收通知这种简单的方式是片段式执行的核心,要支持这种方式,最基本的要求是活动必须能接收输入,即使是在WF程序实例处在空闲状态,甚至是存储在类似SQL Server数据库这样的持久化存储设备中时,也要能够接收输入.当外部输入到达时,WF程序实例必须能够恢复执行2.尽管各种通信技术(比...阅读全文
posted @ 2008-10-16 15:32 goyier 阅读(110) 评论(0) 编辑

2008年8月19日 #

摘要: 1.客户端部分<script language="javascript" type="text/javascript">var xhr=null;//创建XMLHTTPRequestfunction getXHR(){var _xhr=null; if(window.ActiveXObject) { _xhr=new ActiveXObject("Microsoft.XMLHTTP")...阅读全文
posted @ 2008-08-19 15:01 goyier 阅读(185) 评论(0) 编辑

2008年8月15日 #

摘要: 翻译。原文出处:http://www.webreference.com/js/column10/eventbubbling.html 今天忽然感觉对IE的事件模型都点儿模糊,赶紧找了片文章,巩固一下。IE4x,介绍一种新的处理事件的方法----事件冒泡。对Html和Javascript来说这是全新的,但是在许多其他的环境中他早已经被应用,如:windows,os/2,HyperCard等。起始的时...阅读全文
posted @ 2008-08-15 14:56 goyier 阅读(2045) 评论(0) 编辑

2008年8月11日 #

摘要: 1.PageRequest与ScriptManager,UpdatePanel,一起协作,从而启用部分页更新,PageRequestManager类,使能够在客户端页的生命周期内,处理事件。2.使用PageRequestManager类,是有前提的,即:在被使用的页面上必须要有ScriptManager控件,并且他的EnablePartialRendering属性要设置为'True'.3.在客户端...阅读全文
posted @ 2008-08-11 15:17 goyier 阅读(54) 评论(0) 编辑

2008年8月5日 #

摘要: 待续....阅读全文
posted @ 2008-08-05 08:14 goyier 阅读(40) 评论(0) 编辑

2008年7月27日 #

摘要: 转 http://www.cnblogs.com/Bear-Study-Hard/archive/2008/03/26/1123267.html阅读全文
posted @ 2008-07-27 14:45 goyier 阅读(61) 评论(0) 编辑

摘要: 浏览 Windows SharePoint Services Web 站点时收到“Service Unavailable”(服务不可用)错误信息 症状当您浏览一个 Windows SharePoint Services Web 站点时,您可能会收到下面的错误信息:Service Unavailable 原因如果 Microsoft Internet 信息服务 (IIS) 6...阅读全文
posted @ 2008-07-27 12:16 goyier 阅读(188) 评论(0) 编辑

2008年5月4日 #

摘要: 像早些时候说起的那样,像他的名字所指示的那样,顺序工作流顺着一个规定好了的步骤序列,从开始向结尾移动.当他们被呈现为图形的时候,是容易理解和遵循的。因此,绝大多数人选择顺序工作流作为他们研究工作流的开始.顺序工作流的一个关键的原则就是参与者不能确定工作流的下一步。每个参与者仅仅提示工作流引擎,他们已经完成了他们的步骤。他们可能或者不可能有任何关于他们完成他们的任务以后会发生什么的知识。就像我在前面...阅读全文
posted @ 2008-05-04 11:20 goyier 阅读(62) 评论(0) 编辑

2008年4月24日 #

摘要: 第一步:生成数据库1.运行Asp.net SqlServer安装向导C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql.exe2.指定Sql实例和数据库名称. 3.完成第二步:添加provider1.打开C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config2...阅读全文
posted @ 2008-04-24 10:01 goyier 阅读(215) 评论(0) 编辑

2008年3月28日 #

摘要: ....今天在写工作流的时候发现,用workflowproperty.web.CurrentUser,获得的总是系统帐户经过一番研究终于找到了解决的方法 代码如下:public SPUser GetCurrentUser() { SPUser user=null; Microsoft.Office.Workflow.Utility.Contact con = Microsoft.Office.Wo...阅读全文
posted @ 2008-03-28 19:54 goyier 阅读(263) 评论(0) 编辑

2008年3月26日 #

摘要: 在设计工作流表单时一些容易出错的地方1.在设计表单摸板时,要把"仅启用浏览器兼容性功能"复选框,选中。2.配置主要数据源:主数据源用来向宿主提交数据,编辑提交按钮的规则,并依次添加"使用数据链接进行提交" 和"表单不提示"操作3.配置辅助数据源:首先要新建两个Xml文档如下: (1)<z:row xmlns:z="#RowsetSchema" ows_AfterMan="" ows_Afte...阅读全文
posted @ 2008-03-26 19:10 goyier 阅读(167) 评论(0) 编辑

2008年3月25日 #

摘要:     利用CreateTask活动的SpecialPermissons属性来解决工作流任务的权限,将任务的分配者添加到这个属性中,并为其分配相应的权限:                   ...阅读全文
posted @ 2008-03-25 14:14 goyier 阅读(59) 评论(0) 编辑

2007年12月14日 #

摘要: 正在进行阅读全文
posted @ 2007-12-14 11:43 goyier 阅读(89) 评论(0) 编辑

2007年12月13日 #

摘要: 在页面上应用滤镜,让页面更加多彩:1.在页面<head></head>间,添加以下代码可以在进入或者离开该页面时,显示滤镜效果:<meta http-equiv="Page-Enter" content="RevealTrans(duration=3.0,transition=23)"> <meta http-equiv="Page-Exit" conte...阅读全文
posted @ 2007-12-13 20:58 goyier 阅读(198) 评论(0) 编辑

2007年10月23日 #

摘要: js的面向对象类型系统使我们能够按照面向对象的规则来定义和使用类: <script language="javascript"type="text/javascript"> //注册命名空间Type.registerNamespace("MyCustomNamespace");//定义构造函数 MyCustomNamespace.point=function(x,y) { this._...阅读全文
posted @ 2007-10-23 18:05 goyier 阅读(78) 评论(0) 编辑

摘要: 最近在看WSS3.0的SDK,开始感觉头很大,一是因为全是英文,对自己的英文阅读水平是一个挑战,二是因为她很庞大.在看的时候,自己不免有些急噪.然而当自己真的冷静下来的时候,才发现柳暗花明又一村.在学之前首先要给自己一个定位,我是一个程序员,那当然要从程序员的角度去看待它.不管是WebApplication,还是网站集,不管它是文档库,还是自定义列表,还是工作流,他们都有自己的对象模型,都有自己的...阅读全文
posted @ 2007-10-23 16:34 goyier 阅读(71) 评论(0) 编辑