如果不能设置AnkhSvn成为VS源代码管理插件,则需要执行命令:

 

  devenv /resetskippkgs

 

意为重置插件环境!

 

方法出处:http://www.coderblog.in/2010/04/%e9%87%8d%e7%bd%aevs2008%e6%8f%92%e4%bb%b6%e7%8e%af%e5%a2%83.html 非常感谢! 

 

 

如果你是64位系统(本人遇到问题是VISTA X64)并且使用IIS7来部署ASP.NET网站时,若出现 “未能加载文件或程序集“XXX”或它的某一个依赖项。试图加载格式不正确的程序” 错误

 

则将自己 设定的“经典”应用程序池 -》高级设置(右边的栏目里)-》启用32位应用程序(设置成True)即可搞定!

方法出处:http://www.cnblogs.com/delphinet/archive/2010/03/25/1695531.html    非常感谢!

posted @ 2010-04-29 17:24 ClarkZhou 阅读(338) 评论(0) 编辑

最近做一个东西需要如下效果:

后来根据 殷良胜老大的【经典布局第五篇】稍做了下修改,实现了需要的效果,唯一不同的是我使用了TabPanel,实现方式几乎都是一样的,可能有那么一点小差异,把在实现过程中的一些问题罗列一下,以供以后参考!

 

具体划分情况:

    

记录代码:

   

function formTest()

{

//<s-------------------这一段要放前面,不过可以先不用看!-------------------------------

    var L_RowOne=new Ext.Panel({//上左第一行

         layout:"column",    //采用列布局方式

         border:false,       //去掉边框

         items:[{

         layout:'form', //必须要加,不然不显示下面的控件,因为column替换了前面一个FORM,这里的再给它加上               

         columnWidth:.5, //上左宽度的一半

         border:false,

         defaultType: 'textfield',

         items:[{

            fieldLabel:"用户名"       

         }]

         },

         {

            layout:'form',   //第二列依然        

            columnWidth:.5,

            border:false,

            defaultType: 'textfield',

            items:[{

                  fieldLabel:"密码"             

            }]

         }]

   

    })

    var L_RowTwo=new Ext.Panel({//上左第二行

         layout:"column",   

         border:false,      

         items:[{

         layout:'form',                

         columnWidth:.5,

         border:false,

         defaultType: 'textfield',

         items:[{

            fieldLabel:"用户名"             

         }]

         },

         {

            layout:'form',                

            columnWidth:.5,

            border:false,

            defaultType: 'textfield',

            items:[{

                  fieldLabel:"密码"              

            }]

         }]

   

    })

    var L_RowThree=new Ext.Panel({//上左第三行

         layout:"column",   

         border:false,      

         items:[{

         layout:'form',                

         columnWidth:.5,

         border:false,

         defaultType: 'textfield',

         items:[{

            fieldLabel:"用户名"             

         }]

         },

         {

            layout:'form',                

            columnWidth:.5,

            border:false,

            defaultType: 'textfield',

            items:[{

                  fieldLabel:"密码"             

            }]

         }]

   

    })

   

 

var L_RowFour=new Ext.Panel({//上左第四行

         layout:"column",   

         border:false,      

         items:[{

         layout:'form',                

         columnWidth:.5,

         border:false,

         defaultType: 'textfield',

         items:[{

            fieldLabel:"用户名"             

         }]

         },

         {

            layout:'form',                

            columnWidth:.5,

            border:false,

            defaultType: 'textfield',

            items:[{

                  fieldLabel:"密码"             

            }]

         }]

   

})

 //<------------------这一段要放前面,不过可以先不用看!-----------------------------e>

这一段确实有点苦恼,要是你有10行就得加入10个Panel,要是你有N行就得加入N个,如果能够通过配置生成那该多好啊 ,不过,现在也只能想想,能实现的配置也不怎么智能,那就还是有时间再看吧!

   

    var LeftPnl=new Ext.Panel({//左边N列

        layout:"form",//这里要为form

        columnWidth:.6,

       // labelPad:0,

        style:'height:105px',

        labelWidth:80,

        border:false,

        items:[       

        L_RowOne, //添加上面的行

        L_RowTwo,

        L_RowThree,

        L_RowFour

//        {

//           border:false,

//           fieldLabel:"密码"       

//        }

        ]

    })

    var RightPnl=new Ext.Panel({//上右,没问题很简单

        layout:"form",

        columnWidth:.4,

        defaultType: 'textarea', //暂时使用它来顶替下

        style:'height:105px',

        //labelPad:0,//label与输入控件的距离

       

        border:false,

        labelWidth:80,

        items:[{

           fieldLabel:"图片",

           style:'with:120px;height:95px'

        }]

    })

    var pnl=new Ext.Panel({//整个上边pnl

        layout:"column",//分为上左上右两块

        border:false,

        items:[LeftPnl,RightPnl]

    })

    var Bottom=new Ext.Panel(//下边块,再次感叹,要是能配置那是多么爽的事情啊!哈哈!

        {

             layout:'column',

            // defaultType: 'textfield',

             //isFormField:true, 

             border:false,

             items:[

             {

                 layout:'form',                 

                 columnWidth:.3,

                  border:false,

                 items:[{

                       fieldLabel:'测试1',xtype:'field'

                 }]

             },

             {

              layout:'form',             

              columnWidth:.3,

               border:false,

              items:[{

              xtype:'field',

              fieldLabel:'测试2'}]

             

             },

             {

              layout:'form',             

              columnWidth:.3,

               border:false,

              items:[{

              xtype:'field',

              fieldLabel:'测试3'}]

             

             }

             ]

          }

    )

   

   

    var frm=new Ext.FormPanel({//主体了

        labelWidth:80,

       //labelPad:0,

        renderTo:Ext.getBody(),      

        items:[{

          xtype:'tabpanel',

          defaults:{autoHeight:true,bodyStyle:'padding:10px'},

         // deferredRender :true,

          layoutOnTabChange :true, //这个是必须加的,不然点击PANeL后是没有反应的

          //defaultType: 'textfield',

          activeTab: 0,          

          items:[

          {title:'pnll1'},

          {title:'pnll2',layout:'form',items:[pnl,Bottom]} //同时加载上下两部分,

 

//isFormField:true,这个东西我用起来有问题

         

          ]

        }

       ]

    })

} 

