以前听大家说*号在css中要慎用,原来一直没有发现问题,今天帮客户改样式让我认识到*的危险性,举个简单的例子

<span style="font-size: 16px"><span style="color: #000000">测试内容</span></span> 

这段html在浏览器中可以将字体设置为16px,但是加上 

*{font-size:12px;}

后字体的大小将即成*号设置的大小即12px

建议大家以后定义全局样式话用下面的代码吧

 html,body,h1,h2,h3,h4,h5,h6,p,br,form,input,button,textarea,select,fieldset,blockquote,ul,ol,li,dl,dt,dd,pre{margin:0;padding:0;}

posted @ 2011-07-22 11:04 Judas 阅读(147) 评论(0) 编辑

       最近发现原来用.net 2.0做的一个项目经常出现一些账号无发登陆的问题,细查一下发现原来是无法获取cookie中的用户登陆成功的验证信息造成的,由于在cookie中用保存了一些中文的信息,在cookie生成时,中文变成乱码,扰乱了正常的cookie读取,用URLEncode对中文进行编码以后一切正常了,,真是细节决定成功啊,以后在cookie中保存中文信息时一定要进行编码。

     在问题解决之前,一次意外的发现在cookie中的中文乱码在1.1的页面中竟然能正常的显示(在web.config中的配置编码方式都是一致的),能够正常获得用户的验证信息,于是专门做了一个1.1的页面来验证2.0和1.1在读取cookie时的不同

  1. 在cookie中保存的同一个用户的ASP.NET_SessionId在不同的页面中读取到的信息不同,我想这个是不是跟页面本身有关啊,同一个session在不同页面中的sessionid也不相同,这点还需进行验证
  2. 在不同的页面,读取cookie的顺序不同

           以上是本人的一点理解,如有不对的地方请大家斧正

posted @ 2008-10-31 12:00 Judas 阅读(174) 评论(0) 编辑
 
在itpub中看到一个c# Winform实现对数据库的操作,可惜很多是写死了的,不过这到让我想到了是否可以通过存储过程实现对数据库和表结构的操作。有些时候,项目中可能要动态的增加表字段,删除表字段,重命名之类的,而客户端不一定能访问到远程的服务器,在这个时候也许就会有些许用处了。总结了一下,我把相关的存储过程实现,经在SQL2005 测试是OK的,我把他放上来,跟大家分享,同时欢迎大家多多指教.
希望能对大家有用.


创建表

CREATE PROCEDURE dbo.CreateUserTable
    @TableName sysname
AS
    EXEC('CREATE TABLE '+@TableName+
        ' (column1 varchar(100), column2 varchar(100))');


GO


读取表中字段

create procedure SelectTableField
@TableName varchar(50)
as
SELECT     TABLE_CATALOG AS [Database], TABLE_SCHEMA AS Owner, TABLE_NAME AS TableName, COLUMN_NAME AS ColumnName,  ORDINAL_POSITION AS OrdinalPosition, COLUMN_DEFAULT AS DefaultSetting, IS_NULLABLE AS IsNullable, DATA_TYPE AS DataType,  CHARACTER_MAXIMUM_LENGTH AS MaxLength, DATETIME_PRECISION AS DatePrecision,COLUMNPROPERTY(object_id(TABLE_NAME), COLUMN_NAME, 'IsIdentity') as IsIdentity 
FROM         INFORMATION_SCHEMA.COLUMNS WHERE     (TABLE_NAME = @TableName)


删除表

CREATE PROCEDURE dbo.DropUserTable
    @TableName sysname
AS
    IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_SCHEMA = 'dbo'
        AND TABLE_TYPE = 'BASE TABLE'
        AND TABLE_NAME = @TableName)
    BEGIN
      
    EXEC('drop TABLE ' +  @TableName);
      
    END


表的重命名

CREATE PROCEDURE dbo.ReNameUserTable
    @OldTableName sysname,
    @NewTableName sysname
AS
    IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_SCHEMA = 'dbo'
        AND TABLE_TYPE = 'BASE TABLE'
        AND TABLE_NAME = @OldTableName)
    BEGIN
      
    exec sp_rename  @OldTableName ,@NewTableName
      
    END


增加表中字段

CREATE PROCEDURE dbo.AddUserTableField
    @TableName sysname,
    @FieldName varchar(200)
AS
    IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_SCHEMA = 'dbo'
        AND TABLE_TYPE = 'BASE TABLE'
        AND TABLE_NAME = @TableName)
    BEGIN
      
    exec ('alter table ' + @TableName + ' Add ' +  @FieldName +' varchar(200) ') 
      
    END


