布局溢出的解决

  要做一个带四个圆角的方形框,很自然地想到先用边框线做好框,然后再放上四个圆角。
  我的做法是头部左右两圆角,中间内容,底部再是两个圆角。至于圆角,我是用背景图片来体现,头部做得很顺利。到了底部,傻眼了,两圆角竟然往两边和下面漂移了。
  相关代码如下:[code]

[/code]
  CSS:[code].cir_top{
height: 13px; background:url(dot_line.gif) right top repeat-x;
}
.cir_top .left {
height: 13px; width:13px; background:#FFFFFF url(cir_top_left3.gif) no-repeat; float:left;
}
.cir_top .right {
height: 13px; width:13px; background:#FFFFFF url(cir_top_right3.gif) no-repeat; float:right;
}
.cir_btm{
height: 15px; background:url(dot_line.gif) 0 11px repeat-x;
}
.cir_btm .left {
height: 13px; width:13px; background:#FFFFFF url(cir_btm_left1.gif) no-repeat; float:left;
}
.cir_btm .right {
height: 13px; width:13px; background:#FFFFFF url(cir_btm_right1.gif) no-repeat; float:right;
}[/code]

  刚开始以为是背景位置不对或者是图片不对,检查了半天,都是好的。于是我给它们加上边框线,发现原来是溢出了。把宽给固定死了,也不行,照样往左飘移。但奇怪的是,我把这个代码整体复制出来,单独做个页面,又是一切正常的。后来,我突发奇想,那我设置下cir_btm的浮动右对齐( float:right;)试试,没想到,好了,这时我又想那我再改成左:float:left;,哈哈,正常了。看来是浮动捣的鬼。至于为什么单独一个页面就行,而放进我这个页面中却会这样(顶部正常,底部不正常),我想可能是与页面中的其它元素的浮动设置有关系。暂时没时间具体研究,如果有高手有独到见解,请指教!

洋葱tor技巧:指定地区IP出口

  在应用洋葱头Tor的过程中,有时会想获取指定区域的IP以满足一些特殊场合的应用。比如有时在某国外网站上申请账号需要该地区的IP都能申请。
  方法很简单:
  一、先打开Tor的网络地图,找到该地区的服务器节点,记下该服务器名称(多找几个以免由于线路问题等连不上)。
  二、从开始菜单的Tor里打开Torrc配置文件,或是直接从Tor控制面版中的 设定→高级→Tor配置文件 中找到配置文档的路径,然后打开此文档。在最后一行加上如下格式:[code]ExitNodes Server1,Server2[/code]
  三、停止Tor,然后重新启动,Tor就会加载新的配置文档。
  打开一个能显示IP及地区的页面,验证一下吧,是不是达到你的目的了?

黑客根据IP就能控制用户电脑 微软破例紧急公布严重漏洞

  Windows操作系统的安全性再次受到严峻挑战!10月24日凌晨,微软紧急发布了一项重要的安全更新(KB958644),涉及Windows2000/XP/Vista等桌面操作系统的绝大多数版本。其危害程度毫不逊于当年波及80%以上Windows用户的“冲击波”病毒。

  微软公告称,黑客可以利用该漏洞向网络中的电脑发出远程的特制RPC请求,无需身份验证便可在电脑中任意执行远程代码。这就是说,即便你的电脑设置了管理员密码,也只能任由黑客摆布。

  截至目前,网上已出现了利用该漏洞的蠕虫病毒(Win32/MS08067.gen!A)。这一漏洞的危害极为严重,黑客仅根据IP地址便可随意发起攻击,简直是“指哪打哪”,而且感染性非常强,只要远程执行一段下载恶意程序的代码,不但能随意弹出广告、盗取用户账号,还可以控制本机进而攻击其他用户,使破坏力持续放大,局域网的用户一旦有一个中招病毒就会迅速扩散。

  据悉,这是微软近一年半以来首次打破每月定期安全公告的惯例而发布更新。目前唯一的解决方案便是为系统打好KB958644补丁,以免受到病毒感染。

  点击下面链接,详细了解该漏洞的技术内幕。

  http://www.microsoft.com/china/technet/security/bulletin/MS08-067.mspx