Ext.onReady(function(){

     formTest();

});

 

 

总结:Ext的布局方式还是比较灵活的,table布局方式还没有试过,虽然我这个写的代码有点多,方法比较原始,不过呢,能满足需求就先用吧,如果有什么好的方法再改进,至于往深层次考虑,那就只能自己再花些时间了!哈哈!

posted @ 2009-03-24 16:41 ClarkZhou 阅读(4578) 评论(2) 编辑

总结:C++左右自增符的区别,如下:

int i=0,j,m;

j=i++;

所得结果:j=0,原因:右自增符是先赋值后再计算(i+1)。即:此时,j=0;i=1.

i=0;

m=++i;

所得结果:j=1,原因:左自增符是先计算(i+1)再赋值。即:此时,j=1;i=1;

使用左自增符会比使用右自增符的效率高!

为什么使用左自增操作符的原因:

  
  for   (   int   i   =   0;   i   <   100;   i++   )    
  {    
          /*   …………   */    
  }  
   
   
  但是很少有人想过代码背后隐藏的问题。读过STL源代码的人,都会对下面的代码一定很熟悉。    
   
   
  template<class   _II,   class   _OI>   inline    
  _OI   copy(   _II   _F,   _II   _L,   _OI   _X   )    
  {    
          for   (   ;   _F   !=   _L;   ++_X,   ++_F   )    
                  *_X   =   *_F;    
          return   (_X);    
  }    
  //   摘自Visual   C++   6.0   STL实现,文件:xutility。    
   
     
   
  为什么它不写成    
   
   
  template<class   _II,   class   _OI>   inline    
  _OI   copy(   _II   _F,   _II   _L,   _OI   _X   )    
  {for   (   ;   _F   !=   _L;   _X++,   _F++   )    
          *_X   =   *_F;    
          return   (_X);    
  }  
   
   
  看完这篇文章,你就可以知道这样写的理由。    
   
  C++是一种非常强大的语言,它赋予了它的使用者和他的创建者相同的权力。每一个内在的数据类型所支持的操作,你几乎都可以为自己定义的类型实现。运算符重载是其中的重要组成部分。    
   
  对于一个类CInt的运算符(这里只讨论加法),我们一般会这样实现:    
   
   
  class   CInt    
  {    
  public:    
          CInt&   operator   ++();    
          CInt   operator   ++(   int   );    
          CInt&   operator   +=(   const   CInt&   that   );    
  };    
   
  CInt   operator   +(   const   CInt&   this,   const   CInt&   that   );  
   
   
  其中,CInt&   operator   ++();对应于++i;(如果i是CInt的一个实例,下同)返回引用的原因是因为在C++里,++i的结果应该是一个左值。对这个函数的调用,除了运算本身以外,并没有什么开销。(除了隐含的this以外,无传递参数,只有一个引用返回值,所以没有新的实例被创建)    
  CInt   operator   ++(   int   );   对应于i++;那个int是无意义的,只是为了把前缀运算和后缀运算区分开。返回变量(而不是引用)的原因是因为在C++里,i++的结果应该是一个右值,并且是i在没有加之前的值(所以不能返回它的const引用)。在这个函数中,会创建一个临时变量,并把它作为返回值拷贝给调用者。    
  CInt&   operator   +=(   const   CInt&   that   );对应于i   =   i   +   j;传递一个参数,从理论上来说,它的开销和++I的开销是一样的,但是,如果你只是要对类的实例加一的话,应该用++I,因为那个函数可能为加一而特别优化过。(具体可以参见实例)    
  CInt   operator   +(   const   CInt&   this,   const   CInt&   that   );对应于k   =   i   +   j;这个函数的开销与i++相同,但是要注意的是,i++可能为加一而优化的。    
   
  为了能够显著的测出各个函数的具体效率,我使用了一个非常"大"的类,CVector,一个65536维的整型向量。测试结果为:    
   
  Another   +=   One   :   4326    
  Another++   :   9274    
  Another   =   Another   +   One   :   9223    
  ++Another   :   2153    
   
  可以看出,同样是加一,++i可以比i++快很多。    
   
  当然,编译器的优化也很重要,在某些情况下,编译器可以将i++的速度优化到和++i一样。但是,为什么不直接写出++i呢?这样可以保证在任何情况下都能获得较快的执行速度,而不是去依赖于编译器的优化。(至少,Visual   C++   6.0是不支持的)

 

  虽然还没怎么看懂,但是留此后用,以便查阅。

