杰's profile杰 杰 BasePhotosBlogLists Tools Help

Blog


    April 22

    浏览器Firefox

    浏览器Firefox的about参数
    1.显示Mozilla的关于信息:about:
    2.显示磁盘的缓存信息和统计数据以及缓存所在的目录:about:cache
    3.这个参数有很多设置,如果设置错误的话火狐将不能正常工作:about:config
    4.显示火狐安装过所有插件的信息:about:plugins
    5.显示构建平台的配置和参数:about:buildconfig
    6.显示火狐开发人员列表,用户可以进行投票哦:about:credits
    7.显示“Mozilla之书”,但实际上并没有什么详细内容about:Mozilla

    我常用的插件
    1.IE Tab 切换IE浏览器
    2.Forecastfox 查看天气预报
    3.Firebug 查看页面代码
    4.CacheViewer 缓存查看器
    5.lori (Life-of-request info)  页面加载时间查看
    6.Minimap Sidebar 地图查看(使用Google的地图数据可设置)
    7.FoxClocks 设置本机的全球时钟
    8.Dcurrency 查看汇率

    MS SQL Server 列数据表字段脚本

    SELECT SysObjects.Name as TableName,
      SysColumns.Name as ColumnsName,
            SysTypes.Name as DateType,
            SysColumns.Length as DateLength
    FROM SysObjects,SysTypes,SysColumns
    WHERE (Sysobjects.Xtype = 'u')
    AND Sysobjects.Id = Syscolumns.Id
    AND SysTypes.XType = Syscolumns.XType
    AND SysTypes.Name <> 'sysname'
    AND SysObjects.name = '用户表名'
    February 19

    ASP.NET 记录页面错误及自定义错误页

    defualt.aspx.cs 上加记录错误log到系统事件日志onerr方法 可将代码写到通用继承页面中

    protected override void OnError(EventArgs e)
    {
    // At this point we have information about the error
    HttpContext ctx = HttpContext.Current;
    Exception exception = ctx.Server.GetLastError();
    string errorInfo = "错误URL: " + ctx.Request.Url.ToString() + "\n源: " + exception.Source + "\n消息Message: " + exception.Message + "\n堆栈: " + exception.StackTrace;
    //ctx.Response.Write(errorInfo);
    // --------------------------------------------------
    // To let the page finish running we clear the error
    // --------------------------------------------------
    //ctx.Server.ClearError();
    string LogName = "MyWebError";
    if (!System.Diagnostics.EventLog.SourceExists(LogName))
    {
    System.Diagnostics.EventLog.CreateEventSource(LogName, "App");
    }
    System.Diagnostics.EventLog el = new System.Diagnostics.EventLog();
    el.Source = LogName;
    el.WriteEntry(errorInfo, System.Diagnostics.EventLogEntryType.Error);
    base.OnError(e);
    }
    web.config 上修改友好错误页
    <customErrors mode="On" defaultRedirect="MyErrorPage.htm">
    </customErrors>

    ASP.NET WEB用户控件下拉框

    WebUserControl1.ascx

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="WebApplication1.WebUserControl1" %>   

    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>   

    <asp:DropDownList ID="DropDownList1" runat="server" >
    </asp:DropDownList>

    WebUserControl1.ascx.cs

        

    using System;
            using System.Data;
            using System.Configuration;
            using System.Collections;
            using System.Web;
            using System.Web.Security;
            using System.Web.UI;
            using System.Web.UI.WebControls;
            using System.Web.UI.WebControls.WebParts;
            using System.Web.UI.HtmlControls;
            using System.Data.SqlClient;    

    namespace WebApplication1
            {
            public partial class WebUserControl1 : System.Web.UI.UserControl
            {
            private string pStrSql;
            private int pSelectedIdx;
            private string pLabelText;
            private bool pIsSelAll;
            protected void Page_Load(object sender, EventArgs e)
            {
            if (!Page.IsPostBack)
            {
            MakDropDownList();
            Label1.Text = this.pLabelText;
            }
            }
            public WebUserControl1()
            {
            pStrSql = "";
            pSelectedIdx = -1;
            }
            /// <summary>
            /// 控件属性SQL语句
            /// </summary>
            public string StrSql
            {
            set { pStrSql = value; }
            }
            /// <summary>
            /// 控件属性选中项的id
            /// </summary>
            public int SelectedIdx
            {
            set { pSelectedIdx = value; }
            }    

    /// <summary>
            /// 下拉框标题
            /// </summary>
            public string LabelText
            {
            set { pLabelText = value; }
            }    

    /// <summary>
            /// 是否要全选项
            /// </summary>
            public bool IsSetAll
            {
            set { pIsSelAll = value; }
            }
            protected void MakDropDownList()
            {
            if (this.pStrSql == string.Empty || this.pStrSql == null)
            {
            DropDownList1.Items.Clear();
            DropDownList1.Items.Add("没有数据");
            DropDownList1.Items[0].Value = "-1";
            }
            else
            {
            DropDownList1.Items.Clear();
            if (pIsSelAll)
            {
            DropDownList1.Items.Add("所有值");
            DropDownList1.Items[0].Value = "-1";
            }
            SqlConnection conn = new SqlConnection();
            conn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnMain1"].ConnectionString;
            string sqlstr = this.pStrSql; //"SELECT ProductName,ProductID  FROM Products ORDER BY ProductID";
            SqlDataAdapter da = new SqlDataAdapter(sqlstr, conn);
            DataTable dt = new DataTable();
            da.Fill(dt);
            for (int i = 0; i < dt.Rows.Count; i++)
            {
            DropDownList1.Items.Add(dt.Rows[i][1].ToString());
            if (pIsSelAll)
            {
            DropDownList1.Items[i+1].Value = dt.Rows[i][0].ToString();
            }
            else
            {
            DropDownList1.Items[i].Value = dt.Rows[i][0].ToString();
            }
            }
            }
            }    

    }
            }    

    Default.aspx

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>

    <%@ Register Src="WebUserControl1.ascx" TagName="WebUserControl1" TagPrefix="uc1" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >
            <head runat="server">
        <title>无标题页</title>
    & amp; nbsp;   </head>
        <body>
        <form. id="form1" runat="server">
        <div>
        <uc1:WebUserControl1 id="WebUserControl1_1" StrSql="SELECT CategoryID, CategoryName FROM Categories" LabelText="产品分类"  runat="server">
        </uc1:WebUserControl1>
        <uc1:WebUserControl1 ID="WebUserControl1_2" runat="server" />
        &nbsp;
        <asp:Button ID="Button1" runat="server" nClick="Button1_Click" Text="Button" /><br />
            选择结果:<asp:Label ID="Label1" runat="server" ForeColor="#0000C0">ddddd</asp:Label></div>
        </form>
        </body>
        </html>
        

    Default.aspx.cs

            using System;
            using System.Data;
            using System.Configuration;
            using System.Collections;
            using System.Web;
            using System.Web.Security;
            using System.Web.UI;
            using System.Web.UI.WebControls;
            using System.Web.UI.WebControls.WebParts;
            using System.Web.UI.HtmlControls;    

    namespace WebApplication1
            {
            public partial class _Default : System.Web.UI.Page
            {
            protected void Page_Load(object sender, EventArgs e)
            {
            }    

    protected void Button1_Click(object sender, EventArgs e)
            {
            Label1.Text = ((DropDownList)WebUserControl1_1.FindControl("DropDownList1")).SelectedItem.Value.ToString();
            }
            }
            }
        

    Web.config

    <connectionStrings>
    <add name="ConnMain1" connectionString="Data Source=127.0.0.1;Initial Catalog=Northwind;User ID=sa" providerName="System.Data.SqlClient"/>
    </connectionStrings>

    September 19

    SqlServer分页存储过程

    使用Northwind库Customer表
    不带参数的分页
     
    CREATE  PROCEDURE up_pagecutSample2
        @PageIndex INT, /*@PageIndex从计数,0为第一页*/
        @PageSize  INT, /*页面大小*/
        @RecordCount INT OUT, /*总记录数*/
        @PageCount INT OUT /*页数*/
    AS
    /*获取记录数*/
    SELECT @RecordCount = COUNT(0) FROM dbo.customers
    /*计算页面数据*/
    SET @PageCount = CEILING(@RecordCount * 1.0 / @PageSize)
    /*TOP记录数*/
    DECLARE @TOPCOUNT INT
    SET @TOPCOUNT = @RecordCount - @PageSize * @PageIndex
    DECLARE @SQLSTR NVARCHAR(1000)
    IF @PageIndex = 0 OR @PageCount <= 1
    BEGIN
        SET @SQLSTR =N'SELECT TOP '+STR(@PageSize)+
        ' * FROM dbo.customers ORDER BY CustomerID DESC'
    END
    ELSE
    BEGIN
        IF @PageIndex = @PageCount - 1
        BEGIN
           SET @SQLSTR =N'SELECT * FROM ( SELECT TOP ' + STR(@TOPCOUNT) +
           ' * FROM dbo.customers ORDER BY CustomerID ASC) T ORDER BY CustomerID DESC'
        END
        ELSE
        BEGIN
           SET @SQLSTR =N' SELECT TOP '+STR(@PageSize)+'* FROM (SELECT TOP ' + STR(@TOPCOUNT) +
           ' * FROM dbo.customers ORDER BY CustomerID ASC) T ORDER BY CustomerID DESC'
        END
    END
    /*执行*/
    EXEC (@SQLSTR)
    GO


    带参数的分页
     
    CREATE    PROCEDURE up_pagecutSample3
        @PageIndex INT, /*@PageIndex从计数,0为第一页*/
        @PageSize  INT, /*页面大小*/
        @RecordCount INT OUT, /*总记录数*/
        @PageCount INT OUT, /*页数*/
        @CustomerID NVARCHAR(5) /*查询条件*/
    AS
    /*获取记录数*/
    SELECT @RecordCount = COUNT(0) FROM dbo.customers
    /*计算页面数据*/
    SET @PageCount = CEILING(@RecordCount * 1.0 / @PageSize)
    /*TOP记录数*/
    DECLARE @TOPCOUNT INT
    SET @TOPCOUNT = @RecordCount - @PageSize * @PageIndex
    DECLARE @SQLSTR NVARCHAR(1000)
    IF @PageIndex = 0 OR @PageCount <= 1
    BEGIN
        SET @SQLSTR =N'SELECT TOP '+STR(@PageSize)+
        ' * FROM dbo.customers WHERE CustomerID LIKE @CustomerID  ORDER BY CustomerID DESC'
    END
    ELSE
    BEGIN
        IF @PageIndex = @PageCount - 1
        BEGIN
           SET @SQLSTR =N'SELECT * FROM ( SELECT TOP ' + STR(@TOPCOUNT) +
           ' * FROM dbo.customers CustomerID LIKE @CustomerID ORDER BY CustomerID ASC) T ORDER BY CustomerID DESC'
        END
        ELSE
        BEGIN
           SET @SQLSTR =N' SELECT TOP '+STR(@PageSize)+'* FROM (SELECT TOP ' + STR(@TOPCOUNT) +
           ' * FROM dbo.customers CustomerID LIKE @CustomerID ORDER BY CustomerID ASC) T ORDER BY CustomerID DESC'
        END
    END
    SELECT @CustomerID = N'%' + @CustomerID + N'%'
    /*执行*/
    EXEC sp_executesql @SQLSTR,N'@CustomerID NVARCHAR(5)',@CustomerID
    GO


     使用临时表实现分页
    create   PROC up_pagecutSample
     @pagesize INT,
     @page INT
    AS
     DECLARE @ks INT
     DECLARE @str VARCHAR(200)
     SET @ks=@pagesize*(@page-1)
     IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[temp_table91]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
     BEGIN
      SELECT * INTO temp_table91 FROM dbo.customers ORDER BY CustomerID DESC
      SET rowcount @pagesize
      SET @str='select * from temp_table91 where CustomerID not in (select top '+str(@ks)+' CustomerID from temp_table91)'
      EXECUTE(@str)
      DROP TABLE temp_table91
     END
    GO

    June 26

    MSDOS下的常用网络命令

    在DOS下的Microsoft Network Client和Windows 9x的DOS窗口等环境中,有许多很有用的但不包含在DOS自带的命令中的网络命令。那么,有哪些这样的命令呢?下面将它们中常用的命令介绍一下。

    Arp

    显示和修改“地址解析协议”(ARP) 所使用的到以太网的 IP 或令牌环物理地址翻译表。该命令只有在安装了 TCP/IP 协议之后才可用。
    arp -a [inet_addr] [-N [if_addr]]
    arp -d inet_addr [if_addr]
    arp -s inet_addr ether_addr [if_addr]
    参数
    -a
    通过询问 TCP/IP 显示当前 ARP 项。如果指定了 inet_addr,则只显示指定计算机的 IP 和物理地址。
    -g
    与 -a 相同。
    inet_addr
    以加点的十进制标记指定 IP 地址。
    -N
    显示由 if_addr 指定的网络界面 ARP 项。
    if_addr
    指定需要修改其地址转换表接口的 IP 地址(如果有的话)。如果不存在,将使用第一个可适用的接口。
    -d
    删除由 inet_addr 指定的项。
    -s
    在 ARP 缓存中添加项,将 IP 地址 inet_addr 和物理地址 ether_addr 关联。物理地址由以连字符分隔的 6 个十六进制字节给定。使用带点的十进制标记指定 IP 地址。项是永久性的,即在超时到期后项自动从缓存删除。
    ether_addr
    指定物理地址。

    Finger

    在运行 Finger 服务的指定系统上显示有关用户的信息。根据远程系统输出不同的变量。该命令只有在安装了 TCP/IP 协议之后才可用。
    finger [-l] [user]@computer[...]
    参数
    -l
    以长列表格式显示信息。
    user
    指定要获得相关信息的用户。省略用户参数以显示指定计算机上所有用户的信息:
    @computer

    Ftp

    将文件传送到正在运行 FTP 服务的远程计算机或从正在运行 FTP 服务的远程计算机传送文件(有时称作 daemon)。Ftp 可以交互使用。单击“相关主题”列表中的“ftp 命令”以获得可用的“ftp”子命令描述。该命令只有在安装了 TCP/IP 协议之后才可用。Ftp 是一种服务,一旦启动,将创建在其中可以使用 ftp 命令的子环境,通过键入 quit 子命令可以从子环境返回到 Windows 2000 命令提示符。
         当 ftp 子环境运行时,它由 ftp 命令提示符代表。
    ftp [-v] [-n] [-i] [-d] [-g] [-s:filename] [-a] [-w:windowsize] [computer]
    参数
    -v
    禁止显示远程服务器响应。
    -n
    禁止自动登录到初始连接。
    -i
    多个文件传送时关闭交互提示。
    -d
    启用调试、显示在客户端和服务器之间传递的所有 ftp 命令。
    -g
    禁用文件名组,它允许在本地文件和路径名中使用通配符字符(* 和 ?)。(请参阅联机“命令参考”中的 glob 命令。)
    -s: filename
    指定包含 ftp 命令的文本文件;当 ftp 启动后,这些命令将自动运行。该参数中不允许有空格。使用该开关而不是重定向 (> )。
    -a
    在捆绑数据连接时使用任何本地接口。
    -w:windowsize
    替代默认大小为 4096 的传送缓冲区。
    computer
    指定要连接到远程计算机的计算机名或 IP 地址。如果指定,计算机必须是行的最后一个参数。

    Nbtstat

    该诊断命令使用 NBT(TCP/IP 上的 NetBIOS)显示协议统计和当前 TCP/IP 连接。该命令只有在安装了 TCP/IP 协议之后才可用。
    nbtstat [-a remotename] [-A IP address] [-c] [-n] [-R] [-r] [-S] [-s] [interval]
    参数
    -a remotename
    使用远程计算机的名称列出其名称表。
    -A IP address
    使用远程计算机的 IP 地址并列出名称表。
    -c
    给定每个名称的 IP 地址并列出 NetBIOS 名称缓存的内容。
    -n
    列出本地 NetBIOS 名称。“已注册”表明该名称已被广播 (Bnode) 或者 WINS(其他节点类型)注册。
    -R
    清除 NetBIOS 名称缓存中的所有名称后,重新装入 Lmhosts 文件。
    -r
    列出 Windows 网络名称解析的名称解析统计。在配置使用 WINS 的 Windows 2000 计算机上,此选项返回要通过广播或 WINS 来解析和注册的名称数。
    -S
    显示客户端和服务器会话,只通过 IP 地址列出远程计算机。
    -s
    显示客户端和服务器会话。尝试将远程计算机 IP 地址转换成使用主机文件的名称。
    interval
    重新显示选中的统计,在每个显示之间暂停 interval 秒。按 CTRL+C 停止重新显示统计信息。如果省略该参数,nbtstat 打印一次当前的配置信息。

    Netstat

    显示协议统计和当前的 TCP/IP 网络连接。该命令只有在安装了 TCP/IP 协议后才可以使用。
    netstat [-a] [-e] [-n] [-s] [-p protocol] [-r] [interval]
    参数
    -a
    显示所有连接和侦听端口。服务器连接通常不显示。
    -e
    显示以太网统计。该参数可以与 -s 选项结合使用。
    -n
    以数字格式显示地址和端口号(而不是尝试查找名称)。
    -s
    显示每个协议的统计。默认情况下,显示 TCP、UDP、ICMP 和 IP 的统计。-p 选项可以用来指定默认的子集。
    -p protocol
    显示由 protocol 指定的协议的连接;protocol 可以是 tcp 或 udp。如果与 -s 选项一同使用显示每个协议的统计,protocol 可以是 tcp、udp、icmp 或 ip。
    -r
    显示路由表的内容。
    interval
    重新显示所选的统计,在每次显示之间暂停 interval 秒。按 CTRL+B 停止重新显示统计。如果省略该参数,netstat 将打印一次当前的配置信息。

    Ping

    验证与远程计算机的连接。该命令只有在安装了 TCP/IP 协议后才可以使用。
    ping [-t] [-a] [-n count] [-l length] [-f] [-i ttl] [-v tos] [-r count] [-s count] [[-j computer-list] | [-k computer-list]] [-w timeout] destination-list
    参数
    -t
    Ping 指定的计算机直到中断。
    -a
    将地址解析为计算机名。
    -n count
    发送 count 指定的 ECHO 数据包数。默认值为 4。
    -l length
    发送包含由 length 指定的数据量的 ECHO 数据包。默认为 32 字节;最大值是 65,527。
    -f
    在数据包中发送“不要分段”标志。数据包就不会被路由上的网关分段。
    -i ttl
    将“生存时间”字段设置为 ttl 指定的值。
    -v tos
    将“服务类型”字段设置为 tos 指定的值。
    -r count
    在“记录路由”字段中记录传出和返回数据包的路由。count 可以指定最少 1 台,最多 台计算机。
    指定要 ping 的远程计算机。

    Rcp

    在 Windows 2000 计算机和运行远程外壳端口监控程序 rshd 的系统之间复制文件。rcp 命令是一个连接命令,从 Windows 2000 计算机发出该命令时,也可以用于其他传输在两台运行 rshd 的计算机之间复制文件。rshd 端口监控程序可以在 UNIX 计算机上使用,而在 Windows 2000 上不能使用,所以 Windows 2000 计算机仅可以作为发出命令的系统参与。远程计算机必须也通过运行 rshd 提供 rcp 实用程序。
    rcp [-a | -b] [-h] [-r] source1 source2 ... sourceN destination
    参数
    -a
    指定 ASCII 传输模式。此模式在传出文件上将回车/换行符转换为回车符,在传入文件中将换行符转换为回车/换行符。该模式为默认的传输模式。
    -b
    指定二进制图像传输模式。没有执行回车/换行符转换。
    -h
    传输 Windows 2000 计算机上标记为隐藏属性的源文件。如果没有该选项,在 rcp 命令行上指定隐藏文件的效果与文件不存在一样。
    -r
    将源的所有子目录内容递归复制到目标。source 和 destination 都必须是目录,虽然即使源不是目录,使用 -r 也能够工作。但将没有递归。
    source 和 destination
    格式必须为 [computer[.user]:]filename。如果忽略了 [computer[.user]:] 部分,计算机将假定为本地计算机。如果省略了 [.user] 部分,将使用当前登录的 Windows 2000 用户名。如果使用了完全合格的计算机名,其中包含句点 (.) 分隔符,则必须包含 [.user]。否则,计算机名的最后部分将解释为用户名。如果指定了多个源文件,则 destination 必须是目录。
    如果文件名不是以 UNIX 的正斜杠 (/) 或 Windows 2000 系统的反斜杠 (\) 打头,则假定相对于当前的工作目录。在 Windows 2000 中,这是发出命令的目录。在远程系统中,这是远程用户的登录目录。句点 (.) 表示当前的目录。在远程路径中使用转义字符(\、" 或 '),以便在远程计算机中使用通配符。

    Rexec

    在运行 REXEC 服务的远程计算机上运行命令。rexec 命令在执行指定命令前,验证远程计算机上的用户名,只有安装了 TCP/IP 协议后才可以使用该命令。
    rexec computer [-l username] [-n] command
    参数
    computer
    指定要运行 command 的远程计算机。
    -l username
    指定远程计算机上的用户名。
    -r
    将 rexec 的输入重定向到 NULL。
    command
    指定要运行的命令。

    Route

    控制网络路由表。该命令只有在安装了 TCP/IP 协议后才可以使用。
    route [-f] [-p] [command [destination] [mask subnetmask] [gateway] [metric costmetric]]
    参数
    -f
    清除所有网关入口的路由表。如果该参数与某个命令组合使用,路由表将在运行命令前清除。
    -p
    该参数与 add 命令一起使用时,将使路由在系统引导程序之间持久存在。默认情况下,系统重新启动时不保留路由。与 print 命令一起使用时,显示已注册的持久路由列表。忽略其他所有总是影响相应持久路由的命令。
    command
    指定下列的一个命令。
    命令 目的
    print 打印路由
    add 添加路由
    delete 删除路由
    change 更改现存路由
    destination
    指定发送 command 的计算机。
    mask subnetmask
    指定与该路由条目关联的子网掩码。如果没有指定,将使用 255.255.255.255。
    gateway
    指定网关。
    名为 Networks 的网络数据库文件和名为 Hosts 的计算机名数据库文件中均引用全部 destination 或 gateway 使用的符号名称。如果命令是 print 或 delete,目标和网关还可以使用通配符,也可以省略网关参数。
    metric costmetric
    指派整数跃点数(从 1 到 9999)在计算最快速、最可靠和(或)最便宜的路由时使用。
    Rsh
    在运行 RSH 服务的远程计算机上运行命令。该命令只有在安装了 TCP/IP 协议后才可以使用。
    rsh computer [-l username] [-n] command
    参数
    computer
    指定运行 command 的远程计算机。
    -l username
    指定远程计算机上使用的用户名。如果省略,则使用登录的用户名。
    -n
    将 rsh 的输入重定向到 NULL。
    command
    指定要运行的命令。

    Tftp

    将文件传输到正在运行 TFTP 服务的远程计算机或从正在运行 TFTP 服务的远程计算机传输文件。该命令只有在安装了 TCP/IP 协议后才可以使用。
    tftp [-i] computer [get | put] source [destination]
    参数
    -i
    指定二进制图像传送模式(也称为“八位字节”)。在二进制图像模式中,文件一个字节接一个字节地逐字移动。在传送二进制文件时使用该模式。
    如果省略了 -i,文件将以 ASCII 模式传送。这是默认的传送模式。此模式将 EOL 字符转换为 UNIX 的回车符和个人计算机的回车符/换行符。在传送文本文件时应使用此模式。如果文件传送成功,将显示数据传输率。
    computer 指定本地或远程计算机。
    put
    将本地计算机上的文件 destination 传送到远程计算机上的文件 source。
    get
    将远程计算机上的文件 destination 传送到本地计算机上的文件 source。
    如果将本地计算机上的文件 file-two 传送到远程计算机上的文件 file-one,请指定 put。如果将远程计算机上的文件 file-two 传送到远程计算机上的文件 file-one,请指定 get。
    因为 tftp 协议不支持用户身份验证,所以用户必须登录,并且文件在远程计算机上必须可以写入。
    source
    指定要传送的文件。如果本地文件指定为 -,则远程文件在 stdout 上打印出来(如果获取),或从 stdin(如果放置)读取。
    destination
    指定将文件传送到的位置。如果省略了 destination,将假定与 source 同名。

    Tracert

    该诊断实用程序将包含不同生存时间 (TTL) 值的 Internet 控制消息协议 (ICMP) 回显数据包发送到目标,以决定到达目标采用的路由。要在转发数据包上的 TTL 之前至少递减 1,必需路径上的每个路由器,所以 TTL 是有效的跃点计数。数据包上的 TTL 到达 0 时,路由器应该将“ICMP 已超时”的消息发送回源系统。Tracert 先发送 TTL 为 1 的回显数据包,并在随后的每次发送过程将 TTL 递增 1,直到目标响应或 TTL 达到最大值,从而确定路由。路由通过检查中级路由器发送回的“ICMP 已超时”的消息来确定路由。不过,有些路由器悄悄地下传包含过期 TTL 值的数据包,而 tracert 看不到。
    tracert [-d] [-h maximum_hops] [-j computer-list] [-w timeout] target_name
    参数
    /d
    指定不将地址解析为计算机名。
    -h maximum_hops
    指定搜索目标的最大跃点数。
    -j computer-list
    指定沿 computer-list 的稀疏源路由。
    -w timeout
    每次应答等待 timeout 指定的微秒数。
    target_name
    目标计算机的名称。

    此外,还有IPCONFIG,DNR等命令,这里就不再一一介绍了。
    May 14

    Reporting Services

    Reporting Services 是基于服务器的全面解决方案,可用于创作、管理和提供基于纸稿的报表以及基于 Web 的交互式报表。
    web服务器注册asp.net/visual studio2003/sql server200
    服务端运行环境
    web服务器注册asp.net/sql server200
    January 26

    DoNet使用存储过程操作数据库

    例子一 带输入参数返回记录集
    要用的存储过程up_ListReply
     CREATE PROC dbo.up_ListReply
     @ID INT
    AS
    SET NOCOUNT ON
     SELECT
     A.f_Rid,
     A.f_Rname,
     A.f_Rcontent,
     A.f_Rip,
     A.f_Radddate,
     B.f_Uname,
     B.f_UHeadImg
     FROM
     dbo.tbl_reply AS A INNER JOIN dbo.tbl_Users
     AS B ON A.f_Rusername=B.f_Uname
     WHERE A.f_Tid=@ID
    GO
    程序页
     

    <%@ Page Language="C#" ContentType="text/html" ResponseEncoding="utf-8" Debug="true" %>
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Data.SqlClient" %>

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script language="C#" runat="server">
    void Page_Load(Object src,EventArgs e){
    BindGrid();
    }
    void BindGrid() {

    SqlConnection myConnection = new SqlConnection(ConfigurationSettings.AppSettings["MyConn2"]);
    /*SqlDataAdapter myDataAdapter = new SqlDataAdapter("dbo.up_getAllUserData", myConnection);
    myDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;

    DataSet ds = new DataSet();
    myDataAdapter.Fill(ds, "db");

    Rep.DataSource = ds.Tables["db"].DefaultView;
    Rep.DataBind();*/

    myConnection.Open();

    SqlCommand myCommand = new SqlCommand();
    myCommand.Connection = myConnection;
    myCommand.CommandType = CommandType.StoredProcedure;
    myCommand.CommandText = "dbo.up_ListReply";

    myCommand.Parameters.Add("@ID", SqlDbType.Int);
    myCommand.Parameters["@ID"].Value = Convert.ToInt32("12");
    /*
    SqlParameter myParam = myCommand.Parameters.Add("@ID", SqlDbType.Int);
    myParam.Direction = ParameterDirection.Input;
    myParam.Value = Convert.ToInt32("12");
    */
    SqlDataReader myDataReader = myCommand.ExecuteReader();
    Rep.DataSource = myDataReader;
    Rep.DataBind();
    }
    </script>
    <title>DB_Access_test11</title>
    </head>
    <body >
    <form runat="server">
    <ASP:Repeater id="Rep" runat="server">

    <HeaderTemplate>
    <h1>List Reply</h1>
    <h1>Use Command/DataReader/Repeater_Control PageHeader</h1>
    </HeaderTemplate>

    <ItemTemplate>
    <p style="font-size:12px">
    ID:<font color="#0000FF"><%# DataBinder.Eval(Container.DataItem, "f_Rid") %></font>&nbsp;&nbsp;&nbsp;
    TopicName:<font color="#FF0000"><%# DataBinder.Eval(Container.DataItem, "f_Rname") %></font>&nbsp;&nbsp;&nbsp;
    UserName:<font color="#DFA894"><%# DataBinder.Eval(Container.DataItem, "f_Uname") %></font>&nbsp;&nbsp;&nbsp;
    </p>
    <p style="font-size:12px">
    RegisterDate:<font color="#DFA894"><%# DataBinder.Eval(Container.DataItem, "f_Radddate") %></font>&nbsp;&nbsp;&nbsp;
    Ip:<font color="#DFA894"><%# DataBinder.Eval(Container.DataItem, "f_Rip") %></font>&nbsp;&nbsp;&nbsp;
    </p>
    </ItemTemplate>

    <alternatingitemtemplate>
    <p style="font-size:12px">
    ID:<font color="#0000FF"><%# DataBinder.Eval(Container.DataItem, "f_Rid") %></font>&nbsp;&nbsp;&nbsp;
    TopicName:<font color="#00FF00"><%# DataBinder.Eval(Container.DataItem, "f_Rname") %></font>&nbsp;&nbsp;&nbsp;
    UserName:<font color="#00CC99"><%# DataBinder.Eval(Container.DataItem, "f_Uname") %></font>&nbsp;&nbsp;&nbsp;
    </p>
    <p style="font-size:12px">
    RegisterDate:<font color="#00CC99"><%# DataBinder.Eval(Container.DataItem, "f_Radddate") %></font>&nbsp;&nbsp;&nbsp;
    Ip:<font color="#00CC99"><%# DataBinder.Eval(Container.DataItem, "f_Rip") %></font>&nbsp;&nbsp;&nbsp;
    </p>
    </alternatingitemtemplate>

    <separatortemplate>
    <div align="left">---------------------------------------------------------------------------------</div>
    </separatortemplate>

    <FooterTemplate>
    <h2>All User Record PageFooter</h2>
    </FooterTemplate>
    </ASP:Repeater>
    </form>
    </body>
    </html>


    例子二 带输入参数输出参数
    要用的存储过程up_getUserByUname
     CREATE PROCEDURE dbo.up_getUserByUname
    (@uname NVARCHAR (20),@isvalid TINYINT OUTPUT)
    --According username query user is exists根据用户名查询是否存在用户
    AS
    SET NOCOUNT ON
    IF exists(SELECT f_Uid FROM tbl_users WHERE f_Uname=@uname)
    SELECT @isvalid=1
    ELSE
    SELECT @isvalid=0
    GO
    程序页
    <%@ Page Language="C#" ContentType="text/html" ResponseEncoding="utf-8" Debug="true" %>
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Data.SqlClient" %><html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script language="C#" runat="server">
    void Page_Load(Object src,EventArgs e){
    BindGrid();
    }
    void BindGrid() {

    SqlConnection myConnection = new SqlConnection(ConfigurationSettings.AppSettings["MyConn2"]);
    /*SqlDataAdapter myDataAdapter = new SqlDataAdapter("dbo.up_getAllUserData", myConnection);
    myDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;

    DataSet ds = new DataSet();
    myDataAdapter.Fill(ds, "db");

    Rep.DataSource = ds.Tables["db"].DefaultView;
    Rep.DataBind();*/

    myConnection.Open();
    string uid;
    int reVal;
    uid = Request.QueryString["uid"].Trim().ToString();
    SqlCommand myCommand = new SqlCommand();
    myCommand.Connection = myConnection;
    myCommand.CommandType = CommandType.StoredProcedure;
    myCommand.CommandText = "dbo.up_getUserByUname";

    myCommand.Parameters.Add("@uname", SqlDbType.NVarChar, 20);
    myCommand.Parameters.Add("@isvalid", SqlDbType.TinyInt);
    myCommand.Parameters["@uname"].Value = uid;
    myCommand.Parameters["@isvalid"].Direction = ParameterDirection.Output; //if return parameter ParameterDirection.ReturnValue

    myCommand.ExecuteNonQuery();

    reVal = Convert.ToInt32(myCommand.Parameters["@isvalid"].Value);
    /*
    SqlParameter myParam = myCommand.Parameters.Add("@uname", SqlDbType.NVarChar, 20);
    myParam.Direction = ParameterDirection.Input;
    myParam.Value = uid;

    myParam = myCommand.Parameters.Add("@isvalid", SqlDbType.TinyInt);
    myParam.Direction = ParameterDirection.Output;

    myCommand.ExecuteNonQuery();

    reVal = Convert.ToInt32(myParam.Value);
    */
    if (reVal == 1){
    result.Text = "found [" + uid + "] user";
    }else if(reVal == 0){
    result.Text = "not found user";
    }
    }
    </script>
    <title>DB_Access_test16</title>
    </head>
    <body>
    <asp:Label ID="result" runat="server" BorderColor="#0000FF"/>
    </body>
    </html>

    January 23

    使用.Net Framework绘制饼图

    主要使用类库与结构
    System.Drawing.Graphics
    System.Drawing.Rectangle

    代码如下

    <%@ Page Language="C#" ContentType="text/html" ResponseEncoding="utf-8" Debug="true" %>
    <!-- for .Net Framework 2.0 -->
    <%@ Import Namespace="System.Drawing" %>
    <script runat="server" language="c#">
     void Page_Load(object sender, EventArgs e){
      Bitmap image = new Bitmap(440,300);
      Graphics g = Graphics.FromImage(image);
      
      g.Clear(Color.White);
      
      Rectangle outline = new Rectangle(10, 10, 420, 240);
      
      g.DrawEllipse(new Pen(Color.Black, 4f), outline);

      //create data
      int[] b = new int[]{1565, 486, 5896, 1449};

      float count = b[0] + b[1] + b[2] + b[3];
      float[] c = new float[]{(b[0]/count), (b[1]/count), (b[2]/count), (b[3]/count)};
      float[] a = new float[]{(360 * c[0]), (360 * c[1]), (360 * c[2]), (360 * c[3])};
      
      //make  area pie
      g.FillPie(new SolidBrush(Color.Red), outline, 0f, a[0]);
      g.FillPie(new SolidBrush(Color.Yellow), outline, a[0], a[1]);
      g.FillPie(new SolidBrush(Color.Blue), outline, (a[0] + a[1]), a[2]);
      g.FillPie(new SolidBrush(Color.Green), outline, (a[0] + a[1] + a[2]), a[3]);
      
      //make color note start---
      g.DrawRectangle(new Pen(Color.Black, 1f), new Rectangle(10, 260, 10, 10));
      g.FillRectangle(new SolidBrush(Color.Red), 10, 260, 10, 10);
      g.DrawString("1item:" + b[0].ToString(), new Font("Black", 10), new SolidBrush(Color.Black), 25, 260);
      
      g.DrawRectangle(new Pen(Color.Black, 1f), new Rectangle(110, 260, 10, 10));
      g.FillRectangle(new SolidBrush(Color.Yellow), 110, 260, 10, 10);
      g.DrawString("2item:" + b[1].ToString(), new Font("Black", 10), new SolidBrush(Color.Black), 125, 260);
      
      g.DrawRectangle(new Pen(Color.Black, 1f), new Rectangle(210, 260, 10, 10));
      g.FillRectangle(new SolidBrush(Color.Blue), 210, 260, 10, 10);
      g.DrawString("3item:" + b[2].ToString(), new Font("Black", 10), new SolidBrush(Color.Black), 225, 260);
      
      g.DrawRectangle(new Pen(Color.Black, 1f), new Rectangle(310, 260, 10, 10));
      g.FillRectangle(new SolidBrush(Color.Green), 310, 260, 10, 10);
      g.DrawString("4item:s" + b[3].ToString(), new Font("Black", 10), new SolidBrush(Color.Black), 325, 260);
      //make color note end---
      
      //mark string
      g.DrawString(".Net Drawing", new Font("Arial Black", 20), new SolidBrush(Color.White), 100, 80);
      
      image.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif);
      //Response.Write(a[0]+"/"+a[1]+"/"+a[2]+"/"+a[3]);
      //Response.Write((b[0]/(float)count*100));
      Response.ContentType="Image/Gif";
     }
    </script>

    正则表达式

      正则表达式(Regular Expression)是一种可以用于模式匹配和替换的强有力的工具。我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器, Perl或PHP脚本语言,以及awk或sed shell程序等。此外,象Javascrīpt这种客户端的脚本语言也提供了对正则表达式的支持。由此可见,正则表达式已经超出了某种语言或某个系统的局限,成为人们广为接受的概念和功能。
      正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与数据文件、程序输入以及WEB页面的表单输入等目标对象进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。
    举例来说,正则表达式的一个最为普遍的应用就是用于验证用户在线输入的邮件地址的格式是否正确。如果通过正则表达式验证用户邮件地址的格式正确,用户所填写的表单信息将会被正常处理;反之,如果用户输入的邮件地址与正则表达的模式不匹配,将会弹出提示信息,要求用户重新输入正确的邮件地址。由此可见正则表达式在WEB应用的逻辑判断中具有举足轻重的作用。
    基本语法
      在对正则表达式的功能和作用有了初步的了解之后,我们就来具体看一下正则表达式的语法格式。
    正则表达式的形式一般如下,其中正则表达式直接量定义在位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。用户只要把希望查找匹配对象的模式内容放入“/”定界符之间即可。

    var pattern = /s$/;                   //定义一个表达式
      用构造函数RegExp定义正则表达式
    var pattern = new RegExp("s$");      //使用RegExp定义一个表达式

    特殊元素含义:

    1.非字母字符的直接量

        字符                    匹配

        字母数字字符          自身

        \o                  NUL字符(对应\u0000

        \t                  制表符(\u0009

        \n                  换行符(\u000A

        \v                  垂直制表符(\u000B

        \f                  换页符(\u000C

        \r                  回车(\u000D

        \xnn                由十六进制数nn指定的拉丁字符,例如,\x0A等价于\n

        \uxxxx              由十六进制xxxx指定的Unicode字符,例如,\u0009等价于\t

        \cX                 控制字符^X,例如,\cJ等价于\n


    2.特殊含义字符

           ^ $ . * + ? = ! : | \ / ( ) [ ] { }

           在匹配这些特殊含义字符本身的含义时,要在前面加\,如任何包含\的字符串的正则表达式为:/\\/


    3.字符类直接量

       字符                匹配

        […]                位于括号内的任意字符

        [^…]               不在括号内的任意字符

        .                  除换行符和其他Unicode行中止符之外的任意字符

        \w                 任何ASCII单字字符,等价于[a-zA-Z0-9_]

        \W                 任何ASCII非单字字符,等价于[^a-zA-Z0-9_]

        \s                 任何Unicode空白符

        \S                 任何非Unicode空白符

        \d                 任何ASCII数字,等价于[0-9]

        \D                 除了ASCII数字之外的任何字符,等价于[^0-9]

        [\b]               退格直接量(特例)


    4.重复字符

        字符               匹配

        {n,m}              匹配前一项至少n次,但是不能超过 m

       {n,}                  匹配前一项n次,或更多次

        {n}                匹配前一项恰好n

        ?                  匹配前一项0次或1次,也就是说前一项可选,等价于{0,1}

        +                  匹配前一项1次或多次,等价于{1,}

        *                  匹配前一项0次或多次,等价于{0,}

        非贪婪的重复:在匹配模式后面加一个问号,如/a+?/只匹配字符串的第一个字母a


    5.选择、分组和引用字符

        字符              含义

        |                 选择,匹配的是该符号左边的子表达式或右边的子表达式

        (…)               组合,将几个项目组合为一个单元,这个单元可由*+?|组成

        (?:…)             只组合,把项目组合到一个单元,但是不记忆与该组匹配的字符

        \n                和第n个分组第一次匹配的字符相匹配,组是括号中的子表达式

    (可能是嵌套的),组号是从左到右计数的左括号数,以(?:形式

    分组的组不编码


    6字符

        字符              含义

        ^                匹配字符串的开头,在多行检索中,匹配一行的开头

        $                匹配字符串的结尾,在多行检索中,匹配一行的结尾

        \b               匹配一个词语的边界

        \B               匹配非词语边界字符

        (?=p)            正向前声明,要求接下来的字符都与模式p匹配

        (?!p)            反向前声明,要求接下来的字符不与模式p匹配


    7.标志字符

        字符              含义

        i                执行大小写不敏感的匹配

        g                执行全局匹配,寻找所有的匹配,不在找到第一个匹配后停止

        m                多行模式,结合^$使用(Supported in Javascrīpt1.5)


    用于模式匹配的String方法:searchreplacematchsplit

    用于模式匹配的RegExp方法:exectest

    /\w{6}/.test("abcdef");                   //test用例
    匹配return true否者为false
    "Javascrīpt".search(/scrīpt/i);     //search用例 匹配return true否者为false

    正字表达式举例:

    /s$/                                匹配以字母s结尾的字符串

    /\\/                                匹配包含反斜杠\的字符串

    /[abc]/                             匹配字母“a”、“b”、“c”中的任何一个字母

    /[a-z]/                             匹配拉丁字母集中任何小写字母

    /[\u0400-\u04FF]/                   匹配所有的Cyrillic字符

    /[\s\d]/                            匹配任意空白字符或数字

    /\d{2,4}/                           匹配与24之间的数字

    /\w{3}\d?/                           匹配三个字符一个数字

    /\s+java\s+/                        匹配字符串java,切该串前后可以有一个或多个空格

    /[^”]*/                             匹配零个或多个非引号字符

    /ab|cd|ef/                          匹配字符串ab或者cd又或者ef

    /\d{3}|[a-z]{4}/                    匹配一个三位数字或者四个小写字母

    /java(scrīpt)?/                     匹配字符串java,其后可以有scrīpt也可以没有

    /(ab|cd)+|ef/                       匹配可以是字符串ef,也可以是字符串ab或者cd的一次或多次

    /Java(?!scrīpt)([A-Z]\W*)/          匹配Java跟随一个大写字母和任意多个ASCII字符,但是不能跟随scrīpt

    /Java$/im                           JavaJava\nis fun匹配

    /^\w{4,8}$/                         匹配4~8个字母数字的组合
    /^.{4,8}$/                               
    匹配4~8个任意字符的组合

    /^\w+?@\w+\.\w{2,3}$/                     匹配E-mail格式 如wwwwww@wwwwwww.www

    January 15

    使用DotNet来制作简单RSS频道

    技术:ASP.Net/C#/XML
    平台:IIS/.Framework1.0/MS SQL SERVER/IE or FireFox

    使用RSS v2.0文档结构如下

    <?xml version="1.0" encoding="utf-8" ?>
    <rss version="2.0">
        <channel>
            <title/><link/><language/><docs/><descrīption/><copyright/><generator/><lastBuildDate/><ttl/>
            <image>
                <url/><title/><link/>
            </image>
            <item>
                <title/><link/>            
                <descrīption>                     
                    <![CDATA[]]>               
                </descrīption>
                <category/><author/><pubDate/>
            </item>
        </channel>
    </rss>

    格式必须按照XML规范来写
    RSS2.0参考文献: http://blogs.law.harvard.edu/tech/rss

    定义读取RSS信息的存储过程

    CREATE PROCEDURE [dbo].[up_ListTopic]        --list topic record 列出留言主题
    AS
    SET NOCOUNT ON
    SET XACT_ABORT ON
        BEGIN TRANSACTION
        SELECT
        A.f_Tid,                --index 0
        A.f_Tname AS [标题:],            --index 1
        A.f_Tcontent AS [主题内容:],        --index 2
        A.f_Tip AS [留言者IP:],            --index 3
        A.f_Tadddate AS [留言日期:],        --index 4
        B.f_Uname AS [留言用户:],        --index 5
        A.f_ReplyHit AS [回复数:]        --index 6
        FROM dbo.tbl_topic AS A
        INNER JOIN dbo.tbl_Users AS B
        ON A.f_Uid=B.f_Uid
        ORDER BY A.f_Tadddate DESC
        COMMIT TRAN
    GO

    这里只用了这几个字段f_Tid, f_Tname, f_Tcontent, f_Tadddate, f_Uname

    下面便是RSS生成的dotnet_rss.aspx

    <%@ Page Language="C#" ContentType="application/xml" Debug="true" ResponseEncoding="utf-8" %>
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.Data.SqlClient" %>
    <script language="C#" runat="server">
        void Page_Load(Object src, EventArgs e){
            SqlConnection myConnection = new SqlConnection();        
            try{
                myConnection.ConnectionString="server=127.0.0.1;database=BBSDB;uid=sa;pwd=''";
                myConnection.Open();
                
                SqlCommand myCommand = new SqlCommand();
                myCommand.Connection = myConnection;
                myCommand.CommandType = CommandType.StoredProcedure;
                myCommand.CommandText = "[dbo].[up_listTopic]";
                
                SqlDataReader myDataReader = myCommand.ExecuteReader();        
                        
                //-----------make head detail-----------------
                StringBuilder xmlhead = new StringBuilder();    
                xmlhead.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
                xmlhead.Append("<rss version=\"2.0\">\n");
                xmlhead.Append("\t<channel>\n");
                xmlhead.Append("\t\t<title>MyBBS RSS Channel</title>\n");
                xmlhead.Append("\t\t<link>http://192.168.0.44/thebbs</link>\n");
                xmlhead.Append("\t\t<language>zh-cn</language>\n");
                xmlhead.Append("\t\t<docs>MyBBS RSS Center</docs>\n");
                xmlhead.Append("\t\t<descrīption>Latest 20 threads of all forums</descrīption>\n");
                xmlhead.Append("\t\t<copyright>Copyright(C) MyBBS</copyright>\n");
                xmlhead.Append("\t\t<generator>none</generator>\n");
                xmlhead.Append("\t\t<lastBuildDate>" + DateTime.Now + "</lastBuildDate>\n");
                xmlhead.Append("\t\t<ttl>90</ttl>\n");
                xmlhead.Append("\t\t<image>\n");
                xmlhead.Append("\t\t\t<url>http://127.0.0.1/thebbs/smile.gif</url>\n");
                xmlhead.Append("\t\t\t<title>MyBBS</title>\n");
                xmlhead.Append("\t\t\t<link>http://127.0.0.1/thebbs</link>\n");
                xmlhead.Append("\t\t</image>\n");
                
                //-----------make item-----------------        
                StringBuilder xmlitem = new StringBuilder();
                string descrīption = "";
                int i, num;
                num = 1;
                while(myDataReader.Read()){
                    //-----------read 20 record-----------------
                    if (num > 20) break;
                    num++;
                    descrīption = myDataReader[2].ToString();
                    if (descrīption.Length < 300)
                        i = descrīption.Length;
                    else
                        i = 300;            
                    descrīption = descrīption.Substring(0, i);
                    xmlitem.Append("\t\t<item>\n");
                    xmlitem.Append("\t\t\t<title>" + myDataReader[1].ToString() + "</title>\n");
                    xmlitem.Append("\t\t\t<link>http://127.0.0.1/thebbs/topic.aspx?Tid=" + myDataReader[0].ToString() + "</link>\n");
                    xmlitem.Append("\t\t\t<descrīption><![CDATA[" + descrīption + "]]></descrīption>\n");
                    xmlitem.Append("\t\t\t<category>none</category>\n");
                    xmlitem.Append("\t\t\t<author>" + myDataReader[5].ToString() + "</author>\n");
                    xmlitem.Append("\t\t\t<pubDate>" + myDataReader[4].ToString() + "</pubDate>\n");
                    xmlitem.Append("\t\t</item>\n");
                }
                myConnection.Close();
        
                //-----------make footer-----------------
                StringBuilder xmlfooter = new StringBuilder();        
                xmlfooter.Append("\t</channel>\n</rss>");
                
                //-----------Output Data-----------------
                Response.Write(xmlhead);
                Response.Write(xmlitem);
                Response.Write(xmlfooter);
            }catch(Exception ex){

                //-----------can not find DB process-----------------
                Response.Write("<ErrorMsg>Connection Database Error...</ErrorMsg>");            
            }
        }
    </script>

    DotNET2.0可以用CodeFile将Script代码隐藏以来 Page部分如下
    <%@ Page Language="C#" ContentType="application/xml" Debug="true" ResponseEncoding="utf-8" Inherits="MyRss" CodeFile="DotNet_RSS.aspx.cs" %>
    Inherits为类名 CodeFile为隐藏代码
     
    DotNet_RSS.aspx.cs腰包含的类包如下

    using System;
    using System.Text.StringBuilder;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Data;
    using System.Data.SqlClient;
    public partial class  MyRss : Page{
            void Page_Load(Object src, EventArgs e){
                   MakeRss();
            }
            public void MakeRss(){
                   //原中dotnet_rss.aspx的代码段
            }
    }

    初始AJAX简单实例

    使用技术Javascrīpt/AJAX/ASP
    需要平台:IIS/IE or FireFox客户端

    例子:在文本框中输入E文时会给出匹配E文提示

    ajax.html 执行ajax页面

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>AJAX TEST</title>
    </head>
    <body>
        <scrīpt language="javascript">
        <!--
        var xmlHttp;
        function showHint(){                    //set execute ajax object
            var str = document.getElementById('txt1').value;
            if (str.length > 0)    {
                var url = "ajax_do.asp?q=" + str;
                document.getElementById("txtInner").innerHTML = 'Now Loading...';
                xmlHttp = GetXmlHttpObject(stateChanged);      //send ajax request
                xmlHttp.open("GET", url , true);
                xmlHttp.send(null);
            }else{
                document.getElementById("txtInner").innerHTML = "";
            }
        }
        function stateChanged(){                    //if ajax object active done Output data
            if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete"){
                document.getElementById("txtInner").innerHTML = xmlHttp.responseText;
            }
        }
        function GetXmlHttpObject(handler){        //create Ajax object function
            var ōbjXmlHttp = null;
            if (navigator.userAgent.indexOf("Opera") >= 0){
                alert("This example doesnt work in Opera");
                return;
            }
            if (navigator.userAgent.indexOf("MSIE") >= 0){
                var strName = "Msxml2.XMLHTTP";
                if (navigator.appVersion.indexOf("MSIE 5.5") >= 0){
                    strName = "Microsoft.XMLHTTP";
                }
                try{
                    ōbjXmlHttp = new ActiveXObject(strName);
                    objXmlHttp.onreadystatechange = handler;
                    return objXmlHttp;
                }catch(e){
                    alert("Error. scrīpting for ActiveX might be disabled");
                    return;
                }
            }
            if (navigator.userAgent.indexOf("Mozilla") >= 0){
                ōbjXmlHttp = new XMLHttpRequest();
                objXmlHttp.onload = handler;
                objXmlHttp.onerror = handler;
                return objXmlHttp;
            }
        }
        -->
        </script>
        <form id="Fm">
            First Name:<input type="text" id="txt1" onkeyup="showHint();">
        </form>
        <p>Suggestions: <span id="txtInner"></span></p>
    </body>
    </html>


    ajax_do.asp 处理发送的请求页面

    <%@LANGUAGE="VBscrīpt" CODEPAGE="65001"%>
    <%
    dim a(30)
    a(1)="Anna"
    a(2)="Brittany"
    a(3)="Cinderella"
    a(4)="Diana"
    a(5)="Eva"
    a(6)="Fiona"
    a(7)="Gunda"
    a(8)="Hege"
    a(9)="Inga"
    a(10)="Johanna"
    a(11)="Kitty"
    a(12)="Linda"
    a(13)="Nina"
    a(14)="Ophelia"
    a(15)="Petunia"
    a(16)="Amanda"
    a(17)="Raquel"
    a(18)="Cindy"
    a(19)="Doris"
    a(20)="Eve"
    a(21)="Evita"
    a(22)="Sunniva"
    a(23)="Tove"
    a(24)="Unni"
    a(25)="Violet"
    a(26)="Liza"
    a(27)="Elizabeth"
    a(28)="Ellen"
    a(29)="Wells"
    a(30)="Vicky"
    q=request.querystring("q")
    if len(q)>0 then
        hint=""
        for i=1 to 30
            x1=ucase(mid(q,1,len(q)))
            x2=ucase(mid(a(i),1,len(q)))
                if x1=x2 then
                    if hint="" then
                        hint=a(i)
                    else
                        hint=hint & " , " & a(i)
                    end if
                end if
        next
    end if
    if hint="" then
        response.write("<font color=#FF0000>no suggestion</font>")
    else
        response.write(hint)
    end if
    %>

    设置好路径后用浏览器访问ajax.html在文本框中输入E文....

    还可以下一个prototype.js包里面封装了ajax的功能,我们可以很方便使用它来简化代码
    prototype.js包含进ajax.html后原先的脚本代码全改成如下

    <script language="javascript">
    <!--
    function showHint(){
        var param=$('txt1').value;
        if (param.length > 0){
            $('txtInner').innerHTML='On Loading...';
            new Ajax.Updater("txtInner", 'ajax_do2.asp',{method:'get', parameters:'q='+param});
            //new Ajax.Request('ajax_do2.asp',{asynchronous:false, method:'post', postBody:'q='+param, onSuccess:handlerFunc});
        }else{
            $('txtInner').innerHTML='';
        }
    }
    -->
    </script>
    October 31

    从数据库中随机读取记录

    DB2
    SELECT *
    FROM mytable
    ORDER BY rand() fetch first 10 rows only

    MySQL
    SELECT *
    FROM mytable
    ORDER BY rand() limit 10

    PostgreSQL
    SELECT *
    FROM mytable
    ORDER BY random() limit 10

    Oracle
    SELECT *
    FROM (
    SELECT *
    FROM mytable
    ORDER BY dbms_random.value()
    )
    WHERE rownum <= 10
     注:dbms_random包需手动安装

    SQL Server
    SELECT TOP 10 *
    FROM mytable
    ORDER BY newid()
    September 23

    JSP环境设置

    JSDK+TOMCAT
    J2SDK V1.42   Download
    除按装路径外使用默认设置就可
    JSDK WinNT 设置

    “控制面板”>>>“系统”>>> “高级”>>> “环境变量”,在“系统变量”里我们可以看到系统的各个环境变量的值。双击某个变量名可以修改变量值,变量值之间用“;”隔开。我们还可以“新建”原先没有的变量。与jdk有关的有3个环境变量;“java_home”,“path”,“classpath”。如系统中“path”变量已经存在,可以直接添加新值(其它变量值不要动,防止其它程序运行异常),其它两个变量需要新建。

    • “java_home”,设置jdk的安装路径,比如“e:\java\jdk1.5”,以下简称“%java_home%”。 “e:\java\jdk1.5”为JSDK安装的目录
    • “path”,设置jdk中各个程序的路径,“%java_home%\bin;%java_home%\jre\bin;”
    • “classpath”,设置java各个类的路径,“.;%java_home%\lib;%java_home%\lib\tools.jar”。前面的“.”不可少,它代表了我们为自己的java类建立的工作路径,其它的是jdk自带的标准类库路径。

    设置好环境变量后按“确定”退出。按“win”+“r”键进入“运行”窗口,运行“cmd”进入DOS窗口,在输入“javac”后回车,如果有显示java的帮助信息,就说明环境变量设置成功。
     
    TOMCAT V5.0   Download
    TOMCAT设置

    先安装JSDK再装TOMCAT 除按装路径外使用默认设置就可

    添加环境变量“tomcat_home”值为“D:\Tomcat50”

    响“CLASSPATH”中追加值“...jsdk;%tomcat_home%\common\lib\servlet-api.jar;%tomcat_home%\common\lib\jsp-api.jar;”

    运行Configure Tomcat>>>Service Status>>>Start按扭
    启动后 再在IE的URL中输入Http://127.0.0.1:8080成功话可以看到Apache Tomcat/5.0.28页面

    TOMCAT 配置虚拟目录


    安装后默认目录为 X:\Tomcat50\webapps\ROOT

    要配置自己的虚拟目录,就要使用server.xml,该文件是一个配置文件,在Tomcat\conf目录下,使用任何文本编辑软件都能打开它,我们先找到下面一句:

    <Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" port="8080" redirectPort="8443" maxSpareThreads="75" maxThreads="150" minSpareThreads="25"></Connector>

    这里的port="8080"就是端口,我们完全可以用别的端口来代替,但不能是被系统占用的端口(0--1023),这里简单提一下。

    下面我们再往下找,会发现以下的语句:

    <Host appBase="webapps" name="localhost">

    </Host>

    在其中插入这两个语句。然后我们将该语句更改如下:

    <Context path="/myjsp" debug="0" docBase="e:/myjsp" reloadable="true">

    </Context>

    这里的path="/myjsp"就是我们就配置的虚拟目录了,以后在地址栏中输入http://localhost:8080/myjsp即可。而docBase="e:/myjsp" 则是机器本地路径,他们通过这个语句形成一个映射关系,其它照抄。

    将上面的First.jsp文件放到e:/myjsp目录下,输入http://localhost:8080/myjsp/First.jsp可看到

     Servlet 配置


    Servlet Code

    package test;
    import java.io.IOException;
    import java.io.PrintWriter;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    public class Test extends HttpServlet {
     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      PrintWriter out=response.getWriter();
      out.println("<html><body><h1>This is a servlet test.</h1></body></html>");
      out.flush();
     }
    }

    编译上面的Test.java将Test.class放到 e:\myjsp\WEB-INF\classes\test

    打开在\WEB-INF\web.xml的文件,添加servletservlet-mapping

    <?xml version="1.0" encoding="ISO-8859-1"?>

    <!DOCTYPE web-app

    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

    "http://java.sun.com/dtd/web-app_2_3.dtd">

    <web-app>

    <display-name>My Web Application</display-name>

    <description>

    A application for test.

    </description>

    <servlet>

    <servlet-name>Test</servlet-name>

    <display-name>Test</display-name>

    <description>A test Servlet</description>

    <servlet-class>test.Test</servlet-class>

    </servlet>

    <servlet-mapping>

    <servlet-name>Test</servlet-name>

    <url-pattern>/Test</url-pattern>

    </servlet-mapping>
    </web-app>

    这段话中的servlet这一段声明了你要调用的Servlet其中servlet-class为所使用的Servlet Class,而servlet-mapping则是将声明的servlet"映射"到地址/Test

     重启Tomcat后 再在IE的URL中输入Http://127.0.0.1:8080/myjsp/Test成功话可以看到This is a servlet test

    August 11

    ASP+JavaScript 两层菜单联动

    建立Table
    CREATE TABLE main_list
    ( id INT PK,
     names NAVRCHAR(20)
    )
    CREATE TABLE sub_list
    (
     id INT PK,
     mainid INT FK_main_list,
     names NVARCHAR(20)
    )

    ASP 代码

    <!--#include file="conn.asp"-->
    <%
    Dim rs, count, selclass
    set rs=server.createobject("adodb.recordset")
    %>
    <form name="Fm" method="post" action="">
    <%rs.open "select * from sub_list",conn,1,1%>
    <script language = "JavaScript">
     var onecount;
     onecount=0;
     subcat = new Array();
    <%
    count = 0
    do while not rs.eof
    %>
     subcat[<%=count%>] = new Array("<%= trim(rs("name"))%>","<%= rs("mainid")%>","<%= trim(rs("id"))%>");
    <%
    count = count + 1
    rs.movenext
    loop
    rs.close
    %>
     onecount=<%=count%>;

     function changelocation(locationid){
      document.Fm.selsubid.length = 0;

      var locationid=locationid;
      var i;
      for (i=0;i < onecount; i++){
       if (subcat[i][1] == locationid){
        document.Fm.selsubid.options[document.Fm.selsubid.length] = new Option(subcat[i][0], subcat[i][2]);
       }
      }
     }
    </script>
    <table>
     <tr>
      <td>
    <%
    rs.open "select * from main_list",conn,1,1
    if rs.eof and rs.bof then
     response.write "can't link database"
     response.end
    else
    %>
     Mian Category:
     <select name="selmainid" size="1" id="selmainid" onChange="changelocation(document.Fm.selmainid.options[document.Fm.selmainid.selectedIndex].value)">
     <option value="0" selected>==Select==</option>
    <%
    selclass=rs("id")
    do while not rs.eof
    %>
     <option value="<%=rs("id")%>"><%=trim(rs("names"))%></option>
    <%
    rs.movenext
    loop
    end if
    rs.close
    %>
     </select>
     Sub Category:
     <select name="selsubid">
    <%
    rs.open "select * from sub_list where mainid="&selclass ,conn,1,1
    if not(rs.eof and rs.bof) then
    %>
     <option selected value="0">==Select==</option>
    <% do while not rs.eof%>
     <option value="<%=rs("id")%>"><%=rs("names")%></option>
    <% rs.movenext
    loop
    end if
    rs.close
    set rs = nothing
    %>
     </select>
      </td>
     </tr>
    </table>
    </form>

    August 03

    ERA 系列列表

    era是一个风格与Gregorian Band(葛利高里乐队)接近的音乐团体,

    其灵魂人物是法国音乐家 Eric Levi。

    其中,The Mass 是法国音乐玩家Eric Levi一手策划之音乐概念计划
    ERA 2003年大碟「魔界传奇」中营造飞驰快感的视觉声效大作。

     

    专辑:ERA
    歌手姓名: eRa 
    专辑名称: ERA
    所属语言: English
    唱片公司: universal
    发行日期: 1998

    01. Ameno (Remix) 0:03:49.59
    02. Mother (Remix) 0:04:09.33
    03. Avemano 0:04:15.47
    04. Enae Volare Mezzo 0:03:48.64
    05. Misere Mani 0:04:04.21
    06. Cathar Rythm 0:03:21.02
    07. Ameno 0:04:19.02
    08. Sempire D'amor 0:01:52.23
    09. Mother 0:05:00.26
    10. Mirror 0:03:58.16
    11. Era 0:03:15.20
    12. Impera 0:04:37.58

    -----------------------------------------------------------------------------

    CD2.eRa---ERA2

     

    专辑:ERA2
    歌手姓名: eRa 
    专辑名称: eRa
    所属语言: English
    唱片公司: universal
    发行日期: 2001

    01.Omen Score
    02.Divano
    03.Devore amante
    04.Sentence
    05.Don't U
    06.Infanati
    07.Madona
    08.Hymne
    09.Misere mani
    10.In fine

    ------------------------------------------------------------------------------

    CD3.eRa--The Mass

     

    专辑:The Mass 
    歌手姓名: eRa
    专辑名称: The Mass 
    所属语言: English
    唱片公司: universal
    发行日期: 2003

    1、 The Mass
    2、 Looking For Something
    3、 Don’t Go Away
    4、 Don’t You Forget
    5、 If You Shout
    6、 Avemano Orchestral
    7、 Enae Volare
    8、 Sombre Day
    9、 Voxifera
    10、The Champions

    ----------------------------------------------------------------------------

    Special CD.eRa--The Very Best Of

     

    专辑:The Very Best Of
    歌手姓名: Era 
    专辑名称: The Very Best of
    所属语言: English
    唱片公司: universal
    发行日期: 2004年11月

     

    1. Ameno
    2. Dont Go Away
    3. The Mass
    4. Mother
    5. Misere Mani
    6. Avemano Orchestral
    7. Looking For Something
    8. Dont U
    9. Enae Volare
    10. Cathar Rhythm
    11. Divano
    12. Dont You Forget
    13. Hymne
    14. Sentence
    15. I Believe
    16. Looking For Something (Darren Tate Mix Edit)

    Ameno

    -------------------------------------
    专集: Era
    -------------------------------------

    Dori me 
    Interimo adapare dori me 
    Ameno ameno latire 
    Latiremo 
    Dori me 

    Ameno 
    Omenare imperavi ameno 
    Dimere dimere matiro 
    Matiremo 
    Ameno 

    Omenare imperavi emulari 
    Ameno 
    Omenare imperavi emulari 

    [Chorus:] 
    Ameno 
    Ameno dore 
    Ameno dori me (2x) 
    Ameno dom 
    Dori me reo 
    Ameno dori me (2x) 
    Dori me am 

    Ameno 
    Omenare imperavi ameno 
    Dimere dimere matiro 
    Matiremo 
    Ameno 

    Omenare imperavi emulari 
    Ameno 
    Omenare imperavi emulari 

    {Chorus till fade}

    July 21

    经典的月亮河

    Moon River
    Moon river, wider than a mile
    I'm crossing you in style some day
    Oh, dream maker, you heart breaker
    Wherever you're going, I'm going your way

    Two drifters, off to see the world
    There's such a lot of world to see
    We're after the same rainbow's end, waiting ,round the bend
    My Huckleberry Friend, Moon River, and me

    Moon river, wider than a mile
    I'm crossing you in style some day
    Oh, dream maker, you heart breaker
    Wherever you're going, I'm going your way

    Two drifters, off to see the world
    There's such a lot of world to see
    We're after that same rainbow's end, waiting ,round the bend
    My Huckleberry Friend, Moon River, and me

    The Mass

    -----------------------
    专集:Era The Mass
    -----------------------
    Semper crescis
    Aut decrescis
    Vita detestabilis
    Nunc obdurat
    Et tunc curat
    Ludo mentis aciem

    Nunc obdurat
    Et tunc curat
    Ludo mentis aciem
    Egestatem
    Potestatem
    Dissolvit ut glaciem

    Divano
    Divano re
    Divano blessi
    Divano blessia
    Divano blessia
    Divano
    Divano re
    Divano blessia
    Divano blessia

    Sors salutis
    Et virtutis
    Michi nunc contraria
    Est affectus
    Et defectus
    Semper in angaria
    Hac in hora
    Sine mora
    Corde pulsum tangite

    Divano...

    In divano

    Sors salutis...

    Divano...

    Hac in hora
    Sine mora
    Corde pulsum tangite
    Quod per sortem
    Sternit fortem
    Mecum omnes plangite

    DBHelper数据库访问

    DB Access Framework是开发的时候为了同一管理data access code而提高web application的ASP专用class component。

    DB Helper是server side include, 所以不用安装或登陆能直接用。放在web application上然后在要用的ASP页面用下面的code来include

    DBHelper 产生方法是和一般的class instance一样。用完后用nothing来清除。

    DB Helper提供的方法和属性是

    访问权限 方法/属性 参数表 返回类型 功能说明
    public ExecSPReturnRS spName, params, connectionString Recordset 执行DB中保存的procedure
    ExecSQLReturnRS strSQL, params, connectionString Recordset 执行SQL语句
    ExecSP spName, params, connectionString   执行DB中保存的procedure如更新操作
    ExecSQL strSQL, params, connectionString   执行SQL语句如更新操作
    BeginTrans connectionString Connection 开始transaction
    CommitTrans Connection   实行活动的transaction
    RollbackTrans Connection   回滚活动的transaction
    MakeParam PName,PType,PDirection,PSize,PValue Array Type 建立Params参数列
    GetValue params, paramName Simple Variables 参数排列中选择特定的参数
    Dispose     关闭内部的DefaultConnection,释放memory
    private collectParams cmd,argparams(params)   提取数组参数列表,做Parameter,然后把那个数据Command加上去
    DefaultConnString (这是属性string)   默认DB连接串
    DefaultConnection (这是属性Connection)   默认Connection对象

    * params为一个[N,4]的数组 例:params[0]内容为("@idx",adInteger,adParamInput,0,p_idx)

    一个使用的ExecSPReturnRS例子

    存储过程

    Create procedure TestSP2
    @Beginning_Date DateTime,
    @Ending_Date DateTime,
    @RecordCount int output
    AS
    SELECT Orders.ShippedDate, Orders.OrderID, "Order Subtotals".Subtotal,
    DATENAME(yy,ShippedDate) AS Year
    FROM Orders INNER JOIN "Order Subtotals" ON Orders.OrderID = "Order Subtotals".OrderID
    WHERE Orders.ShippedDate Between @Beginning_Date And @Ending_Date

    SELECT @RecordCount = @@rowcount

    ASP代码

    Set DBHelper = new clsDBHelper '建立dbhelper对象    
    RecordCount = 0        '记录总数

    '设置参数
    Dim paramInfo(2)
    paramInfo(0) = DBHelper.MakeParam("@Beginning_Date",adDate,adParamInput,0, "1998/01/01")
    paramInfo(1) = DBHelper.MakeParam("@Ending_Date",adDate,adParamInput,0, "1998/03/01")
    paramInfo(2) = DBHelper.MakeParam("@RecordCount",adInteger,adParamOutput,,0)

    '执行ExecSPReturnRS返回Recordset
    Set rs = DBHelper.ExecSPReturnRS("TestSP2", paramInfo, Nothing)

    '@RecordCount Output结果
    RecordCount = DBHelper.GetValue(paramInfo, "@RecordCount")

    rs.Close

    Set rs = Nothing

    DBHelper.Dispose
    Set DBHelper = Nothing