SqlServer存储过程及ASP中存储过程的调用

[color=Blue]存储过程的建立[/color]

  这里只简单介绍如何在Sql Server的企业管理器中如何建立存储过程:

(1)打开企业管理器Enterprise manager
(2)找到相应的服务器,展开要建立存储过程的数据库(Database),鼠标右击此数据库下的存储过程(Stored Procdures)项,在弹出的菜单中选择新建存储过程(New Stored Procedure),在弹出的存储过程属性(Stored Procedures Properties)选项框中输入建立存储过程的语句。下面是一个例子:
Create PROCEDURE procedureName
@mycola Char(10),@mycolb Char(10),@mycolc text
AS
  Insert into chatdata (mycola,mycolb,mycolc) values(@mycola,@mycolb,@mycolc)

  如果你对Sql语法不熟悉,可以使用Check Syntax来检查语法。在上例中,表示建立存储过程名为mycola,带3个参数的存储过过程,其中第一个参数mycola数据类型为char,宽度10;第2个参数数据类型为char,宽度为10,第3个参数数据类型为text,在这里使用的是Sql Server的数据类型。

Sql Server的文档中关于存储过程的语法
Create PROC [ EDURE ] procedure_name [ ; number ]
[ { @parameter data_type }
[ VARYING ] [ = default ] [ OUTPUT ]
] [ ,…n ]