posted @ 2008-10-16 16:20 ClarkZhou 阅读(60) 评论(0) 编辑

 

1. TOP 表达式
SQL Server 2000的TOP是个固定值,是不是觉得不爽,现在改进了。 

 

--前n名的订单
declare
 @n int 
set @n = 10 
select TOP(@n* from Orders

 


2. 分页

不知各位过去用SQL Server 2000是怎么分页的,大多都用到了临时表。SQL Server 2005一句话就支持分页,性能据说也非常不错。

 

 

--按Freight从小到大排序,求20到30行的结果 
select * from
    
select OrderId, Freight, ROW_NUMBER() OVER(order by Freight) as row from Orders 
) a 
where row between 20 and 30

 


3. 排名

 

select * from
    
select OrderId, Freight, RANK() OVER(order by Freight) as rank from Orders 
) a 
where rank between 20 and 30

 


4. try ... catch

SQL Server 2000没有异常,T-SQL必须逐行检查错误代码,对于习惯了try catch程序员,2005是不是更加亲切:

 

 

SET XACT_ABORT ON  -- 打开 try功能 
BEGIN TRY 
    
begin tran 
        
insert into Orders(CustomerId) values(-1
    
commit tran 
    
print 'commited' 
END TRY 
BEGIN
 CATCH 
    
rollback    
    
print 'rolled back' 
END CATCH

 


5. 通用表达式CTE

通过表达式可免除你过去创建临时表的麻烦。

 

 

--例子:结合通用表达式进行分页
WITH OrderFreight AS
    
select OrderId, Freight, ROW_NUMBER() OVER(order by Freight) as row from Orders 

select OrderId, Freight from OrderFreight where row between 10 and 20

 

特别,通过表达式还支持递归。


6. 直接发布Web Service

想要把store procedure变成Web Service就用这个吧,.NET, IIS都不需要,通过Windows 2003的HTTP Protocol Stack直接发布WebService,用这个功能需要Windows 2003 sp1

 

--DataSet CustOrdersOrders(string customerID) 
CREATE ENDPOINT Orders_Endpoint 
state
=started 
as http( 
    path
='/sql/orders'
    AUTHENTICATION
=(INTEGRATED), 
    ports
=(clear) 

for soap( 
    WebMethod 
'CustOrdersOrders'(   
        name
='Northwind.dbo.CustOrdersOrders' 
    ), 
    
    wsdl
=default
    
database='Northwind'
    namespace
='http://mysite.org/' 
)

 

Web Service就发布好了,敲入http://localhost/sql/orders?wsdl得到wsdl

在http通讯时,例子代码使用的是Windows集成验证 。
给个客户端例子。
private void button1_Click(object sender, EventArgs e)
{
    localhost.Orders_Endpoint endp 
= new localhost.Orders_Endpoint();
    endp.Credentials 
= System.Net.CredentialCache.DefaultCredentials;
    
object[] r = endp.CustOrdersOrders("VINET");

    DataSet ds 
= new DataSet();
    
foreach(object o in r)
        
if (o is DataSet) ds = (DataSet)o;

    dataGridView1.DataSource 
= ds.Tables[0];            
}

SQL Server 2005支持basic, digest, sql auth等多种验证,你需要编写不同的验证代码。 

 

转载自:http://blog.csdn.net/jimmyxing/archive/2007/09/15/1786749.aspx

posted @ 2008-09-28 10:20 ClarkZhou 阅读(208) 评论(0) 编辑

今天看到别人的问题,在此留下笔记以备以后遇到。

表T结构

A      B

a1    10

a2    10

a3    10

要求:查询后得出如下结果:

A      B

a1    10

a2    20

a3    30

实现:

1、sql2005实现:使用了sql2005自带函数RANK()   这里注意:由于B字段值相同不能使用B字段进行RANK,否则结果是序号列的值都会为1,从而导致计算查询结果失败;还有一点需要注意的是被rank的字段不能有相同值,否则将会出现两个相同的序号。如果抛开以上问题,则可以使用ROW_NUMBER()函数替换RANK(),作用是生成唯一行号,这个看起来好像更合理一点 ^ ^。   在此特别感谢  @沈啣结  的提醒。

    下面假定A字段无重复值:

1、SELECT A,B*sNO as B FROM (SELECT RANK() OVER (ORDER BY A DESC) AS sNO,
         A,B
FROM T) n

2、SELECT A,B*sNO as B FROM (SELECT ROW_NUMBER() OVER (ORDER BY (被查询的任意列)DESC) AS sNO,
         A,B
FROM T) n

2、sql2000实现: 修改原因和sql2005实现一样

SELECT A,B*sNO as B FROM (SELECT TOP 100 sNO= (SELECT COUNT(*) FROM T AS A
                    WHERE A.A<= B.A),
       A,B
FROM T AS B ORDER BY 1) n

 

说明:先通过内部查询动态增加表列名:sNO,然后再通过外层查询进行具体的计算!

以上两种实现方式相同,这只是一种思路,应该还有其他实现方法,望指出!不胜感谢!!

posted @ 2008-09-27 15:45 ClarkZhou 阅读(482) 评论(5) 编辑
posted @ 2008-09-16 13:28 ClarkZhou 阅读(20) 评论(0) 编辑
posted @ 2008-09-05 13:47 ClarkZhou 阅读(1762) 评论(0) 编辑
posted @ 2008-08-28 14:53 ClarkZhou 阅读(287) 评论(0) 编辑
posted @ 2008-05-16 15:43 ClarkZhou 阅读(242) 评论(2) 编辑
posted @ 2008-05-10 17:13 ClarkZhou 阅读(55) 评论(0) 编辑

公告

昵称:ClarkZhou
园龄:3年10个月
粉丝:0
关注:0
<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910