删除表中字段

CREATE PROCEDURE dbo.DropUserTableField
    @TableName sysname,
    @FieldName varchar(200)
AS
    IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES
        WHERE TABLE_SCHEMA = 'dbo'
        AND TABLE_TYPE = 'BASE TABLE'
        AND TABLE_NAME = @TableName)
    BEGIN
      
    exec ('alter table ' + @TableName + ' drop column ' +  @FieldName ) 
      
    END


数据库重命名(这个貌似会出错,出于共享锁的原因)

create procedure RenameDataBase
@OldDataBaseName varchar(20),
@NewDataBaseName varchar(20)
as

begin
EXEC sp_renamedb @OldDataBaseName ,@NewDataBaseName 
end


获取所有的存储过程

  
create procedure SelectAllProcedure
as
EXEc   sp_MSforeachObject   @command1="sp_helptext   '?'   ",@objectType=4 

go

获取所有的视图

create procedure SelectAllView
as
EXEc   sp_MSforeachObject   @command1="sp_helptext   '?'   ",@objectType=2 
go
posted @ 2007-12-19 11:09 Judas 阅读(40) 评论(0) 编辑
posted @ 2007-12-18 09:36 Judas 阅读(436) 评论(0) 编辑
【功能概述】
AlwaysVisibleControl 是一个简单的扩展控件可以让一部分内容浮动在页面上,当滚动页面或者改变浏览器大小时总是可见的。它可以扩展任意一个Asp.net 控件,并可按照要求设置水平 竖直方向上的相对距离.
最多的应用是在线阅读的目录和不胜其烦的浮动小广告。
 
【细节】
(1) 避免控件闪烁,要扩展的控件要使用absolutely position
(2) HorizontalSide="Center" VerticalSide="Top" 使用这个方式控制浮动的位置
(3) Var label = ocument.getElementById('ctl00_SampleContent_currentTime');这行代码我们可以使用更简单的方法:var label = $get('ctl00_SampleContent_currentTime');
 
【代码示意】
<cc1:AlwaysVisibleControlExtender ID="AlwaysVisibleControlExtender1" HorizontalSide="Center" VerticalSide="Top"  TargetControlID="Panel1" runat="server">
posted @ 2007-12-18 09:17 Judas 阅读(73) 评论(0) 编辑
1. Accordion
 
【功能概述】
Accordion可以让你设计多个panel 并且一次只显示一个Panel .在页面上的显示效果就像是使用了多个CollapsiblePanels只不过每一次只展开其中一个CollapsiblePanel.Accordion控件内部包含了若干个AccordionPane,每一个AccordionPane的template里包括了对其Header和Content的定义。我们可以在后台代码中通过SelectedIndex属性取得当前展开的哪一个Panel,还可以控制哪一个Panel展开。
经常可以见到类似的效果,比如QQ、Msn好友分类的折叠效果。
 
【细节】
(1) 不要把Accordion放在Table中而又把 FadeTransitions 设置为True,这将引起布局混乱
(2) 在AccordionPane模板中的Content中可以定义任何Web元素,表现的就像一个容器
(3) AccordionPane内容模板自动改变大小有三种AutoSize modes :None(推荐) Limit  Fill
(4) $find('ctl00_ContentPlaceHolder1_MyAccordion_AccordionExtender')这里找到的是Behavior.什么是Behavior呢?在Asp.net Ajax框架中包含一组动作并完成一个功能. Accordion的一个Behavior就是淡入淡出.找到Behavior的引用,behavior.set_FadeTransitions()  behavior.get_FadeTransitions()的方式来实现具体某一个Behavior的访问和修改.var behavior = $find('ctl00_SampleContent_MyAccordion_AccordionExtender');这种写法是不好的,我们在自动测试的页面中发现了更好的写法:var behavior=$find("<%= MyAccordion.ClientID %>_AccordionExtender");
<script language="javascript" type="text/javascript">
  function toggleFade() 
{
       var behavior 
= $find('ctl00_ContentPlaceHolder1_MyAccordion_AccordionExtender');
       
if (behavior) 
            behavior.set_FadeTransitions(
!behavior.get_FadeTransitions());
       }

    }

   function changeAutoSize() 
{
       var behavior 
= $find('ctl00_ContentPlaceHolder1_MyAccordion_AccordionExtender');
       var ctrl 
= $get('autosize'); //这里找的是下拉列表控件,不是Behavior
        if (behavior) {
            var size 
= 'None'// 这里顺便看看怎么使用Select
            switch (ctrl.selectedIndex) {
               
case 0 :
                    behavior.get_element().style.height 
= 'auto';
                    size 
= AjaxControlToolkit.AutoSize.None;
                  
break;

                
case 1 :
                    behavior.get_element().style.height 
= '400px';
                    size 
= AjaxControlToolkit.AutoSize.Fill;
                   
break;
                
case 2 :
                    behavior.get_element().style.height 
= '400px';
                   size 
= AjaxControlToolkit.AutoSize.Limit;
                    
break;
            }

            behavior.set_AutoSize(size);
        }

        
if (document.focus) {
            document.focus();
       }

    }