[ WITH
{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]

[ FOR REPLICATION ]

AS sql_statement [ …n ]

参数
procedure_name
新存储过程的名称。过程名必须符合标识符规则,且对于数据库及其所有者必须唯一。有关更多信息,请参见使用标识符。
要创建局部临时过程,可以在 procedure_name 前面加一个编号符 (#procedure_name),要创建全局临时过程,可以在 procedure_name 前面加两个编号符 (##procedure_name)。完整的名称(包括 # 或 ##)不能超过 128 个字符。指定过程所有者的名称是可选的。

;number
是可选的整数,用来对同名的过程分组,以便用一条 Drop PROCEDURE 语句即可将同组的过程一起除去。例如,名为 orders 的应用程序使用的过程可以命名为 orderproc;1、orderproc;2 等。Drop PROCEDURE orderproc 语句将除去整个组。如果名称中包含定界标识符,则数字不应包含在标识符中,只应在 procedure_name 前后使用适当的定界符。

@parameter
过程中的参数。在 Create PROCEDURE 语句中可以声明一个或多个参数。用户必须在执行过程时提供每个所声明参数的值(除非定义了该参数的默认值)。存储过程最多可以有 2.100 个参数。

使用 @ 符号作为第一个字符来指定参数名称。参数名称必须符合标识符的规则。每个过程的参数仅用于该过程本身;相同的参数名称可以用在其它过程中。默认情况下,参数只能代替常量,而不能用于代替表名、列名或其它数据库对象的名称。有关更多信息,请参见 EXECUTE。

data_type
参数的数据类型。所有数据类型(包括 text、ntext 和 image)均可以用作存储过程的参数。不过,cursor 数据类型只能用于 OUTPUT 参数。如果指定的数据类型为 cursor,也必须同时指定 VARYING 和 OUTPUT 关键字。有关 SQL Server 提供的数据类型及其语法的更多信息,请参见数据类型。

说明 对于可以是 cursor 数据类型的输出参数,没有最大数目的限制。

VARYING
指定作为输出参数支持的结果集(由存储过程动态构造,内容可以变化)。仅适用于游标参数。

default
参数的默认值。如果定义了默认值,不必指定该参数的值即可执行过程。默认值必须是常量或 NULL。如果过程将对该参数使用 LIKE 关键字,那么默认值中可以包含通配符(%、_、[] 和 [^])。

OUTPUT
表明参数是返回参数。该选项的值可以返回给 EXEC[UTE]。使用 OUTPUT 参数可将信息返回给调用过程。Text、ntext 和 image 参数可用作 OUTPUT 参数。使用 OUTPUT 关键字的输出参数可以是游标占位符。

n
表示最多可以指定 2.100 个参数的占位符。

{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}
RECOMPILE 表明 SQL Server 不会缓存该过程的计划,该过程将在运行时重新编译。在使用非典型值或临时值而不希望覆盖缓存在内存中的执行计划时,请使用 RECOMPILE 选项。
ENCRYPTION 表示 SQL Server 加密 syscomments 表中包含 Create PROCEDURE 语句文本的条目。使用 ENCRYPTION 可防止将过程作为 SQL Server 复制的一部分发布。

说明 在升级过程中,SQL Server 利用存储在 syscomments 中的加密注释来重新创建加密过程。

FOR REPLICATION
指定不能在订阅服务器上执行为复制创建的存储过程。.使用 FOR REPLICATION 选项创建的存储过程可用作存储过程筛选,且只能在复制过程中执行。本选项不能和 WITH RECOMPILE 选项一起使用。

AS
指定过程要执行的操作。

sql_statement
过程中要包含的任意数目和类型的 Transact-SQL 语句。但有一些限制。

n
是表示此过程可以包含多条 Transact-SQL 语句的占位符。

[color=Blue]ASP中存储过程的调用方式集锦[/color]

[color=Red]以下说明都是在已经打开数据库连接conn的前提下[/color]

1,调用没有参数的存储过程
set cmd=server.CreateObject(“adodb.command”)
set cmd.ActiveConnection=conn
cmd.CommandText=”{call nono}”
'set rs=cmc.exe 或者cmd.execute
set rs=cmd.Execute()

2,带输入的参数的存储过程
set cmd=server.CreateObject(“adodb.command”)
set cmd.ActiveConnection=conn
cmd.CommandText=”{call oneinput(?)}”
cmd.Parameters.Append cmd.CreateParameter(“@aaa”,adInteger ,adParamInput )
cmd(“@aaa”)=100
cmd.Execute()

简单方法:
Conn.Execute “exec sp_AddHit 'http://www.aspalliance.com', 1”
请注意分割参数,该方法也不返回记录
有返回记录集:
rs.Open “Exec procname varValue1, varValue2”,conn

另一种返回记录集的方法:
set Cmd=Server.CreateObject(“ADODB.command”)
set Cmd.activeconnection=conn
Cmd.commandtype=4
Cmd.commandtext=”sp_1″ 'SP 名
Cmd.parameters(1)=… '参数值
Cmd.parameters(2)=…
set recordset1=Cmd.execute()

3,带输入参数和输出参数

要得到返回值,需要用Command的方法。
返回值有两种。一种是在存储过程中直接return一个值,就象C和VB的函数返回值那样;另一种是可以返回多个值,存储这些值的变量名称需要在调用参数中先行指定。

这个例子要处理多种参数,输入参数,输出参数,返回记录集以及一个直接返回值(够全了吧?)
存储过程如下:

create procedure sp_PubsTest
— 定义三个参数变量,注意第三个,特别标记是用于输出
@au_lname varchar (20),
@intID int,
@intIDOut int OUTPUT

AS

Select @intIDOut = @intID + 1
Select * FROM authors Where au_lname LIKE @au_lname + ''%''

–直接返回一个值
RETURN @intID + 2

调用方法:
'定义一些参数
iVal = 5
oVal = 3
set Cmd = Server.CreateObject(“ADODB.Command”)
set cmd.ActiveConnection=conn

'定义command 对象调用名称
Cmd.CommandText = “sp_PubsTest”

'设置command调用类型是存储过程 (adCmdSPStoredProc = 4)
Cmd.CommandType = adCmdSPStoredProc

'往command 对象中加参数
'定义存储过程有直接返回值,并且是个整数,省缺值是4
Cmd.Parameters.Append Cmd.CreateParameter(“RETURN_VALUE”, adInteger, adParamReturnValue, 4)
'定义一个字符型输入参数
Cmd.Parameters.Append Cmd.CreateParameter(“@au_lname”, adVarChar, adParaminput, 20, “M”)
'定义一个整型输入参数
Cmd.Parameters.Append Cmd.CreateParameter(“@intID”, adInteger, adParamInput, iVal)
'定义一个整型输出参数
Cmd.Parameters.Append Cmd.CreateParameter(“@intIDOut”, adInteger, adParamOutput, oVal)

'运行存储过程,并得到返回记录集
Set adoRS = Cmd.Execute

'两个输出值
Response.Write “

@intIDOut = ” & Cmd.Parameters(“@intIDOut”).Value & “


Response.Write “

Return value = ” & Cmd.Parameters(“RETURN_VALUE”).Value & “

set cmd.ActiveConnection=conn
cmd.CommandText = “{call oneinout(?,?)}”
cmd.Parameters.Append cmd.CreateParameter(“@aaa”,adInteger,adParamInput)
cmd(“@aaa”)=10
cmd.Parameters.Append cmd.CreateParameter(“@bbb”,adInteger,adParamOutput)
cmd.Execute()
bbb=cmd(“@bbb”)

增加参数的语句格式为:

p.Append cm.CreateParameter(“参数名称”,类型,方向,大小)

参许参数值的类型的意义如下:

名称值 整数值 功能

adDBTimeStamp 135 日期时间数据类型
adDecimal 14 十进制整数值
adDouble 5 双精度小数值
adError 10 系统错误信息
AdGUID 72 全域性唯一识别字(Globally unique identifier)
adDispath 9 COM/OLE自动对象(Automation Object)
adInteger 3 4字节有符号整数
adIUnknown 13 COM/OLE对象
adLongVarBinary 205 大型2字节值
adLongVarChar 201 大型字符串值
adLongVarWChar 203 大型未编码字符串
adNumeric 131 十进制整数值
adSingle 4 单精度浮点小数
adSmallInt 2 2字节有符号整数
adTinyInt 16 1字节有符号整数
adUnsignedBigInt 21 8字节无符号整数
adUnsignedInt 19 4字节无符号整数
adUnsignedSmallInt 18 2字节无符号整数
adUnsignedTinyInt 17 1字节无符号整数
adUserDefined 132 用户自定义数据类型
adVariant 12 OLE对象
adVarBinary 204 双字节字符变量值
adVarChar 200 字符变量值
advarchar 202 未编码字符串变量值
adWchar 130 未编码字符串

方向值的意义如下:

名称值 整数值 功能

adParamInput 1 允许数据输入至该参数当中
adParamOutput 2 允许数据输出至该参数当中
adParamInputOutput 3 允许数据输入、输出至该参数当中
adparamReturnValue 4 允许从一子程序中返回数据至该参数当中

此调用方法可以直接写整数值,也可以包含adovbs.inc(此文件中已经定义好相应常数)然后写名称

4,一个输入参数,一个输出参数,和一个返回值
set cmd.ActiveConnection=conn
cmd.CommandText=”{?=call onereturn(?,?)}”
cmd.Parameters.Append cmd.CreateParameter(“@return_value”,adInteger,adParamReturnValue )
cmd.Parameters.Append cmd.CreateParameter(“@aaa”,adInteger,adParamInput )
cmd(“@aaa”)=10
cmd.Parameters.Append cmd.CreateParameter(“@bbb”,adInteger,adParamOutput)
cmd.Execute()

bbb=cmd(“@bbb”)
rrr=cmd(“@return_value”)

SqlServer中用SQL语句附加数据库及修改数据库逻辑文件名

–附加数据库
sp_attach_db '数据库名','数据库全路径','数据库日志全路径'
GO
USE 数据库名

–添加一个登录前指定默认数据库
EXEC sp_addlogin '登录名','密码','数据库名'
GO

–处理空登录名(使登录用户和数据库的孤立用户对应起来,在这个用户有对象时用)
sp_change_users_login 'update_one','登录名','登录名'
GO

–修改数据库的逻辑文件名(数据)
Alter DATABASE 数据库名
MODIFY FILE(NAME='老数据库逻辑文件名',NEWNAME='新数据库逻辑文件名')
GO

–修改数据库的逻辑文件名(日志)
Alter DATABASE 数据库名
MODIFY FILE(NAME='老日志逻辑文件名',NEWNAME='新日志逻辑文件名')
GO

可能会用到的操作:
–更改当前数据库名称为dbo的登录名为abc
EXEC sp_changedbowner 'abc'

–删除一个登录
EXEC sp_droplogin '登录名'

–赋予这个登录访问数据库的权限
EXEC sp_adduser '登录名','用户名','db_owner'

[VBS]不同编码下的Asc值

  这几天在帮朋友做一个站,在处理字符串截取时,为了整齐,要判断汉字与英文,因为他们占用的宽度不一样。
  为了省事,直接用了以前积累的一个小函数来处理,结果,不起作用,后来测试了一下,才发现,原来是因为编码的原因,UTF-8下和GB2312下,Asc的值不一样,前者汉字好像都是0,后者则是大于255。
新代码如下:[code]function GetLeft(str,strlen)
Dim l,t,c,i
l=len(str)
t=0
For i=1 To l
c=Abs(Asc(Mid(str,i,1)))': Response.write c&”,”这个是我用来判断取到的值,才发现问题
If c=0 Then'汉字GB2312下是>255,UTF8下是0
t=t+2
Else
t=t+1
End If
If t>=strlen Then
GetLeft=left(str,i)&”…”
Exit for
Else
GetLeft=str
End If
Next
end function
[/code]
  奇怪的是,今天换了个服务器空间后,汉字取得的ASC值都是1了。又要改代码了。

NBC版奥运开幕式片尾曲:Time of my life

  2008年8月8日。中国人民终于迎来了盼望了百年的奥运。当天晚上,我守在电脑前面,看了央视的开幕式的直播,开幕式非常精彩。
  前两天听别人说,其实开幕式比央视呈现的更令人震撼。美国NBC台的开幕式效果就非常地棒。于是,我上网到处寻找下载。终于于今天早上下载完成。下载过来后,还没有时间从来到尾地仔细观看。跳跃式地看了下,到结尾时,那首歌吸引了我。由于本人英文不大好(已经好几年没有温习了),听不大明白其中的歌词,也不知道是什么歌,上网搜索,也有有人在寻问这歌的名字,但无结果。没办法,还是自己动手,认真反复听了几遍,听出了些歌词,然后以此为线索,终于让我找到了。原来这首歌就是David Cook的《Time of my life》。这是首很励志的歌,当年David Cook好像是凭此歌获得美国偶像(The 'American I do I' )的总冠军。
  废话不多说,献上此歌及歌词:[wmv]http://www.ehlel.com/bsong/billboard/David_Cook_-_The_Time_Of_My_Life.mp3[/wmv]

Time of my life

I've been waiting for my dreams
To turn into something
I could believe in
And looking for that
Magic rainbow
On the horizon
I couldn't see it
Until I let go
Gave into love and watched all the bitterness burn
Now I'm coming alive
Body and soul
And feelin' my world start to turn

And I'll taste every moment
And live it out loud
I know this is the time,
This is the time
To be more than a name
or a face in the crowd
I know this is the time
This is the time of my life
Time of my life

Holding onto things that vanished
Into the air
Left me in pieces
But now I'm rising from the ashes
Finding my wings
And all that I needed
Was there all along
Within my reach
As close as the beat of my heart

.
So I'll taste every moment
And live it out loud
I know this is the time,
This is the time to be
More than a name
or a face in the crowd
I know this is the time
This is the time of my life
Time of my life

And I'm out on the edge of forever
Ready to run
I'm keeping my feet on the ground
My arms open wide
My face to the sun

I'll taste every moment
And live it out loud
I know this is the time,
This is the time to be
More than a name
or a face in the crowd
I know this is the time
This is the time of my life

Time of my life
More than a name
or a face in the crowd
I know
This is the time
This is the time of my life.
This is the time of my life.

免费网站空间,全面支持asp、asp.net、php等

  前两天,有朋友问我哪有免费网站空间。于是,我上网搜罗了一下。好不容易找到了一个能用的。
  详情如下:

全面支持asp、asp.net、php、CGI和Jsp。
主机空间:1000M
有控制面板,可自主绑定域名。支持子目录域名绑定,支持自定义404页面,支持在线压缩与解压缩,支持IP访问限制设定。功能非常地强大。有兴趣的,自己去试试。
不过,[color=Red]每个月要登录一次控制面板来延长有效期。[/color]
网址:http://www.5944.net/

控制面板截图,点击看大图:
[img]attachments/month_0808/k2008814164513.jpg[/img]