☆☆☆与大家交流的平台----教育技术学☆☆☆ 
  • javascript随笔 - [JavaSript]

    2008-03-20

    style="height:expression(body.clientHeight-138);“
  • 第十二届全国青少年信息学奥林匹克联赛初赛试题
    ( 普及组 Pascal 语言 二小时完成 )
    ● ● 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效 ●●

    一、 单项选择题 (共20题,每题1.5分,共计30分。每题有且仅有一个正确答案.)。
    1. 在下面各世界顶级的奖项中,为计算机科学与技术领域做出杰出贡献的科学家设立的奖项是( )。
    A. 沃尔夫奖 B. 诺贝尔奖 C. 菲尔兹奖 D. 图灵奖
    2. 在下列各软件中,不属于NOIP竞赛(复赛)推荐使用的语言环境有( )。
    A. gcc/g++ B. Turbo Pascal
    C. RHIDE D. free pascal
    3. 以下断电之后仍能保存数据的有( )。
    A. 寄存器 B. ROM C. RAM D. 高速缓存
    4.Linux是一种( )。
    A. 绘图软件 B. 程序设计语言 C. 操作系统 D. 网络浏览器
    5. CPU是( )的简称。
    A. 硬盘 B. 中央处理器 C. 高级程序语言 D. 核心寄存器

    6. 在计算机中,防火墙的作用是( )。
    A. 防止火灾蔓延 B.防止网络攻击
    C. 防止计算机死机 D. 防止使用者误删除数据
    7. 在下列关于计算机语言的说法中,不正确的是( )。
    A. Pascal和C都是编译执行的高级语言
    B. 高级语言程序比汇编语言程序更容易从一种计算机移植到另一种计算机上
    C. C++是历史上的第一个支持面向对象的计算机语言
    D. 与汇编语言相比,高级语言程序更容易阅读
    8. 在下列关于计算机算法的说法中,不正确的是( )。
    A. 一个正确的算法至少要有一个输入
    B. 算法的改进,在很大程度上推动了计算机科学与技术的进步
    C. 判断一个算法的好坏的主要标准是算法的时间复杂性与空间复杂性
    D. 目前仍然存在许多涉及到国计民生的重大课题,还没有找到能够在计算机上实施的有效算法
    9. 在下列各种排序算法中,不是以"比较"作为主要操作的算法是( )。
    A. 选择排序 B. 冒泡排序 C. 插入排序 D. 基数排序
    10.在编程时(使用任一种高级语言,不一定是Pascal),如果需要从磁盘文件中输入一个很大的二维数组(例如1000*1000的double型数组),按行读(即外层循环是关于行的)与按列读(即外层循环是关于列的)相比,在输入效率上( )。
    A. 没有区别 B. 按行读的方式要高一些
    C. 按列读的方式要高一些 D. 取决于数组的存储方式。
    11.在Pascal语言中,表达式 (21 xor 2)的值是( )
    A. 441 B. 42 C.23 D.24
    12.在Pascal语言中,判断a不等于0且b不等于0的正确的条件表达式是( )
    A. not a=0 or not b=0 B. not((a=0)and(b=0))
    C. not(a=0 and b=0) D. (a<>0)and (b<>0)
    13.某个车站呈狭长形,宽度只能容下一台车,并且只有一个出入口。已知某时刻该车站状态为空,从这一时刻开始的出入记录为:"进,出,进,进,进,出,出,进,进,进,出,出"。假设车辆入站的顺序为1,2,3,……,则车辆出站的顺序为( )。
    A. 1, 2, 3, 4, 5 B. 1, 2, 4, 5, 7
    C. 1, 4, 3, 7, 6 D. 1, 4, 3, 7, 2
    14.高度为n的均衡的二叉树是指:如果去掉叶结点及相应的树枝,它应该是高度为n-1的满二叉树。在这里,树高等于叶结点的最大深度,根结点的深度为0,如果某个均衡的二叉树共有2381个结点,则该树的树高为( )。
    A. 10 B. 11 C. 12 D. 13
    15. 与十进制数1770 对应的八进制数是( )。
    A. 3350 B. 3351 C. 3352 D. 3540
    16.将5个数的序列排序,不论原先的顺序如何,最少都可以通过( )次比较,完成从小到大的排序。
    A. 6 B. 7 C. 8 D. 9
    17. 设A=B=D=true,C=false,以下逻辑运算表达式值为真的有( )。
    A. (A∧B)∨(C∧D) B. ((A∨B∨D)∧C)
    C. A∧(B∨C∨D) D. (A∧B∧C)∨ D
    18. (2010)16 + (32)8的结果是( )。
    A. (8234)10 B. (202B)16
    C. (20056)8 D. (100000000110)2
    19. 设栈S的初始状态为空,元素a, b, c, d, e 依次入栈,以下出栈序列不可能出现的有( )。
    A. a, b, c, e, d B. b, c, a, e, d
    C. a, e, c, b, d D. d, c, e, b, a
    20. 已知6个结点的二叉树的先根遍历是1 2 3 4 5 6(数字为结点的编号,以下同),后根遍历是3 2 5 6 4 1,则该二叉树的可能的中根遍历是( )
    A. 3 2 1 4 6 5 B. 3 2 1 5 4 6
    C. 2 1 3 5 4 6 D. 2 3 1 4 6 5
    二.问题求解(共2题,每题5分,共计10分)
    1.(寻找假币) 现有80枚硬币,其中有一枚是假币,其重量稍轻,所有真币的重量都相同,如果使用不带砝码的天平称重,最少需要称几次,就可以找出假币?你还要指出第1次的称重方法。请写出你的结果:_________________________________________________。
    2.(取石子游戏) 现有5堆石子,石子数依次为3,5,7,19,50,甲乙两人轮流从任一堆中任取(每次只能取自一堆,不能不取), 取最后一颗石子的一方获胜。甲先取,问甲有没有获胜策略(即无论乙怎样取,甲只要不失误,都能获胜)?如果有,甲第一步应该在哪一堆里取多少?请写出你的结果:
    _________________________________________________。
    三.阅读程序写结果(共4题,每题8分,共计32分)
    1. Program ex301;
    var
    u:array[0..3] of integer;
    i,a,b,x,y:integer;
    begin
    y:=10;
    for i:=0 to 3 do
    read(u[i]);
    a:=(u[0]+u[1]+u[2]+u[3]) div 7;
    b:=u[0] div ((u[1]-u[2]) div u[3]);
    x:=(u[0]+a+2)-u[(u[3]+3) mod 4];
    if (x>10) then
    y:=y+(b*100-u[3]) div (u[u[0] mod 3]*5)
    else
    y:=y+20+(b*100-u[3]) div (u[u[0] mod 3]*5);
    writeln (x,',',y);
    end. {*注:本例中,给定的输入数据可以避免分母为0或下标越界。 }
    输入:9 3 9 4
    输出:_______________
    2.Program ex302;
    const
    m:array[0..4] of integer=(2,3,5,7,13);
    var
    i,j:integer;
    t: longint;
    begin
    for i:=0 to 4 do
    begin
    t:=1;
    for j:=1 to m[i]-1 do
    t:=t*2;
    t:=(t*2-1)*t;
    write (t,' ');
    end;
    writeln;
    end.
    输出:____________________
    3.Program ex303;
    Const
    NN=7;
    Type
    Arr1=array[0..30] of char;
    var
    s:arr1;
    k,p:integer;
    fun(s:arr1; a:char;n:integer):integer;
    var
    j:integer;
    begin
    j:=n;
    while (a<s[j])and(j>0) do dec(j);
    fun:=j;
    end;
    begin
    for k:=1 to NN do
    s[k]:=chr(ord('A')+2*k+1);
    k:=fun(s,'M',NN);
    writeln(k);
    end.
    输出:_____________
    4.program ex304;
    var
    x,x2:longint;
    procedure digit(n,m:longint);
    var n2:integer;
    begin
    if(m>0) then
    begin
    n2:=n mod 10;
    write(n2:2);
    if(m>1) then digit(n div 10,m div 10);
    n2:=n mod 10;
    write(n2:2);
    end;
    end;
    begin
    writeln('Input a number:');
    readln(x);
    x2:=1;
    while(x2<x) do x2:=x2*10;
    x2:=x2 div 10;
    digit(x,x2);
    writeln; 5
    end.
    输入:9734526
    输出:______________________________
    四.完善程序 (前4空,每空2.5分,后6空,每空3分,共28分)
    1.(全排列)下面程序的功能是利用递归方法生成从1到n(n<10)的n个数的全部可能的排列(不一定按升序输出)。例如,输入3,则应该输出(每行输出5个排列):
    123 132 213 231 321
    312
    程序:
    Program ex401;
    Var
    i,n,k:integer;
    a:array[1..10] of integer;
    count:longint; {变量count记录不同排列的个数,这里用于控制换行}
    Procedure perm(k:integer);
    var j,p,t:integer;
    begin
    if ① then
    begin
    inc(count);
    for p:=1 to k do
    write(a[p]:1);
    write(' ');
    if ( ② ) then writeln;
    exit;
    end;
    for j:=k to n do
    begin
    t:=a[k]; a[k]:=a[j]; a[j]:=t;
    ③ ;
    t:=a[k]; ④ ;
    end
    end;
    begin
    writeln('Entry n:');
    read(n);
    count:=0;
    for i:=1 to n do a[i]:=i;
    ⑤ ;
    end.
    2. 由键盘输入一个奇数 P (P<100,000,000),其个位数字不是5,求一个整数 S,使 P×S = 1111...1 ( 在给定的条件下,解 S 必存在)。要求在屏幕上依次输出以下结果:
    (1)S 的全部数字。除最后一行外,每行输出 50 位数字。 (2) 乘积的数字位数。
    例1:输入p=13,由于13*8547=111111,则应输出(1)8547,(2)6
    例2:输入p=147,则输出结果应为(1)755857898715041572184429327286470143613
    (2)42,即等式的右端有42个1。
    程序:
    program ex402;
    var
    p,a,b,c,t,n:longint;
    begin
    while (true) do
    begin
    writeln ('Input p, the last digit is 1 or 3 or 7 or 9:');
    readln(p);
    if (p mod 2<>0)and(p mod 5<>0) then
    ⑥ ; {如果输入的数符合要求,结束循环 }
    end;
    a:=0; n:=0;
    while (a<p) do
    begin
    a:=a*10+1; inc(n);
    end;
    t:=0;
    repeat
    b:=a div p;
    write(b:1);
    inc(t);
    if ( ⑦ ) then writeln;
    c:= ⑧ ; a:= ⑨ inc(n);
    until c<=0;
    dec(n);
    writeln; writeln('n=', ⑩ );
    end.


    第十二届全国青少年信息学联赛(普及组)答案http://www.noi.cn/noi/showNews.jsp?newsId=200190000064

    普及组(Pascal语言)参考答案与评分标准
    一、单项选择题:(每题1.5分)
    1. D 2. B 3. B 4. C 5. B 6.B 7. C 8. A 9. D 10. D
    11. C 12. D 13. C 14. B 15. C 16. B 17. B 18. A 19. C 20. B
    二、问题求解:(每题 5分)
    1. 4次 (1分),
    第一步:分成3组:27,27,26,将前2组放到天平上(4分)。
    2.有获胜策略(1分),,第1次在第5堆中取32颗石子(4分),。
    三、阅读程序写结果
    1. 10,10 (对1个数给4分,无逗号扣1分)
    2. 6 28 496 8128 33550336
    (前2个对1个数给1分,后3个对1个数给2分)
    3. 5
    4. 6 2 5 4 3 7 9 9 7 3 4 5 2 6(数字之间无空格扣2分)
    四、完善程序(前4空(①--④),每空2.5分,后6空(⑤--⑩),每空3分)
    1.① k=n (或n=k)
    ② count mod 5=0
    ③ perm(k+1)
    ④ a[k]:=a[j];a[j]:=t
    ⑤ perm(1)
    2.⑥ break
    ⑦ t mod 50=0
    ⑧ a-p*b(或a-b*p)
    ⑨ c*10+1 (或10*c+1)
    ⑩ n
  • asp实现在线人数 - [ASP]

    2007-12-27

    从逻辑上说,这个问题很简单。那就是来一个用户,在线人数加一,离开一个用户,在线人数减一。
    现在首先需要解决的问题是如何知道用户的进入和增加。

    在asp中,用户进入访问页面的时候,会触发一个事情,事件名称是session_onstart,在离开的时候(准确地说,是在一定的时间内没有访问页面数据,缺省的时间是20分钟),也会触发一个事件,事件的名称是session_onend。我们可以在global.asa文件中定义这两个事件所执行的操作。

    接下来我们需要考虑的问题是,如何让这个变量对于所有的人都是一样的(废话,不一样那一定不准确)。因此,我们首先想到的就是把在线人数放在一个application变量里。
    一、利用Session和Application对象的OnStart、OnEnd事件

    到这里,我们需要解决的问题都已经解决了,下面来看看代码:
    sub session_onstart
    application.lock
    application("onlineusers")=application("onlineusers")+1
    application.unlock
    end sub

    sub session_onend
    application.lock
    application("onlineusers")=application("onlineusers")-1
    application.unlock
    end sub
    在这里有一个小小的问题,那就是,如果用户是第一个访问者,由于在线人数变量没有初始化,所以会出现错误的提示。要想解决这个问题,我们需要加上初始化该变量的代码:
    if isempty(application("onlineusers")) then
    application("onlineusers")=1
    end if
    修改后的代码如下:
    sub session_onstart
    application.lock
    if isempty(application("onlineusers")) then
    application("onlineusers")=1
    else
    application("onlineusers")=application("onlineusers")+1
    end if
    application.unlock
    end sub

    sub session_onend
    application.lock
    application("onlineusers")=application("onlineusers")-1
    application.unlock
    end sub
    把上面的代码保存为global.asa,保存在web应用程序根目录下(必须在根目录下),然后在页面的合适位置中使用<%=application("onlineusers")%>就可以了。
     
    弊端:用户不是正常退出登录(调用Session.Abandon方法退出登录),如直接关闭浏览器、地址栏输入网址直接转到其他网站时Session的OnEnd事件不会马上被触发,需等Session存活时间到才会触发OnEnd事件。
     
     
    二、Session+数据库
    <%
    conn.execute("delete from online where datediff('s',datetime,now())>60")
    '删除60秒没有活动的访客,时间可以自己调整
    Set rs=Server.CreateObject("ADODB.Recordset")
    If session("username")="" then 判断用户未登录
    sql="select * from online where id='"&session.sessionid&"'"
    '判断这个sessionid是否存在于数据库表中
    rs.Open sql,Conn,1,3
    If rs.eof then '访客第一次浏览
    rs.addnew
    rs("id")=session.sessionID
    rs("name")="游客"
    rs("online")=0 '0表示用户未登陆,是游客身份
    rs("datetime")=now()
    userip = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
    If userip = "" Then
    userip= Request.ServerVariables("REMOTE_ADDR")
    End if
    rs("ip")=userip
    Else '访客非第一次浏览
    rs("datetime")=now() '更新活动时间
    rs.update
    rs.close
    End if
    Else
    sql="select * from online where id='" & session.sessionID & "' or admin='"&session("username")&"'"
    '判断sessionid 或者 用户名记录已存在数据表中
    rs.Open sql,Conn,1,3
    If rs.eof then
    rs.addnew '会员第一次进入网站(可能从网站首页直接登录进入论坛)
    rs("id")=session.sessionID
    rs("name")=session("show") '写入用户昵称
    rs("username")=session("username") '写入登录用户名
    rs("online")=1 '表示用户已经登陆,是会员身份
    rs("datetime")=now() '将当前系统时间设置为用户的登陆时间
    userip = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
    If userip = "" Then
    userip= Request.ServerVariables("REMOTE_ADDR")
    End if
    rs("ip")=userip
    Else '会员非第一次浏览网站,访客登录网站
    rs("name")=session("show") 更新用户昵称
    rs("username")=session("username")
    rs("online")=1 '表示用户已经登陆,是会员身份
    rs("datetime")=now()
    End if
    rs.update
    rs.close
    End if
    Set rs=nothing
    %>
    弊端:在线人数多时对数据库访问过于频繁,占用服务器资源;每个页面中都需调用,使用没有第一种方法方便;从某种意义上说,这种方法应称为统计活动用户更为合适,因为用户在设定的时间内如果没有任何操作将被视为不在线。
     
    摘自:http://www.sosuo8.com/article/show.asp?id=119
     
     

     
  • <%
    Dim FS_NoSqlHack_AllStr,FS_NoSqlHack_Str,FS_NoSqlHack_ComeUrlGet,FS_NoSqlHack_ComeUrlPost,FS_NoSqlHack_Get,FS_NoSqlHack_Post,FS_NoSqlHack_i
    'On Error Resume Next
    FS_NoSqlHack_AllStr="'|;| and |chr(|exec |insert |select |delete from|update |mid(|master."
    FS_NoSqlHack_ComeUrlGet   = Request.QueryString
    FS_NoSqlHack_ComeUrlPost  = Request.Form
    FS_NoSqlHack_Str = Split(FS_NoSqlHack_AllStr,"|")
    'Post
    If FS_NoSqlHack_ComeUrlPost<>"" then
     For Each FS_NoSqlHack_Post In Request.Form
      For FS_NoSqlHack_i = 0 To Ubound(FS_NoSqlHack_Str)
       If Instr(LCase(Request.Form(FS_NoSqlHack_Post)),FS_NoSqlHack_Str(FS_NoSqlHack_i))<>0 Then
        Response.Write("Error!!")
        Response.End
       End if
      Next
     Next
    End if
    'Get
    If FS_NoSqlHack_ComeUrlGet<>"" then
     For Each FS_NoSqlHack_Get In Request.QueryString
      For FS_NoSqlHack_i = 0 To Ubound(FS_NoSqlHack_Str)
       If Instr(LCase(Request.QueryString(FS_NoSqlHack_Get)),FS_NoSqlHack_Str(FS_NoSqlHack_i))<>0 Then
        Response.Write("Error!!")
        Response.End
       End if
      Next
     Next
    End if
    %>
     
    摘自:  http://www.sosuo8.com/article/show.asp?id=1877
  • '==========================
    '过滤提交表单中的SQL
    '==========================
    ForSqlForm()
    dim fqys,errc,i,items
    dim nothis(18)
    nothis(0)="net user"
    nothis(1)="xp_cmdshell"
    nothis(2)="/add"
    nothis(3)="exec%20master.dbo.xp_cmdshell"
    nothis(4)="net localgroup administrators"
    nothis(5)="select"
    nothis(6)="count"
    nothis(7)="asc"
    nothis(8)="char"
    nothis(9)="mid"
    nothis(10)="'"
    nothis(11)=":"
    nothis(12)=""""
    nothis(13)="insert"
    nothis(14)="delete"
    nothis(15)="drop"
    nothis(16)="truncate"
    nothis(17)="from"
    nothis(18)="%"
    'nothis(19)="@"
    errc=false
    for i= 0 to ubound(nothis)
      for each items in request.Form
      if instr(request.Form(items),nothis(i))<>0 then
       response.write("<div>")
       response.write("你所填写的信息:" & server.HTMLEncode(request.Form(items)) & "<br>含非法字符:" & nothis(i))
       response.write("</div>")
       response.write("对不起,你所填写的信息含非法字符!<a href=""#"" =""history.back()"">返回</a>")
       response.End()
      end if
      next
    next
    end
    '==========================
    '过滤查询中的SQL
    '==========================
    ForSqlInjection()
    dim fqys,errc,i
    dim nothis(19)
    fqys = request.ServerVariables("QUERY_STRING")
    nothis(0)="net user"
    nothis(1)="xp_cmdshell"
    nothis(2)="/add"
    nothis(3)="exec%20master.dbo.xp_cmdshell"
    nothis(4)="net localgroup administrators"
    nothis(5)="select"
    nothis(6)="count"
    nothis(7)="asc"
    nothis(8)="char"
    nothis(9)="mid"
    nothis(10)="'"
    nothis(11)=":"
    nothis(12)=""""
    nothis(13)="insert"
    nothis(14)="delete"
    nothis(15)="drop"
    nothis(16)="truncate"
    nothis(17)="from"
    nothis(18)="%"
    nothis(19)="@"
    errc=false
    for i= 0 to ubound(nothis)
    if instr(FQYs,nothis(i))<>0 then
    errc=true
    end if
    next
    if errc then
    response.write "查询信息含非法字符!<a href=""#"" =""history.back()"">返回</a>"
    response.end
    end if
    end
  • 在sql server中经常有这样的问题:
           一个表采用了自动编号的列之后,由于测试了好多数据,自动编号已累计了上万个。现在正是要用这个表了,测试数据已经删了,遗留下来的问题 就是 在录入新的数据,编号只会继续增加,已使用过的但已删除的编号就不能用了, 谁知道如何解决此问题?

    truncate命令不但会清除所有的数据,还会将IDENTITY的SEED的值恢复到原是值。

    而DBCC CHECKIDENT则更加方便一些,可以在不删除数据的情况下指定SEED的值。
     
    1. truncate table tablename
    2. DBCC CHECKIDENT (tablename,reseed,1)
  • 工具---->选项---->文本编辑器---->c#---->常规---->显示---->勾选行号
  •  一: 执行不带返回参数(Input)的存储过程
               1: 首先在数据库写个存储过程, 如创建个 addUser存储过程。
                      Create Proc addUser
                      @ID int,
                      @Name varchar(20),
                      @Sex varchar(20)
                      As
                      Insert Into Users s( @ID, @Name,@Sex )


               2:创建SqlCommand对象,并初始SqlCommand对象 如:
                  SqlCommand cmd = new SqlCommand( );
                  cmd.CommandText = "addUser";     // 制定调用哪个存储过程
                  cmd.CommandType = CommandType.StoredProcedure;     // 制定Sql命令类型是存储过程, 默认的为Sql语句。
                  cmd.Connection = con;    // 设定连接

               3:向SqlCommand对象添加存储过程参数
                 SqlParameter param = new SqlParameter( );   // 定义一个参数对象
                 param.ParameterName = "@ID";                    // 存储过程参数名称
                 param. = txtID.Text.Trim();                   // 该参数的值
                 cmd.Parameters.Add( param );                        // SqlCommand对象添加该参数对象

                 param = new SqlParameter( "@Name", txtName.Text.Trim() );  // 简写方式
                 cmd.Parameters.Add( param );

                4:SqlCommand对象调用执行Sql的函数。 如:
                      cmd.ExecuteNonQuery();
              
           二:执行带返回参数(Output)的存储过程
                1: 首先在数据库写个存储过程, 如创建个 queryUser存储过程。
                    alter Proc queryUser
                   @ID int,
                   @Suc varchar(10) output
                   As
                   select @Suc = 'false'
                   if exists( Select * From users where u_id = @ID )
                           select @Suc = 'success'

                2:创建SqlCommand对象,并初始SqlCommand对象 如:
                  SqlCommand cmd = new SqlCommand( );
                  cmd.CommandText = "queryUser";     // 制定调用哪个存储过程
                  cmd.CommandType = CommandType.StoredProcedure;     // 制定Sql命令类型是存储过程, 默认的为Sql语句。
                  cmd.Connection = con;    // 设定连接

                3:向SqlCommand对象添加存储过程参数
                   SqlParameter param1 = new SqlParameter( "@ID", txtID.Text );   // 添加输入参数
                   cmd.Parameters.Add( param1 );

                   SqlParameter param2 = new SqlParameter();         // 添加输出参数
                   param2.ParameterName = "@Suc";                       // 名称
                   param2.SqlDbType = SqlDbType.VarChar;         // 输出参数的Sql类型
                   param2.Size = 10;                                                   // 输出参数的Sql类型大小
                   param2.Direction = ParameterDirection.Output;  // 指定该参数对象为输出参数类型
                   cmd.Parameters.Add( param2 );

                4:SqlCommand对象调用执行Sql的函数。 如:
                      cmd.ExecuteNonQuery();
                      MessageBox.Show( param2..ToString() );  // 输出输出参数的值

    输入参数的存储过程的示例:
       try
       {
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "addUser";
        
        SqlParameter param = new SqlParameter( );
        param.ParameterName = "@ID";
        param. = txtID.Text.Trim();
        cmd.Parameters.Add( param );

        param = new SqlParameter( "@Name", txtName.Text.Trim() );
        cmd.Parameters.Add( param );

        param = new SqlParameter();
        param.ParameterName = "@Sex";
        param. = txtSex.Text.Trim();
        cmd.Parameters.Add( param );

        //da.InsertCommand = cmd;
        
        if ( cmd.ExecuteNonQuery() == 1 )
        {
         MessageBox.Show( "添加成功" );
        }
        else
        {
         MessageBox.Show("失败");
        }
       }
       catch( SqlException ex )
       {
        MessageBox.Show( ex.Message );
       }

     

    输出参数的存储过程的示例:
        try
       {
        SqlCommand cmd = new SqlCommand( );
        cmd.CommandText = "queryUser";
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Connection = con;
        
        SqlParameter param1 = new SqlParameter( "@ID", txtID.Text );
        cmd.Parameters.Add( param1 );

        SqlParameter param2 = new SqlParameter();
        param2.ParameterName = "@Suc";
        param2.SqlDbType = SqlDbType.VarChar;
        param2.Size = 10;
        param2.Direction = ParameterDirection.Output;
        cmd.Parameters.Add( param2 );
        
        cmd.ExecuteNonQuery();

        MessageBox.Show( param1..ToString() );
        MessageBox.Show( param2..ToString() );

       }
       catch( SqlException ex )
       {
        MessageBox.Show( ex.Message );
       }
     
     
     
     
  • 方案1:
    /// <summary>
    /// 传入URL返回网页的html代码
    /// </summary>
    /// <param name="Url">URL</param>
    /// <returns></returns>
    public static string getUrltoHtml(string Url)
    {
    errorMsg = "";
    try
    {
    System.Net.WebRequest wReq = System.Net.WebRequest.Create(Url);
    // Get the response instance.
    System.Net.WebResponse wResp =wReq.GetResponse();
    // Read an HTTP-specific property
    //if (wResp.GetType() ==HttpWebResponse)
    //{
    //DateTime updated =((System.Net.HttpWebResponse)wResp).LastModified;
    //}
    // Get the response stream.
    System.IO.Stream respStream = wResp.GetResponseStream();
    // Dim reader As StreamReader = New StreamReader(respStream)
    System.IO.StreamReader reader = new System.IO.StreamReader(respStream, System.Text.Encoding.GetEncoding("gb2312"));
    return reader.ReadToEnd();

    }
    catch(System.Exception ex)
    {
    errorMsg = ex.Message ;
    }
    return "";
    }

      你可以用这个函数获取网页的客户端的html代码,然后保存到.html文件里就可以了。

      方案2:

      生成单个的静态页面不是难点,难的是各个静态页面间的关联和链接如何保持完整;特别是在页面频繁更新、修改、或删除的情况下;

      像阿里巴巴的页面也全部是html的,估计用的是地址映射的功能关于地址映射可参考:http://www.easewe.com/Article/ShowArticle.aspx?article=131

      可以看看这个页面,分析一下他的“竞价倒计时”功能http://info.china.alibaba.com/news/subject/v1-s5011580.html?head=top4&Bidding=home5

      ASP.Net生成静态HTML页
      在Asp中实现的生成静态页用到的FileSystemObject对象!
      在.Net中涉及此类操作的是System.IO
      以下是程序代码 注:此代码非原创!参考别人代码

    CODE:
    //生成HTML页
    public static bool WriteFile(string strText,string strContent,string strAuthor)
    {
    string path = HttpContext.Current.Server.MapPath("/news/");
    Encoding code = Encoding.GetEncoding("gb2312");
    // 读取模板文件
    string temp = HttpContext.Current.Server.MapPath("/news/text.html");
    StreamReader sr=null;
    StreamWriter sw=null;
    string str="";
    try
    {
    sr = new StreamReader(temp, code);
    str = sr.ReadToEnd(); // 读取文件
    }
    catch(Exception exp)
    {
    HttpContext.Current.Response.Write(exp.Message);
    HttpContext.Current.Response.End();
    sr.Close();
    }


    string htmlfilename=DateTime.Now.ToString("yyyyMMddHHmmss")+".html";
    // 替换内容
    // 这时,模板文件已经读入到名称为str的变量中了
    str =str.Replace("ShowArticle",strText); //模板页中的ShowArticle
    str = str.Replace("biaoti",strText);
    str = str.Replace("content",strContent);
    str = str.Replace("author",strAuthor);
    // 写文件
    try
    {
    sw = new StreamWriter(path + htmlfilename , false, code);
    sw.Write(str);
    sw.Flush();
    }
    catch(Exception ex)
    {
    HttpContext.Current.Response.Write(ex.Message);
    HttpContext.Current.Response.End();
    }
    finally
    {
    sw.Close();
    }
    return true;

      此函数放在Conn.CS基类中了在添加新闻的代码中引用 注:工程名为Hover

    if(Hover.Conn.WriteFilethis.Title.Text.ToString),this.Content.Text.ToString),this.Author.Text.ToString)))
    {
    Response.Write("添加成功");
    }
    else
    {
    Response.Write("生成HTML出错!");
    }

      模板页Text.html代码

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <title>ShowArticle</title>
    <body>
    biaoti
    <br>
    content<br>
    author
    </body>
    </HTML>
    biaoti
    <br>
    content<br>
    author
    </body>
    </HTML>

      提示添加成功后会出以当前时间为文件名的html文件!上面只是把传递过来的几个参数直接写入了HTML文件中,在实际应用中需要先添加数据库,然后再写入HTML文件

      方案3:给一个客户端参考的例子(SJ)

      它的作用在于以客户端的方式获取某个页面的代码,然后可以做为其他用途,本例是直接输出

    <>
    var oXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    oXmlHttp.open("GET","http://www.webjx.com", false);
    oXmlHttp.send()
    var oStream = new ActiveXObject("ADODB.Stream");
    if(oStream == null)
    alert("您的机器不支持ADODB.Stream.")
    else
    {
    oStream.Type=1;
    oStream.Mode=3;
    oStream.Open() ;
    oStream.Write(oXmlHttp.responseBody);
    oStream.Position= 0;
    oStream.Type= 2;
    oStream.Charset="gb2312";
    var result= oStream.ReadText();
    oStream.Close();
    oStream = null;
    var aa = open("","")
    write(result);
    aa.write(result);
    }
    </>

      方案4:学csdn一样。用xml保存数据,模版XSL也只有一个文件。

      使用xml来保存数据,使用xsl来定义模板并且生称数据。可以通过xsl来很方便的在客户端或者服务段显示数据。如果要生成静态叶面那更简单了。去查一下.net的xml类包问题解决。

      优点:可以方便快速转换成你想要的格式和内容。
      缺点:需要学习更多的内容,不好入门。

      方案5:

      思路

      1. 利用如Dw-Mx这样的工具生成html格式的模板,在需要添加格式的地方加入特殊标记(如$htmlformat$),动态生成文件时利用代码读取此模板,然后获得前台输入的内容,添加到此模板的标记位置中,生成新文件名后写入磁盘,写入后再向数据库中写入相关数据。
    2. 使用后台代码硬编码Html文件,可以使用HtmlTextWriter类来写html文件。
    优点

      1. 可以建立非常复杂的页面,利用包含js文件的方法,在js文件内加入write()方法可以在所有页面内加入如页面头,广告等内容。

      2. 静态html文件利用MS Windows2000的Index Server可以建立全文搜索引擎,利用asp.net可以以DataTable的方式得到搜索结果。而Win2000的Index服务无法查找xml文件的内容。如果包括了数据库搜索与Index索引双重查找,那么此搜索功能将非常强大。

      3. 节省服务器的负荷,请求一个静态的html文件比一个aspx文件服务器资源节省许多。

      缺点

      思路二: 如果用硬编码的方式,工作量非常大,需要非常多的html代码。调试困难。而且使用硬编码生成的html样式无法修改,如果网站更换样式,那么必须得重新编码,给后期带来巨大的工作量。

      因此这里采用的是第一种思路

      示列代码

      1.定义(template.htm)html模板页面

      <html>

      <head>

      <title></title>

      < http-equiv="Content-Type" content="text/html; charset=gb2312">

      </head>

      <body >

      <table $htmlformat[0] height="100%" border="0" width="100%" cellpadding="10" cellspacing="0" bgcolor="#eeeeee" style="border:1px solid #000000">

      <tr>

      <td width="100%" valign="middle" align="left">

      <span style="color: $htmlformat[1];font-size: $htmlformat[2]">$htmlformat[3]</span>

      </td>

      </tr>

      </table>

      </body>

      </html>

      2.asp.net代码:

      //---------------------读html模板页面到stringbuilder对象里----

      string[] format=new string[4];//定义和htmlyem标记数目一致的数组

      StringBuilder htmltext=new StringBuilder();

      try

      {

       using (StreamReader sr = new StreamReader("存放模板页面的路径和页面名"))

       {

      String line;

      while ((line = sr.ReadLine()) != null)

      {

       htmltext.Append(line);

      }

      sr.Close();

       }

      }

      catch

      {

       Response.Write("<>alert('读取文件错误')</>");

      }

      //---------------------给标记数组赋值------------

      format[0]="background="/blog/bg.jpg"";//背景图片

      format[1]= "#990099";//字体颜色

      format[2]="150px";//字体大小

      format[3]= "<marquee>生成的模板html页面</marquee>";//文字说明

      //----------替换htm里的标记为你想加的内容

      for(int i=0;i<4;i++)

      {

       htmltext.Replace("$htmlformat["+i+"]",format[i]);

      }

      //----------生成htm文件------------------――

      try

      {

       using(StreamWriter sw=new StreamWriter("存放路径和页面名",false,System.Text.Encoding.GetEncoding("GB2312")))

      {

       sw.WriteLine(htmltext);

       sw.Flush();

       sw.Close();

      }

      }

      catch

      {

      Response.Write ("The file could not be wirte:");

      }


    <!--Main.Aspx-->
    <%@ page language="C#" %>
    <%@ import namespace=System.IO %>
    < runat="server">
    protected override void OnInit (EventArgs e)
    {
      int id;
      try
      {
        id = int.Parse (Request.QueryString["id"]);
      }
      catch
      {
        throw (new Exception ("页面没有指定id"));
      }
     
      string filename=Server.MapPath("statichtml_"+id+".html");
     
      //尝试读取已有文件
      Stream s = GetFileStream (filename);
      if (s != null)//如果文件存在并且读取成功
      {
        using (s)
        {
          Stream2Stream (s, Response.OutputStream);
          Response.End ();
        }
      }
     
     
      //调用Main_Execute,并且获取其输出
      StringWriter sw = new StringWriter ();
      Server.Execute ("Main_Execute.aspx", sw);
     
      string content = sw.ToString ();
     
      //输出到客户端
      Response.Write(content);
      Response.Flush();
     
      //写进文件
     
      try
      {
        using (FileStream fs = new FileStream (filename, FileMode.Create, FileAccess.Write, FileShare.Write))
        {
          using (StreamWriter streamwriter = new StreamWriter (fs, Response.ContentEncoding))
          {
            streamwriter.Write (content);
          }
        }
      }
      finally
      {
        //Response.End ();
      }
    }
    static public void Stream2Stream (Stream src, Stream dst)
    {
      byte[] buf = new byte[4096];
      while (true)
      {
        int c = src.Read (buf, 0, buf.Length);
        if(c==0)
          return;
        dst.Write (buf, 0, c);
      }
    }
    public Stream GetFileStream(string filename)
    {
      try
      {
        DateTime dt = File.GetLastWriteTime (filename);
        TimeSpan ts=dt - DateTime.Now;
        if(ts.TotalHours>1)
          return null;    //1小时后过期
        return new FileStream (filename, FileMode.Open, FileAccess.Read, FileShare.Read);
      }
      catch
      {
        return null;
      }
    }
    </>


    <!--Main_Execute.aspx-->
    <%@ page language="C#" %>
    <html>
    <head runat="server">
      <title>Untitled Page</title>
    </head>
    <body>

    ID:
    <%=Request.QueryString["id"]%>

    </body>
    </html>



    其中原理是这样的.
    Main_Execute.aspx是生成HTML的页面.

    现在用Main.aspx来对它进行缓存.
    过程如下:

    首先根据页面参数算出文件名.(这个例子只根据Request.QueryString["id"]来算)
    尝试读取缓存的文件.如果成功,那么Response.End();
    如果不成功:
    使用Server.Execute来调用Main_Execute.aspx,并且获取它的结果内容.
    得到内容后,立刻输出到客户端.
    最后把内容写进文件里,提供给下一次做为缓存度取.

    <!--Main.Aspx-->
    <%@ page language="C#" %>
    <%@ import namespace=System.IO %>
    < runat="server">
    protected override void OnInit (EventArgs e)
    {
      int id;
      try
      {
        id = int.Parse (Request.QueryString["id"]);
      }
      catch
      {
        throw (new Exception ("页面没有指定id"));
      }
     
      string filename=Server.MapPath("statichtml_"+id+".html");
     
      //尝试读取已有文件
      Stream s = GetFileStream (filename);
      if (s != null)//如果文件存在并且读取成功
      {
        using (s)
        {
          Stream2Stream (s, Response.OutputStream);
          Response.End ();
        }
      }
     
     
      //调用Main_Execute,并且获取其输出
      StringWriter sw = new StringWriter ();
      Server.Execute ("Main_Execute.aspx", sw);
     
      string content = sw.ToString ();
     
      //输出到客户端
      Response.Write(content);
      Response.Flush();
     
      //写进文件
     
      try
      {
        using (FileStream fs = new FileStream (filename, FileMode.Create, FileAccess.Write, FileShare.Write))
        {
          using (StreamWriter streamwriter = new StreamWriter (fs, Response.ContentEncoding))
          {
            streamwriter.Write (content);
          }
        }
      }
      finally
      {
        //Response.End ();
      }
    }
    static public void Stream2Stream (Stream src, Stream dst)
    {
      byte[] buf = new byte[4096];
      while (true)
      {
        int c = src.Read (buf, 0, buf.Length);
        if(c==0)
          return;
        dst.Write (buf, 0, c);
      }
    }
    public Stream GetFileStream(string filename)
    {
      try
      {
        DateTime dt = File.GetLastWriteTime (filename);
        TimeSpan ts=dt - DateTime.Now;
        if(ts.TotalHours>1)
          return null;    //1小时后过期
        return new FileStream (filename, FileMode.Open, FileAccess.Read, FileShare.Read);
      }
      catch
      {
        return null;
      }
    }
    </>


    <!--Main_Execute.aspx-->
    <%@ page language="C#" %>
    <html>
    <head runat="server">
      <title>Untitled Page</title>
    </head>
    <body>

    ID:
    <%=Request.QueryString["id"]%>

    </body>
    </html>



    其中原理是这样的.
    Main_Execute.aspx是生成HTML的页面.

    现在用Main.aspx来对它进行缓存.
    过程如下:

    首先根据页面参数算出文件名.(这个例子只根据Request.QueryString["id"]来算)
    尝试读取缓存的文件.如果成功,那么Response.End();
    如果不成功:
    使用Server.Execute来调用Main_Execute.aspx,并且获取它的结果内容.
    得到内容后,立刻输出到客户端.
    最后把内容写进文件里,提供给下一次做为缓存度取.
     
     
  • 在表格的单元格中插入一行
     
             shift  +   enter
     
     
    选中嵌了表格的单元格:
     
            先选中单元格中的表格,然后移动光标键
     
     
     
            不要随意的用手动来调整表格,要用命令(菜单)来调整
     
     
     
    表格的关系:
                         上下\左右     内外关系
  • 尽管FrontPage 2000和Flash同属于网页设计软件,但两者的兼容性不是很好。使用FrontPage 2000中的“插入”菜单,无论是图片,还是文件,或者不能直接插入SWF文件,或者插入后无法正常显示,笔者通过探索、尝试,找到了以下4种办法,可以在FrontPage 2000中使用Flash动画:


    图1设置动画输出的属性

    < language=Java1.1 src="http://ad.doubleclick.net/adj/minisite.sina.com.cn/tech;sz=1x1;num=28729036424615452?">

      1、在Flash动画制作结束时,输出为GIF动画。如果要透明,必须在“Export GIF”对话框中,选中“Transparent”(如图1),优点是在FrontPage 2000中可以使用“插入/图片/来自文件”的方式,方便、快捷,缺点是对于直接获取的Flash动画文件,则无法做这种改变。

      2、在FrontPage 2000中,使用“插入/高级/插件/浏览”,选定文件,确定。优点是可以直接插入SWF文件,无需转换,缺点是保留了背景,图像在拉大或缩小时,动画背景和图形不能完全按比例缩放。

      3、在Flash动画制作结束时,先“Save”后“Publish”,“Save”的目的是给文件取名,便于使用同名“Publish”。进入FrontPage 2000后,点击“插入/文件”,选中保存的HTML文件,打开,右击或双击插入对象,进入“ActiveX控件属性”窗口,在“Movie URL(链接地址)”栏中输入SWF文件的绝对路径或链接地址,在“Quality(播放质量)”栏中选“Best”,在“Scale(显示比例)”栏选“ShowAll”,如要透明,在“Windows Mode(窗口模式)”栏选中“Transparent”,其余选项默认即可。预览,即可看到透明的显示效果。优点是对于直接获取的Flash动画,或通过输入绝对路径或输入链接地址的办法,可以插入和控制效果,缺点是无法使用浏览查找,要输入绝对路径,对使用者的要求较高。

      4、直接使用“插入/高级/ActiveX控件”,弹出“插入ActiveX控件”窗口,其中仅显示了安装到电脑的部分控件。点击“自定义”按钮,打开“自定义ActiveX控件列表”列表框,其中显示了电脑上所有安装的ActiveX控件,选中“Shockwave Flash Object”控件,确定。回到“插入ActiveX控件”窗口中,会看到“Shockwave Flash Object”控件已在列表中。选中“Shockwave Flash Object”控件后确定,这时网页中会出现一块白色矩形区域,双击它,在弹出的“ActiveX控件属性”窗口中输入或选择相关的参数即可。前提条件是安装了Flash软件或“Shockwave Flash Object”控件。
     
     
  • 时间格式 - [Asp.Net 2.0]

    2007-12-13

    平时偷懒插入数据直接getdate(),碰到页面要求..就要写一些代码才能实现效果.现在发现了这个办法方便多了...喜欢...现在跟大家一起分享一下...

    2007年10月23日
    System.DateTime.Now.ToString("D");
    2007-10-23
    System.DateTime.Now.ToString("d");
    2007年10月23日 16:30:15
    System.DateTime.Now.ToString("F");
    2007年10月23日 16:30
    System.DateTime.Now.ToString("f");
    2007-10-2316:30:15
    System.DateTime.Now.ToString("G");
    2007-10-23 16:30
    System.DateTime.Now.ToString("g");
    16:30:15
    System.DateTime.Now.ToString("T");
    16:30
    System.DateTime.Now.ToString("t");
    2007年10月23日 8:30:15
    System.DateTime.Now.ToString("U");
    2007-10-23 16:30:15Z
    System.DateTime.Now.ToString("u");
    10月23日
    System.DateTime.Now.ToString("m");

    多说一句...说道时间格式..呵呵判断闰月问题.比如什么2月31什么的..呵呵。偷懒的办法..
    直接
    try
    {
      DateTime.Parse(数据);
      return true;
    }
    catch
    {
      return false;
    }
    如果报错就是时间格式错啦
     
     
  • 水波荷花(flash) - [Flash]

    2007-12-12

    今天在网上找了一个比较好的flash范例------------水波荷花
     

    水波荷花文字教材:
     

    一:新建场景,默认550*400背景自定。
    二:导入图片,荷花。用任意变形工具调整大小550*200。上对齐。
    三:复制图层第一帧图片,添加图层,在第一帧粘贴到当前位置,向下翻    转180度。成倒映状。
    四:复制倒映图片,添加土层,在第一帧粘贴到当前位置,并向下移动一    点。转换为图形元件,透明度设80%
    五:添加图层4用无边框矩形工具绘制横的长条,并复制若干,排列在场景    中。选中所有横条,转换为图形原件。
    六:在图层四的40帧插入关键帧。并将横调向下移动到下半场景,回到第      一帧创建运动渐变。在图层四点右键遮照。
    七:添加图层5。用无边框矩形工具绘制浅蓝色矩形。调整大小覆盖场景下    边部分,并转换为图形元件,设透明度为20%
    八:测试影片,保存。

    水波的制作方法:
    1.新建文件,尺寸默认550*400
    2.点图层1的第一帧导入有水的照片,调整和场景一样大。居中。

    点中照片点拷贝。
    3.增加图层2,锁定图层1。

    4.点图层2的第一帧点编辑---粘贴到当前
    位置。

    5.点修改--分离打散照片。点中图层2的照片,用键盘的方
    向键往下走两下,错开图层2与图层1的照片用套索工具圈出不是
    水的地方,按Delete键删除。
    在图层1图层2的40帧按F5延长。

    6.增加图层3,点第一帧在照片的上边
    框画一无边框的长于照片宽度的细长矩形条,有黑箭头点中它,按住
    Ctyl键往下拖,一直摆满照片,间距不要太大。

    7.摆满后点中第一帧全
    部选中矩形条,点插入--转换为元件--图形--确定,在图层3的40帧
    插入关键帧(F6)在图层3的40帧用键盘方向键往下走一段(想让水
    波慢就往下走的少点想快或者大就多走点)

    8.点中图层3的第一帧创建动作补间,再点中图层3点右键--点遮罩层。OK了!测试存盘。
     
     
  • 水波荷花 - [Flash]

    2007-12-12

    今天在网上找了一个比较好的flash范例------------水波荷花

     

    水波荷花文字教材:

     

     

    一:新建场景,默认550*400背景自定。

    二:导入图片,荷花。用任意变形工具调整大小550*200。上对齐。

    三:复制图层第一帧图片,添加图层,在第一帧粘贴到当前位置,向下翻    180度。成倒映状。

    四:复制倒映图片,添加土层,在第一帧粘贴到当前位置,并向下移动一    点。转换为图形元件,透明度设80

    五:添加图层4用无边框矩形工具绘制横的长条,并复制若干,排列在场景    中。选中所有横条,转换为图形原件。

    六:在图层四的40帧插入关键帧。并将横调向下移动到下半场景,回到第      一帧创建运动渐变。在图层四点右键遮照。

    七:添加图层5。用无边框矩形工具绘制浅蓝色矩形。调整大小覆盖场景下    边部分,并转换为图形元件,设透明度为20

    八:测试影片,保存。

     

     

    水波的制作方法:

    1.新建文件,尺寸默认550*400

    2.点图层1的第一帧导入有水的照片,调整和场景一样大。居中。

    点中照片点拷贝。

    3.增加图层2,锁定图层1

     

    4.点图层2的第一帧点编辑---粘贴到当前

    位置。

     

    5.点修改--分离打散照片。点中图层2的照片,用键盘的方

    向键往下走两下,错开图层2与图层1的照片用套索工具圈出不是

    水的地方,按Delete键删除。

    在图层1图层240帧按F5延长。

     

    6.增加图层3,点第一帧在照片的上边

    框画一无边框的长于照片宽度的细长矩形条,有黑箭头点中它,按住

    Ctyl键往下拖,一直摆满照片,间距不要太大。

     

    7.摆满后点中第一帧全

    部选中矩形条,点插入--转换为元件--图形--确定,在图层340

    插入关键帧(F6)在图层340帧用键盘方向键往下走一段(想让水

    波慢就往下走的少点想快或者大就多走点)

     

    8.点中图层3的第一帧创建动作补间,再点中图层3点右键--点遮罩层。OK了!测试存盘。

     
     
    摘自:http://www2.upweb.net/index208-img/pereditview.php?id=67770
  • 1.鼠标滚动图片大小调整

    <body>
    < LANGUAGE="JAVA">
     bbimg(o){
       var zoom=parseInt(o.style.zoom, 10)||100;

    zoom+=event.wheelDelta/12;

    if (zoom>0)

     o.style.zoom=zoom+'%';


       return false;
    }
    </> 
    <img src="123.jpg" ="java :if(this.width>screen.width-screen.width/2) this.style.width=screen.width-screen.width/2" wheel="return bbimg(this)" > 
    </body>

    2.图片自动缩小到固定大小

    <body ="DrawImage(theimg)">
    < language="Java">
    <!--
    //图片按比例缩放
    var flag=false;
     DrawImage(ImgD){
      var image=new Image();
      var iwidth = 320;  //定义允许图片宽度
      var iheight = 180;  //定义允许图片高度
      image.src=ImgD.src;
      if(image.width>0 && image.height>0){
       flag=true;
       if(image.width/image.height>= iwidth/iheight){
        if(image.width>iwidth){  
        ImgD.width=iwidth;
        ImgD.height=(image.height*iwidth)/image.width;
        }else{
        ImgD.width=image.width;  
        ImgD.height=image.height;
        }
        ImgD.alt=image.width+"×"+image.height;
        }
       else{
        if(image.height>iheight){  
        ImgD.height=iheight;
        ImgD.width=(image.width*iheight)/image.height;     
        }else{
        ImgD.width=image.width;  
        ImgD.height=image.height;
        }
        ImgD.alt=image.width+"×"+image.height;
        }
       }

    //-->
    </>
    <img src="123.jpg" width="1024" height="768" name="theimg">
    </body> 


    3.滚轮图片缩放的代码

    < language="java">
    var count = 10;
     resizeimg(oImage)

    count = Counting(count);
    Resize(oImage,count);
    return false;
    }
     Counting(newzoom){ 
    if (event.wheelDelta >= 120)
    newzoom++;
    else if (event.wheelDelta <= -120)
    newzoom--;
    if (newzoom<2) newzoom=2; ////只允许缩小到20%
    if (newzoom>50) newzoom=50; ////只允许放大到500%
    return newzoom; 
    }
     Resize(oImage,newzoom){ 
    oImage.style.zoom = newzoom + '0%'; 
    count=newzoom;
    }
    </>

    然后在<img src="">中加入
    onDblClick="return Resize(this,10);return false;" 
    wheel="return resizeimg(this)"
  • 当在ASP.NET2.0的站点的根目录下添加一个app_offline.htm后,你的站点就可以停止了,所有的对aspx文件的请求都会取消,而且页面会定位在app_offline.htm页面。当你在对应用程序做大规模的升级或对数据库更新的时候这个页面将会为您提供极大的方便。也许很多人都已经看过这个页面了,但是我刚从inrie推荐的Fredrik的blog上看到,从这一点上可以看到ASP.NET2.0的又一项细致入微的工作。
    如果大家在ASP.NET2.0方面这样的小Tip,欢迎跟贴:-)
  • 如何设置 Web 服务器的权限?如果Web服务器的权限没有设置好,那么网站就会出现漏洞并且很可能会出现被不怀好意的人黑掉的情况。我们不应该把这归咎于 IIS 的不安全。如果对站点的每个目录都配以正确的权限,出现漏洞被人黑掉的机会还是很小的(Web 应用程序本身有问题和通过其它方式入侵黑掉服务器的除外)。下面是我在配置过程中总结的一些经验,希望对大家有所帮助。

      IIS Web 服务器的权限设置有两个地方,一个是 NTFS 文件系统本身的权限设置,另一个是 IIS 下网站->站点->属性->主目录(或站点下目录->属性->目录)面板上。这两个地方是密切相关的。下面以实例的方式来讲解如何设置权限。

    IIS 下网站->站点->属性->主目录(或站点下目录->属性->目录)面板上有:

    脚本资源访问
    读取
    写入
    浏览
    记录访问
    索引资源
      6 个选项。这 6 个选项中,“记录访问”和“索引资源”跟安全性关系不大,一般都设置。但是如果前面四个权限都没有设置的话,这两个权限也没有必要设置。在设置权限时,记住这个规则即可,后面的例子中不再特别说明这两个权限的设置。

      另外在这 6 个选项下面的执行权限下拉列表中还有:


    纯脚本
    纯脚本和可执行程序
    3 个选项。

      而网站目录如果在 NTFS 分区(推荐用这种)的话,还需要对 NTFS 分区上的这个目录设置相应权限,许多地方都介绍设置 everyone 的权限,实际上这是不好的,其实只要设置好 Internet 来宾帐号(IUSR_xxxxxxx)或 IIS_WPG 组的帐号权限就可以了。如果是设置 ASP、PHP 程序的目录权限,那么设置 Internet 来宾帐号的权限,而对于 ASP.NET 程序,则需要设置 IIS_WPG 组的帐号权限。在后面提到 NTFS 权限设置时会明确指出,没有明确指出的都是指设置 IIS 属性面板上的权限。

    例1 —— ASP、PHP、ASP.NET 程序所在目录的权限设置:
      如果这些程序是要执行的,那么需要设置“读取”权限,并且设置执行权限为“纯脚本”。不要设置“写入”和“脚本资源访问”,更不要设置执行权限为“纯脚本和可执行程序”。NTFS 权限中不要给 IIS_WPG 用户组和 Internet 来宾帐号设置写和修改权限。如果有一些特殊的配置文件(而且配置文件本身也是 ASP、PHP 程序),则需要给这些特定的文件配置 NTFS 权限中的 Internet 来宾帐号(ASP.NET 程序是 IIS_WPG 组)的写权限,而不要配置 IIS 属性面板中的“写入”权限。

      IIS 面板中的“写入”权限实际上是对 HTTP PUT 指令的处理,对于普通网站,一般情况下这个权限是不打开的。

      IIS 面板中的“脚本资源访问”不是指可以执行脚本的权限,而是指可以访问源代码的权限,如果同时又打开“写入”权限的话,那么就非常危险了。

      执行权限中“纯脚本和可执行程序”权限可以执行任意程序,包括 exe 可执行程序,如果目录同时有“写入”权限的话,那么就很容易被人上传并执行木马程序了。

      对于 ASP.NET 程序的目录,许多人喜欢在文件系统中设置成 Web 共享,实际上这是没有必要的。只需要在 IIS 中保证该目录为一个应用程序即可。如果所在目录在 IIS 中不是一个应用程序目录,只需要在其属性->目录面板中应用程序设置部分点创建就可以了。Web 共享会给其更多权限,可能会造成不安全因素。

    总结: 也就是说一般不要打开-主目录-(写入),(脚本资源访问) 这两项以及不要选上(纯脚本和可执行程序),选(纯脚本)就可以了.需要asp.net的应用程序的如果应用程序目录不止应用程序一个程序的可以在应用程序文件夹上(属性)-目录-点创建就可以了.不要在文件夹上选web共享.

    例2 —— 上传目录的权限设置:
      用户的网站上可能会设置一个或几个目录允许上传文件,上传的方式一般是通过 ASP、PHP、ASP.NET 等程序来完成。这时需要注意,一定要将上传目录的执行权限设为“无”,这样即使上传了 ASP、PHP 等脚本程序或者 exe 程序,也不会在用户浏览器里就触发执行。

      同样,如果不需要用户用 PUT 指令上传,那么不要打开该上传目录的“写入”权限。而应该设置 NTFS 权限中的 Internet 来宾帐号(ASP.NET 程序的上传目录是 IIS_WPG 组)的写权限。

      如果下载时,是通过程序读取文件内容然后再转发给用户的话,那么连“读取”权限也不要设置。这样可以保证用户上传的文件只能被程序中已授权的用户所下载。而不是知道文件存放目录的用户所下载。“浏览”权限也不要打开,除非你就是希望用户可以浏览你的上传目录,并可以选择自己想要下载的东西。

    总结: 一般的一些asp.php等程序都有一个上传目录.比如论坛.他们继承了上面的属性可以运行脚本的.我们应该将这些目录从新设置一下属性.将(纯脚本)改成(无).

    例3 —— Access 数据库所在目录的权限设置:
      许多 IIS 用户常常采用将 Access 数据库改名(改为 asp 或者 aspx 后缀等)或者放在发布目录之外的方法来避免浏览者下载它们的 Access 数据库。而实际上,这是不必要的。其实只需要将 Access 所在目录(或者该文件)的“读取”、“写入”权限都去掉就可以防止被人下载或篡改了。你不必担心这样你的程序会无法读取和写入你的 Access 数据库。你的程序需要的是 NTFS 上 Internet 来宾帐号或 IIS_WPG 组帐号的权限,你只要将这些用户的权限设置为可读可写就完全可以保证你的程序能够正确运行了。

    总结: Internet 来宾帐号或 IIS_WPG 组帐号的权限可读可写.那么Access所在目录(或者该文件)的“读取”、“写入”权限都去掉就可以防止被人下载或篡改了

    例4 —— 其它目录的权限设置:
      你的网站下可能还有纯图片目录、纯 html 模版目录、纯客户端 js 文件目录或者样式表目录等,这些目录只需要设置“读取”权限即可,执行权限设成“无”即可。其它权限一概不需要设置。

      上面的几个例子已经包含了大部分情况下的权限设置,只要掌握了设置的基本原理,也就很容易地完成能其它情况下的权限设置。

  •       不知道怎么的,就是感觉压力大,领导给我这么大的发展空间,但我却都没做出一些成绩来,说实话,心里有点愧疚。上星期,通过几天的努力,终于了了一件事,初步完成对学校教学资源库界面的设置!
     
  • 痛心 - [品味生活]

    2007-11-14

          现在发现自己真的离不它了(blog),当开心或者是不开心时候,都想上去逛一逛,倾诉一下自己的心灵,留一下一点足迹^^^^^^^^^^^^^
  • 时间差运算 - [Asp.Net 2.0]

    2007-11-14

    时间差:
    Private DateDiff(ByVal DateTime1 As DateTime, ByVal DateTime2 As DateTime) As String
        Dim dateDiff As String = Nothing
        Try
            Dim ts1 As New TimeSpan(DateTime1.Ticks)
            Dim ts2 As New TimeSpan(DateTime2.Ticks)
            Dim ts As TimeSpan = ts1.Subtract(ts2).Duration()
            dateDiff = ts.Days.ToString() + "天" + ts.Hours.ToString() + "小时" + ts.Minutes.ToString() + "分钟" + ts.Seconds.ToString() + "秒"
               
        Catch
        End Try
        Return dateDiff
    End
  •      其实,我很想学好photoshop的处理,但由于时间问题或者是自己没实际项目去真正的尝试,因此,自己都在这一方面达到一定的高度.
        上次,为了上课,临时去同学那里请教了几招,与大家分析一下:
     
    制作水晶按钮制作步骤:

    一、新建文件,大小为200×100,像素为72,背景为白色

    二、新建图层,设定前景色为#00FF00,使用圆角矩形工具新建一个圆角矩形

    三、按住CTRL,用鼠标单击该图层,将矩形作为选区

    四、将选区缩小2像素

    五、新建图层,使用渐变工具向上填充,并根据需要设置一定的图层透明度

    六、新建图层,使用渐变工具向下填充,并根据需要设置一定的图层透明度

    七、加入自己所需的文字
     
    效果图:
     
  • 随想 - [品味生活]

    2007-11-07

     今天,突然想到要到自己的blog看看,进入之后才发现我自己将近一个月没发表文章了,也许是长时间的在思考想弄一个挂到自己空间的blog吧,总觉得挂到别人那里不安全,要是有一天数据都没了怎么办呢!  可能就是这个疙瘩,导致我长时间没上blog吧!  但真的要自己动手弄一个的时候觉得没时间!  也许这就是生活的惰性吧,  "说容易,做难啊" ,其实关键还是做啊!
          之后,我又仔细了看了一下现在的blog,仿佛看到我这几年走过的历程,还真有修改blog名的冲动!
    觉得"足迹"更能体现, 但又担心一个搜索的问题,我现在的blog搜索率已经很高了,如一修,又很难找到了,哎难啊,谁叫我之前没策划好呢!
       还是再弄一个比较好!
  •      现在,学校里出现了很多的病毒,那么到底是什么原因病毒间断性的出现呢!
      
        我觉得其实最大的原因是大量的老师在使用u盘,如u盘本身带有病毒,如插进电脑就会自动运行,然后就中病毒了,那么之后就会在局域网传播了,互相感染了,那么来去除这种问题呢?
     
       如关掉系统中的所有驱动自动播放,应该会在一定程度上解决了这个问题,具体设置如下:
     
    方法一:
       1\在"运行"里输入:gpedit.msc
      2\本地计算机------>管理模板----->系统
    然后再选择"关闭自动播放"   再选择" 启用  "     选择"所有驱动器"     再确定.
     
    这样就可以关闭了u盘插入电脑自动运行的问题了,在一定程度上解决了使用u盘中病毒的可能性
     
     
    方法二:
    当然,也可以使用360奇虎,它里面有提供u盘免疫的功能,启动起来就可以了!
     
     
  • 现在工作了,很事情比较杂,学校又需要一些小的系统,我又没什么时间,如真的要开发的话,比较花时间,我现在一直在寻求一种软件,能非常方便的实现对一些小系统的开发!上次,听我同学说access开发起来非常简单,同时它可以实现一些单机版的系统,由此,我对access产生了极大的兴趣.只是可惜现在对access涉及到这些开发方面的还没入门,现在真感到"恨之完 y i " ,谁叫我不早点接触它,深入的学习它呢!  事到如今,只能从头再来!
  • 我们学校机房总电源开关注意事项:
    打开变压箱,然后再去拉那电源的开关,在这是要注:另外一只手不要接触金属物品,最好用书,或者比挡一下,以免触电!
    反正就是2个字“小心”
  • winver---------检查Windows版本  
    wmimgmt.msc----打开windows管理体系结构(WMI)  
    wupdmgr--------windows更新程序  
    w--------windows脚本宿主设置  
    write----------写字板  
    winmsd---------系统信息  
    wiaacmgr-------扫描仪和照相机向导  
    winchat--------XP自带局域网聊天  

    mem.exe--------显示内存使用情况  
    Msconfig.exe---系统配置实用程序  
    mplayer2-------简易widnows media player  
    mspaint--------画图板  
    mstsc----------远程桌面连接  
    mplayer2-------媒体播放机  
    magnify--------放大镜实用程序  
    mmc------------打开控制台  
    mobsync--------同步命令  

    dxdiag---------检查DirectX信息  
    drwtsn32------ 系统医生  
    devmgmt.msc--- 设备管理器  
    dfrg.msc-------磁盘碎片整理程序  
    diskmgmt.msc---磁盘管理实用程序  
    dcomcnfg-------打开系统组件服务  
    ddeshare-------打开DDE共享设置  
    dvdplay--------DVD播放器  

    net stop messenger-----停止信使服务  
    net start messenger----开始信使服务  
    notepad--------打开记事本  
    nslookup-------网络管理的工具向导  
    ntbackup-------系统备份和还原  
    narrator-------屏幕“讲述人”  
    ntmsmgr.msc----移动存储管理器  
    ntmsoprq.msc---移动存储管理员操作请求  
    netstat -an----(TC)命令检查接口  

    syncapp--------创建一个公文包  
    sysedit--------系统配置编辑器  
    sigverif-------文件签名验证程序  
    sndrec32-------录音机  
    shrpubw--------创建共享文件夹  
    secpol.msc-----本地安全策略  
    syskey---------系统加密,一旦加密就不能解开,保护windows xp系统的双重密码  
    services.msc---本地服务设置  
    Sndvol32-------音量控制程序  
    sfc.exe--------系统文件检查器  
    sfc /scannow---windows文件保护  

    tsshutdn-------60秒倒计时关机命令  
    tourstart------xp简介(安装完成后出现的漫游xp程序)  
    taskmgr--------任务管理器  

    eventvwr-------事件查看器  
    eudcedit-------造字程序  
    explorer-------打开资源管理器  

    packager-------对象包装程序  
    perfmon.msc----计算机性能监测程序  
    progman--------程序管理器  

    regedit.exe----注册表  
    rsop.msc-------组策略结果集  
    regedt32-------注册表编辑器  
    rononce -p ----15秒关机  
    regsvr32 /u *.dll----停止dll文件运行  
    regsvr32 /u zipfldr.dll------取消ZIP支持 cmd.exe--------CMD命令提示符  
    chkdsk.exe-----Chkdsk磁盘检查  
    certmgr.msc----证书管理实用程序  
    calc-----------启动计算器  
    charmap--------启动字符映射表  
    cliconfg-------SQL SERVER 客户端网络实用程序  
    Clipbrd--------剪贴板查看器  
    conf-----------启动netmeeting  
    compmgmt.msc---计算机管理  
    cleanmgr-------^^整理  
    ciadv.msc------索引服务程序  

    osk------------打开屏幕键盘  
    odbcad32-------ODBC数据源管理器  
    oobe/msoobe /a----检查XP是否激活  
    lusrmgr.msc----本机用户和组  
    logoff---------注销命令  

    iexpress-------木马捆绑工具,系统自带  

    Nslookup-------IP地址侦测器  

    fsmgmt.msc-----共享文件夹管理器  

    utilman--------辅助工具管理器  

    gpedit.msc-----组策略

    regsvr32 /u *.dll----停止dll文件运行
    regsvr32 /u zipfldr.dll------取消ZIP支持
    rundll32.exe shell32.dll,Control_RunDLL ----------显示控制面板
    rundll32.exe shell32.dll,Control_RunDLL  
    access.cpl,,1--------显示辅助功能选项
    rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl @1--打开系统属性
    rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,1---删除或添加程序
    rundll32.exe syncui.dll,Briefcase_Create----桌面上建立公文包
    rundll32.exe diskcopy.dll,DiskCopyRunDll----复制软盘驱动器
    rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,0--显示时间属性
    rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0----显示桌面墙纸属性
    rundll32.exe shell32.dll,Control_RunDLL joy.cpl,,0-----游戏控制器
    rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,0---音频属性
    cmd.exe--------CMD命令提示符 chkdsk.exe-----Chkdsk磁盘检查
    certmgr.msc----证书管理实用程序 calc-----------启动计算器
    charmap--------启动字符映射表 cliconfg-------SQL SERVER 客户端网络实用程序
    Clipbrd--------剪贴板查看器 conf-----------启动netmeeting
    compmgmt.msc---计算机管理 cleanmgr-------垃圾整理
    ciadv.msc------索引服务程序 osk------------打开屏幕键盘
    odbcad32-------ODBC数据源管理器 oobe/msoobe /a----检查XP是否激活
    lusrmgr.msc----本机用户和组 logoff---------注销命令
    iexpress-------木马捆绑工具,系统自带 Nslookup-------IP地址侦测器
     
  • 一、该不该定期整理硬盘?

    实际上,定期整理硬盘应该是毫无疑问的。如果说硬盘碎片整理真的会损害硬盘的话,那也将是在对硬盘进行近乎天文数字般次数的整理之后。

    硬盘使用的时间长了,文件的存放位置就会变得支离破碎——文件内容将会散布在硬盘的不同位置上。这些“碎片文件”的存在会降低硬盘的工作效率,还会增加数据丢失和数据损坏的可能性。碎片整理程序把这些碎片收集在一起,并把它们作为一个连续的整体存放在硬盘上。Windows自带有这样的程序:磁盘碎片整理程序(DiskDefragmenter),但在工具软件NortonUtilities和Nuts&Bolts中有更好的此类程序。

    然而,碎片整理对硬盘里的运转部件来说的确是一项不小的工作。如果硬盘已经到了它生命的最后阶段,碎片整理的确有可能是一种自杀行为。但在这种情况下,即使您不进行碎片整理,硬盘也会很快崩溃的。

    实际上在大多数情况下,定期的硬盘碎片整理减少了硬盘的磨损。不管怎么说,让硬盘的磁头从1处读取文件总比从8处读取要容易得多。因此,一个每两周或四周整理一次的硬盘的寿命应当比一个永远不整理的硬盘长。

    二、整理前的准备工作

    我们在整理硬盘前一般都要对它清理垃圾信息,检查有无错误,最后才能谈到碎片的整理和优化。因此,我们在整理硬盘前,应该首先做好这些工作:

    1、应该把硬盘中的垃圾文件和垃圾信息清理干净。系统工作一段时间后,垃圾文件就会非常之多,有程序安装时产生的临时文件、上网时留下的缓冲文件、删除软件时剩下的DLL文件或强行关机时产生的错误文件等,建议“菜鸟”朋友还是使用微软的“磁盘清理程序”代劳,“老鸟”当然可以使用一些功能更强的软件或手工清理。

    2、检查并修复硬盘中的错误。首选的仍然是微软的“磁盘扫描程序”,虽然它的速度实在不怎么样,但只要你有足够的耐心,经过这个程序对磁盘完整而详细的扫描后,相信系统中的绝大多数错误已经被修复了。当然你也可以尝试一下其他工具,如扁鹊神医“Norton WinDoctor”,它的速度可比Windows中的“磁盘扫描工具”快多了。
    三、整理方法及注意

    在Windows里,用户可以从“开始”菜单中选择“程序/附件/系统工具/磁盘碎片整理程序”,弹出选择驱动器窗口,选择要整理的分区,然后点击[确定]即可开始整理,但此方法碎片整理过程非常耗时,一般2GB左右的分区需要1个小时以上,所以建议读者:

    1、整理磁盘碎片的时候,要关闭其他所有的应用程序,包括屏幕保护程序,最好将虚拟内存的大小设置为固定值。不要对磁盘进行读写操作,一旦Disk Defragment发现磁盘的文件有改变,它将重新开始整理。

    2、整理磁盘碎片的频率要控制合适,过于频繁的整理也会缩短磁盘的寿命。一般经常读写的磁盘分区一周整理一次。
  • 一、            开机

    1、  先将电源开关的“输入”打开,然后用一分钟来观察稳压器的输入端是显示380V,并查看指示灯是否“正常”显示。

    2、  打开“讲台”电源(左----à4),查看讲台端的交换机等其他设备是否正常运行。

    3、  5分钟后,再打开“学生机“电源。

     

    二、            关机

    1、  要及时的关掉“投影仪“,同时注意投影仪使用100小时要休息一下。

    2、  先通过“教师机“关掉学生机,再关掉教师机和服务器

    3、  关掉”讲台端稳压器“

    4、  通过电源开关来关掉“学生机“电源,再关掉”讲台“的电源

    5、  通过“空调对应的开关“关掉空调的电源

    6、  通过电源的“输入“开关来的、关掉总的稳压器。

  • iframe - [win 2003 server]

    2007-07-11

    <i></i>1212
  •   您的IP是<%=request.servervariables("remote_host")%>  
      您的端口号是<%=request.servervariables("remote_port")%>