</script>

<ajaxToolkit:Accordion ID="MyAccordion" runat="server" SelectedIndex="0" HeaderCssClass="accordionHeader"
    ContentCssClass
="accordionContent" FadeTransitions="false" FramesPerSecond="40"
    TransitionDuration
="250" AutoSize="None">
    
<Panes>
        
<ajaxToolkit:AccordionPane ID="AccordionPane1" runat="server">
           
<Header>
                
<a href="" onclick="return false;" class="accordionLink">1. Accordion</a></Header>
            
<Content>
            
</Content>
        
</ajaxToolkit:AccordionPane>
    
</Panes>
</ajaxToolkit:Accordion> 
posted @ 2007-12-18 09:11 Judas 阅读(96) 评论(0) 编辑
程序设计中会经常碰到一种情况,就是事先无法得知用户会需要哪些数据,必须根据用户选择后再从服务器重新提取数据后反馈给用户。比如一简单的情况,用户选择省份以后,我们立即会在市里边将这个省的所有市重新显示出来。这种情况一般需要将整个页面刷新后才可以重新读取,但这样不仅效率不高外,也显得不太优雅。其实用javascript结合微软件的XMLHTTP对象,我们可以不用刷新,“稍稍”的就可以将数据从服务器上读取出来,显得既专业,又高效。
下面我们就以一个验证用户是否被注册的情况来演示这种技术。 
1.首先在服务器上建立一个CheckUser.asp文件,用来检测用户是否存在,根据用户是否存在分别反馈0和1
u_name=Request.QueryString("u_name")
if u_name 存在 then
Response.write "0"
else
Response.write "1"
end if
2.客户端HTML设计:
一、javascript代码
<script language=javascript>
function check_user_exists(form){
u_name=form.u_name.value;
if (u_name==null||u_name==''''){
alert("请您输入用户名");
return false;
}
infoBoard=document.getElementById("checkInfo");
infoBoard.innerText=''查询中...'';
myurl=location.protocol+"//"+location.hostname+"/CheckUser.asp?u_name="+u_name;
retCode=openUrl(myurl);
switch(retCode){
case "-2":
infoBoard.innerHTML=''<font color=red>抱歉</font>,查询失败'';break;
case "1":
infoBoard.innerHTML=''<font color=red>恭喜</font>,''+u_name+''可以使用'';break;
case "0":
infoBoard.innerHTML=''<font color=red>抱歉</font>,用户名''+u_name+''已经被使用'';
}
return;
}
function openurl(/url){
var objxml=new ActiveXObject("Microsoft.XMLHttp")
objxml.open("GET",url,false);
objxml.send();
retInfo=objxml.responseText;
if (objxml.status=="200"){
return retInfo;
}
else{
return "-2";
}
}
</script>
二、HTML表单设计:
<form name=form1 action="XXXX.asp" method="post">
<input type=text name=u_name><span id="checkInfo"></span><input type=button name=checkuser value="检测用户是否存在" onClick="check_user_exists(this.form);">
</form>
经过以上三步,一个不需要页面刷新的数据更新程序就完成了
posted @ 2007-11-04 23:07 Judas 阅读(79) 评论(0) 编辑
sql server2000中使用convert来取得datetime数据类型样式(全)
语句及查询结果:
Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06
Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16
Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06
Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06
Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06
Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06
Select CONVERT(varchar(100), GETDATE(), 7): 05 16, 06
Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46
Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM
Select CONVERT(varchar(100), GETDATE(), 10): 05-16-06
Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16
Select CONVERT(varchar(100), GETDATE(), 12): 060516
Select CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937
Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967
Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47
Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157
Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM
Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16
Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47
Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250
Select CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 101): 05/16/2006
Select CONVERT(varchar(100), GETDATE(), 102): 2006.05.16
Select CONVERT(varchar(100), GETDATE(), 103): 16/05/2006
Select CONVERT(varchar(100), GETDATE(), 104): 16.05.2006
Select CONVERT(varchar(100), GETDATE(), 105): 16-05-2006
Select CONVERT(varchar(100), GETDATE(), 106): 16 05 2006
Select CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006
Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49
Select CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM
Select CONVERT(varchar(100), GETDATE(), 110): 05-16-2006
Select CONVERT(varchar(100), GETDATE(), 111): 2006/05/16
Select CONVERT(varchar(100), GETDATE(), 112): 20060516
Select CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513
Select CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547
Select CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49
Select CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49.700
Select CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:57:49.827
Select CONVERT(varchar(100), GETDATE(), 130): 18 ???? ?????? 1427 10:57:49:907AM
Select CONVERT(varchar(100), GETDATE(), 131): 18/04/1427 10:57:49:920AM

说明:
使用 CONVERT:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

参数
expression

是任何有效的 Microsoft® SQL Server™ 表达式。。

data_type

目标系统所提供的数据类型,包括 bigint 和 sql_variant。不能使用用户定义的数据类型。
length

nchar、nvarchar、char、varchar、binary 或 varbinary 数据类型的可选参数。

style

日期格式样式,借以将 datetime 或 smalldatetime 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型);或者字符串格式样式,借以将 float、real、money 或 smallmoney 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型)。

SQL Server 支持使用科威特算法的阿拉伯样式中的数据格式。

在表中,左侧的两列表示将 datetime 或 smalldatetime 转换为字符数据的 style 值。给 style 值加 100,可获得包括世纪数位的四位年份 (yyyy)。

不带世纪数位 (yy) 带世纪数位 (yyyy)
标准
输入/输出**
- 0 或 100 (*) 默认值 mon dd yyyy hh:miAM(或 PM)
1 101 美国 mm/dd/yyyy
2 102 ANSI yy.mm.dd
3 103 英国/法国 dd/mm/yy
4 104 德国 dd.mm.yy
5 105 意大利 dd-mm-yy
6 106 - dd mon yy
7 107 - mon dd, yy
8 108 - hh:mm:ss
- 9 或 109 (*) 默认值 + 毫秒 mon dd yyyy hh:mi:ss:mmmAM(或 PM)
10 110 美国 mm-dd-yy
11 111 日本 yy/mm/dd
12 112 ISO yymmdd
- 13 或 113 (*) 欧洲默认值 + 毫秒 dd mon yyyy hh:mm:ss:mmm(24h)
14 114 - hh:mi:ss:mmm(24h)
- 20 或 120 (*) ODBC 规范 yyyy-mm-dd hh:mm:ss[.fff]
- 21 或 121 (*) ODBC 规范(带毫秒) yyyy-mm-dd hh:mm:ss[.fff]
- 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss.mmm(不含空格)
- 130* Hijri**** dd mon yyyy hh:mi:ss:mmmAM
- 131* Hijri**** dd/mm/yy hh:mi:ss:mmmAM


* 默认值(style 0 或 100、9 或 109、13 或 113、20 或 120、21 或 121)始终返回世纪数位 (yyyy)。
** 当转换为 datetime时输入;当转换为字符数据时输出。
*** 专门用于 XML。对于从 datetime或 smalldatetime 到 character 数据的转换,输出格式如表中所示。对于从 float、money 或 smallmoney 到 character 数据的转换,输出等同于 style 2。对于从 real 到 character 数据的转换,输出等同于 style 1。
****Hijri 是具有几种变化形式的日历系统,Microsoft® SQL Server™ 2000 使用其中的科威特算法。



重要 默认情况下,SQL Server 根据截止年份 2049 解释两位数字的年份。即,两位数字的年份 49 被解释为 2049,而两位数字的年份 50 被解释为 1950。许多客户端应用程序(例如那些基于 OLE 自动化对象的客户端应用程序)都使用 2030 作为截止年份。SQL Server 提供一个配置选项("两位数字的截止年份"),借以更改 SQL Server 所使用的截止年份并对日期进行一致性处理。然而最安全的办法是指定四位数字年份。


当从 smalldatetime 转换为字符数据时,包含秒或毫秒的样式将在这些位置上显示零。当从 datetime 或 smalldatetime 值进行转换时,可以通过使用适当的 char 或 varchar 数据类型长度来截断不需要的日期部分。
posted @ 2007-11-04 23:04 Judas 阅读(536) 评论(0) 编辑