OSPF做为一种高级的链路状态型路由协议,与距离矢量型路上协议相比而言,最大的不同,就是距离矢量路由协议发送的是直接的路由条目,而链路状态型路由协议发送的不是直接的路由条目,而是各种类型的LSA(link status advertisement链路状态通告),每台链路状态型路由协议基于收到的LSA,独立运行SPF算法,从而自已计算出到各个节点的最优路由。OSPF的LSA有多种,在今天的技术专题中只详细介绍其中5种: Type-1 lsa (router isa) Type-2 lsa (network lsa) Type-3 lsa (network summary lsa) Type-4 lsa (asbr summary lsa) Type-5 lsa (as external lsa) Type-7 lsa (nssa external lsa) 下面详细看每一种LSA的包头: Router LSA Router LSA是由每个路由器产生的,如图所示: 在包头上,Router LSA的类型为1,Link State ID为始发路由器的Router ID 在数据字段 V-当始发路由器的为virtual-link的一端时,这一位置为1。 E-当始发路由器为ASBR时,这一位置为1。 B-当始发路由器为ABR时,这一位置为1。 Number of links¬¬¬-表示这个LSA描述的始发路由器的链路或接口数量。 接下来的Link ID、Link State、Link Type都是描述每一条链路的,其中Link ID和Link State都是根据Link Type的值来确定的,那么首先看一下Link Type,它描述了链路能够提供的4种连接: 对于不同的LinkType的Link ID: Link State: Number of TOS-对于某个链路的TOS metric的数量。在RFC2328中,已经不支持TOS了,但是为了保持向后的兼容性,还是提供这个字段。如果没有TOS metric则置为0x00。 Metric-就是链路的消耗值 这样Router LSA描述了每台路由器的所有直连链路或接口的数量及状态。这一类LSA只在始发的区域内洪泛。 Network LSA Network LSA是有网段的DR产生的,通告了一个多路访问的网段以及附着在这个网段上的所有路由器,当然包括DR自己。如图: Network LSA的Link State ID为DR上属于该网段的接口的IP地址 Network Mask-本网段使用的地址或子网掩码 Attached Router-所有附着在本网段的路由器的Router ID以及DR的Router ID。 同Router LSA一样,Network LSA只能在始发区域内洪泛。 Network and ASBR Summary LSAs Network Summary LSA的类型为3,ASBR Summary LSA的类型为4,这两种LSA具有统一的格式,唯一不同的就是Link State ID。这2种LSA都是由ABR产生,Network Summary LSA通告本AS内其他区域的网段(包括缺省路由器),进入本区域,ASBR Summary LSA通告ASBR的网段进入这个区域,其实上也就是告诉区域内路由器如何到达ASBR。这2种LSA都是只能被通告进一个区域。 如图: 类型3的LSA的Link State ID为所通告网段的IP地址或子网,类型4的LSA的Link State ID为所通过ASBR的Router ID。 Network Mask-类型3 的LSA所通告网段的子网掩码,对于类型4,这个字段没有意义,置为0.0.0.0。如果类型3通告的是缺省路由,则Link State ID和Network Mask字段都为0.0.0.0 Metric-到达目的网段的消耗值 Autonomous System External LSA 如图: AS External LSAs,是由ASBR始发的,通告到达OSPF自治系统外的目标网段的路由,也包括到达外部目标网段的缺省路由。这些LSAs只能被洪泛进非末端区域,也就是末端区域不接收外部路由。 这一类LSA的类型为5,Link State ID为目标网段的IP地址。 Network Mask-所通告目标网段的地址或子网掩码,若通告的是缺省路由,则Link State ID和Network Mask都为0.0.0.0 E-外部Metric比特位,标识OSPF2种外部路由中的一种。若E-bit位置为1,则Metric的类型为E2,若E-bit位置为0,则Metric的类型为E1。E1与E2的区别是,E2的metric值只计算ASBR设置的外部路由的metric,不计算OSPF自治系统内路径上的metric值,而E1是在ASBR设置的外部路由的metric值的基础上加上所经过的OSPF自治系统内路径上的metric得到最后的metric值。 Metric-由ASBR设置的外部路由的metric值 Forwarding Address-到达目标网段所需要转发的下一跳,若下一跳就是ASBR,则置为0.0.0.0 External Route Tag-外部路由标签,这个字段对于OSPF协议本身来说是没有用的,而是用来做路由管理的。 NSSA External LSA NSSA External LSA是由NSSA区域的ASBR产生的,它的包头与AS External LSA除了Forwarding Address 外,完全一样。而且不象As External LSA洪泛到整个OSPF自治系统,NSSA External LSA只在它始发的NSSA区域内洪泛。 如图: NSSA External LSA的类型为7,除了Forwarding Address外,其他字段与类型5的LSA完全一样。 Forwarding Address,若NSSA的ASBR与邻接自治域之间的网段被通告为内部路由,则到达外部目标网段的下一跳为该网段。若该网段没有被通告为内部路由,则下一跳为ASBR的Router ID。
E1知识点总结 1、一条E1是2.048M的链路,用PCM编码。 2、一个E1的帧长为256个bit,分为32个时隙,一个时隙为8个bit。 3、每秒有8k个E1的帧通过接口,即8K*256=2048kbps。 4、每个时隙在E1帧中占8bit,8*8k=64k,即一条E1中含有32个64K。 E1帧结构 E1有成帧,成复帧与不成帧三种方式。在成帧的E1中第0时隙用于传输帧同步数据,其余31个时隙可以用于传输有效数据;在成复帧的E1中,除了第0时隙外,第16时隙是用于传输信令的,只有第1到15,第17到第31共30个时隙可用于传输有效数据;而在不成帧的E1中,所有32个时隙都可用于传输有效数据. 一. E1基础知识 E1信道的帧结构简述 在E1信道中,8bit组成一个时隙(TS),由32个时隙组成了一个帧(F),16个 帧组成一个复帧(MF)。在一个帧中,TS0主要用于传送帧定位信号(FAS)、 CRC-4(循环冗余校验)和对端告警指示,TS16主要传送随路信令(CAS)、复帧定 位信号和复帧对端告警指示,TS1至TS15和TS17至TS31共30个时隙传送话音或数据 等信息。我们称TS1至TS15和TS17至TS31为“净荷”,TS0和TS16为“开销”。 如果采用带外公共信道信令(CCS),TS16就失去了传送信令的用途,该时隙也可用来传送信息信号,这时帧结构的净荷为TS1至TS31,开销只有TS0了。 由PCM编码介绍E1: 由PCM编码中E1的时隙特征可知,E1共分32个时隙TS0-TS31。每个时隙为64K,其中TS0为被帧同步码,Si, Sa4, Sa5, Sa6,Sa7,A比特占用, 若系统运用了CRC校验,则Si比特位置改传CRC校验码。 TS16为信令时隙, 当使用到信令(共路信令或随路信令)时,该时隙用来传输信令, 用户不可用来传输数据。所以2M的PCM码型有 ① PCM30 : PCM30用户可用时隙为30个, TS1-TS15, TS17-TS31。TS16传送信令,无CRC校验。 ② PCM31: PCM30用户可用时隙为31个, TS1-TS15, TS16-TS31。TS16不传送信令,无CRC校验。 ③ PCM30C: PCM30用户可用时隙为30个, TS1-TS15, TS17-TS31。TS16传送信令,有CRC校验。 ④ PCM31C: PCM30用户可用时隙为31个, TS1-TS15, TS16-TS31。TS16不传送信令,有CRC校验。 CE1,就是把2M的传输分成了30个64K的时隙,一般写成N*64, 你可以利用其中的几个时隙,也就是只利用n个64K,必须接在ce1/pri上。 CE1----最多可有31个信道承载数据 timeslots 1----31 timeslots 0 传同步 二. 接口 G.703非平衡的75 ohm,平衡的120 ohm2种接口 三. 使用E1有三种方法, 1,将整个2M用作一条链路,如DDN 2M; 2,将2M用作若干个64k及其组合,如128K,256K等,这就是CE1; 3,在用作语音交换机的数字中继时,这也是E1最本来的用法,是把一条E1作为32个64K来用,但是时隙0和时隙15是用作signaling即信令的,所以一条E1可以传30路话音。PRI就是其中的最常用的一种接入方式,标准叫PRA信令。 用2611等的广域网接口卡,经V.35-G.703转换器接E1线。这样的成本应该比E1卡低的 目前DDN的2M速率线路通常是经HDSL线路拉至用户侧. E1可由传输设备出的光纤拉至用户侧的光端机提供E1服务. 四. 使用注意事项 E1接口对接时,双方的E1不能有信号丢失/帧失步/复帧失步/滑码告警,但是双方在E1接口参数上必须完全一致,因为个别特性参数的不一致,不会在指示灯或者告警台上有任何告警,但是会造成数据通道的不通/误码/滑码/失步等情况。这些特性参数主要有;阻抗/ 帧结构/CRC4校验,阻有75ohm和120ohm两种,帧结构有PCM31/PCM30/不成帧三种;在新桥节点机中将PCM31和PCM30分别描述为CCS和CAS,对接时要告诉网管人员选择CCS,是否进行CRC校验可以灵活选择,关键要双方一致,这样采可保证物理层的正常。 五. 问题 : questions: : 1. E1 与 CE1是由谁控制,电信还是互连的两侧的用户设备?用户侧肯定要求支持他们 ,电信又是如何 分别实现的。 首先由电信决定,电信可提供E1和CE1两种线路,但一般用户的E1线路都是CE1,除非你特别要只用E1,然后才由你的设备所决定,CE1可以当E1用,但E1却不可以作CE1。 : 2. CE1 是32个时隙都可用是吧? CE1的0和16时隙不用,0是传送同步号,16传送控制命令,实际能用的只有30个时隙1-15,16-30 : 3. E1/CE1/PRI又是如何区分的和通常说的2M的关系。和DDN的2M又如何关联啊? E1 和CE1 都是E1线路标准,PRI是ISDN主干线咱,30B+D,DDN的2M是透明线路你可以他上面跑任何协议。 E1和CE1的区别,当然可不可分时隙了。 : 4. E1/CE1/PRI与信令、时隙的关系 E1,CE1,都是32时隙,30时隙,0、16分别传送同步信号和控制信今,PRI采用30B+D ,30B传数据,D信道传送信令, E1都是CAS结构,叫带内信令,PRI信令与数据分开传送,即带外信令。 : 5. CE1可否接E1。 CE1 和E1 当然可以互联。但CE1必需当E1用,即不可分时隙使用。 : 6. 为实现利用CE1实现一点对多点互连,此时中心肯定是2M了,各分支速率是 N*64K<2M,分支物理上怎么接呢? 电信如何控制电路的上下和分开不同地点呢? 在你设备上划分时隙,然到在电信的节点上也划分一样同样的时隙顺序,电信 只需要按照你提供的时隙顺序和分支地点,将每个对应的时隙用DDN线路传到对应 分支点就行了。 : 7.CE1端口能否直接连接E1电缆,与对端路由器的E1端口连通 : .................(以下省略) 不行 8.Cisco 7000系列上的ME1与Cisco 2600/3600上的E1、 CE1有什么区别? 答 : Cisco 7000上的ME1可配置为E1、 CE1, 而Cisco 2600/3600上的E1、 CE1仅支持自己的功能。 六. 配置 补充: 光端机用法: 光纤---光端机--同轴线---G703转v35转换器--同步串口 or BNC-DB15,BNC-RJ45 --- CE1
实验拓扑: R1——R7——R3 分别用串口连接 配置如下: R7: hostname r7 interface Loopback0 ip address 116.83.25.1 255.255.255.0 interface Loopback1 ip address 116.83.26.1 255.255.255.0 ! interface Ethernet0 no ip address ! interface Serial0 ip address 192.168.54.5 255.255.255.252 encapsulation ppp no fair-queue ! interface Serial1 ip address 192.168.54.1 255.255.255.252 encapsulation ppp ! router bgp 15210 network 192.168.54.0 neighbor 192.168.54.2 remote-as 15210 neighbor 192.168.54.2 route-reflector-client 配置充当反射客户端的每个邻居. neighbor 192.168.54.6 remote-as 15210 建立BGP对等体关系 neighbor 192.168.54.6 route-reflector-client no auto-summary ! R2: hostname r2 interface Loopback0 ip address 10.1.1.1 255.255.255.0 ! Router bgp 15210 bgp log-neighbor-changes network 10.1.1.0 mask 255.255.255.0 network 192.168.54.0 mask 255.255.255.0 neighbor 192.168.54.1 remote-as 15210 no auto-summary R3: router bgp 15210 no synchronization bgp log-neighbor-changes network 192.168.54.0 mask 255.255.255.0 neighbor 192.168.54.5 remote-as 15210 no auto-summary
802.1x验证过程 1.当用户有上网需求时打开802.1X客户端程序,输入用户名和口令,发起连接请求。此时客户端程序将发出请求认证的报文给交换机,启动一次认证过程。 如下: Frame 90 (64 bytes on wire, 64 bytes captured) Arrival Time: Nov 27, 2006 16:27:33.446030000 Time delta from previous packet: 3.105345000 seconds Time since reference or first frame: 5.082965000 seconds Frame Number: 90 Packet Length: 64 bytes Capture Length: 64 bytes Ethernet II, Src: 00:e0:4c:d7:65:cd, Dst: 01:80:c2:00:00:03 Destination: 01:80:c2:00:00:03 (Spanning-tree-(for-bridges)_03) Source: 00:e0:4c:d7:65:cd (RealtekS_d7:65:cd) Type: 802.1X Authentication (0x888e) Trailer: A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5... Frame check sequence: 0xa5a5a5a5 (incorrect, should be 0xcc6d5b40) 802.1x Authentication Version: 1 Type: Start (1) Length: 0 2.交换机在收到请求认证的数据帧后,将发出一个EAP-Request/Identitybaowe请求帧要求客户端程序发送用户输入的用户名。 Frame 91 (64 bytes on wire, 64 bytes captured) Arrival Time: Nov 27, 2006 16:27:33.447236000 Time delta from previous packet: 0.001206000 seconds Time since reference or first frame: 5.084171000 seconds Frame Number: 91 Packet Length: 64 bytes Capture Length: 64 bytes Ethernet II, Src: 00:03:0f:01:3a:5a, Dst: 00:e0:4c:d7:65:cd Destination: 00:e0:4c:d7:65:cd (RealtekS_d7:65:cd) Source: 00:03:0f:01:3a:5a (DigitalC_01:3a:5a) Type: 802.1X Authentication (0x888e) Trailer: A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5... Frame check sequence: 0xa5a5a5a5 (incorrect, should be 0x7d263869) 802.1x Authentication Version: 1 Type: EAP Packet (0) Length: 5 Extensible Authentication Protocol Code: Request (1) Id: 1 Length: 5 Type: Identity [RFC3748] (1) 3.客户端程序响应交换机的请求,将包含用户名信息的一个EAP-Response/Identity送给交换机,交换机将客户端送来的数据帧经过封包处理后生成RADIUS Access-Request报文送给认证服务器进行处理。 Frame 148 (77 bytes on wire, 77 bytes captured) Arrival Time: Nov 27, 2006 16:27:36.446199000 Time delta from previous packet: 2.998963000 seconds Time since reference or first frame: 8.083134000 seconds Frame Number: 148 Packet Length: 77 bytes Capture Length: 77 bytes Ethernet II, Src: 00:e0:4c:d7:65:cd, Dst: 01:80:c2:00:00:03 Destination: 01:80:c2:00:00:03 (Spanning-tree-(for-bridges)_03) Source: 00:e0:4c:d7:65:cd (RealtekS_d7:65:cd) Type: 802.1X Authentication (0x888e) 802.1x Authentication Version: 1 Type: EAP Packet (0) Length: 59 Extensible Authentication Protocol Code: Response (2) Id: 1 Length: 13 Type: Identity [RFC3748] (1) Identity (8 bytes): 03051020 4.认证服务器收到交换机转发上来的用户名信息后,将该信息与数据库中的用户名表相比对,找到该用户名对应的口令信息,用随机生成的一个加密字Challenge对它进行加密处理(MD5),通过接入设备将RADIUS Access-Challenge报文发送给客户端,其中包含有EAP-Request/MD5-Challenge。 Frame 154 (64 bytes on wire, 64 bytes captured) Arrival Time: Nov 27, 2006 16:27:36.567003000 Time delta from previous packet: 0.120804000 seconds Time since reference or first frame: 8.203938000 seconds Frame Number: 154 Packet Length: 64 bytes Capture Length: 64 bytes Ethernet II, Src: 00:03:0f:01:3a:5a, Dst: 00:e0:4c:d7:65:cd Destination: 00:e0:4c:d7:65:cd (RealtekS_d7:65:cd) Source: 00:03:0f:01:3a:5a (DigitalC_01:3a:5a) Type: 802.1X Authentication (0x888e) Trailer: A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5... Frame check sequence: 0xa5a5a5a5 (incorrect, should be 0x4ec1ac73) 802.1x Authentication Version: 1 Type: EAP Packet (0) Length: 22 Extensible Authentication Protocol Code: Request (1) Id: 2 Length: 22 Type: MD5-Challenge [RFC3748] (4) Value-Size: 16 Value: 1CBFEE2149E38D2928DABB4772D285EB 5.客户端收到EAP-Request/MD5-Challenge报文后,用该加密字对口令部分进行加密处理(MD5)给交换机发送在EAP-Response/MD5-Challenge回应,交换机将Challenge,Challenged Password和用户名一起送到RADIUS 服务器进行认证。 Frame 199 (94 bytes on wire, 94 bytes captured) Arrival Time: Nov 27, 2006 16:27:39.446161000 Time delta from previous packet: 2.879158000 seconds Time since reference or first frame: 11.083096000 seconds Frame Number: 199 Packet Length: 94 bytes Capture Length: 94 bytes Ethernet II, Src: 00:e0:4c:d7:65:cd, Dst: 01:80:c2:00:00:03 Destination: 01:80:c2:00:00:03 (Spanning-tree-(for-bridges)_03) Source: 00:e0:4c:d7:65:cd (RealtekS_d7:65:cd) Type: 802.1X Authentication (0x888e) 802.1x Authentication Version: 1 Type: EAP Packet (0) Length: 76 Extensible Authentication Protocol Code: Response (2) Id: 2 Length: 30 Type: MD5-Challenge [RFC3748] (4) Value-Size: 16 Value: CBAC378ABB609123D2BB412840AEC614 Extra data (8 bytes): 3033303531303230 6.认证服务器将送上来的加密后的口令信息和其自己经过加密运算后的口令信息进行对比,判断用户是否合法,然后回应认证成功/失败报文到接入设备。如果认证成功,则向交换机发出打开端口的指令,允许用户的业务流通过端口访问网络。否则,保持交换机端口的关闭状态,只允许认证信息数据通过。 Frame 205 (243 bytes on wire, 243 bytes captured) Arrival Time: Nov 27, 2006 16:27:39.632706000 Time delta from previous packet: 0.186545000 seconds Time since reference or first frame: 11.269641000 seconds Frame Number: 205 Packet Length: 243 bytes Capture Length: 243 bytes Ethernet II, Src: 00:03:0f:01:3a:5a, Dst: 00:e0:4c:d7:65:cd Destination: 00:e0:4c:d7:65:cd (RealtekS_d7:65:cd) Source: 00:03:0f:01:3a:5a (DigitalC_01:3a:5a) Type: 802.1X Authentication (0x888e) 802.1x Authentication Version: 1 Type: EAP Packet (0) Length: 225 Extensible Authentication Protocol Code: Success (3) Id: 0 Length: 4
SSO Operation SSO is supported in Cisco IOS Release 12.2(20)EWA and later releases. When a redundant supervisor engine runs in SSO mode, the redundant supervisor engine starts up in a fully-initialized state and synchronizes with the persistent configuration and the running configuration of the active supervisor engine. It subsequently maintains the state on the protocols listed below, and all changes in hardware and software states for features that support stateful switchover are kept in sync. Consequently, it offers zero interruption to Layer 2 sessions in a redundant supervisor engine configuration. Because the redundant supervisor engine recognizes the hardware link status of every link, ports that were active before the switchover will remain active, including the uplink ports. However, because uplink ports are physically on the supervisor engine, they will be disconnected if the supervisor engine is removed. If the active supervisor engine fails, the redundant supervisor engine become active. This newly active supervisor engine uses existing Layer 2 switching information to continue forwarding traffic. Layer 3 forwarding will be delayed until the routing tables have been repopulated in the newly active supervisor engine. SSO supports stateful switchover of the following Layer 2 features. The state of these features is preserved between both the active and redundant supervisor engines: • 802.3 • 802.3u • 802.3x (Flow Control) • 802.3ab (GE) • 802.3z (Gigabit Ethernet including CWDM) • 802.3ad (LACP) • 802.1p (Layer 2 QoS) • 802.1q • 802.1X (Authentication) • 802.1D (Spanning Tree Protocol) • 802.3af (Inline power) • PAgP • VTP • Dynamic ARP Inspection • DHCP snooping • IP source guard • IGMP snooping (versions 1 and 2) • DTP (802.1q and ISL) • MST • PVST+ • Rapid-PVST • PortFast/UplinkFast/BackboneFast • BPDU guard and filtering • Voice VLAN • Port security • Unicast MAC filtering • ACL (VACLS, PACLS, RACLS) • QOS (DBL) • Multicast storm control/broadcast storm control SSO is compatible with the following list of features. However, the protocol database for these features is not synchronized between the redundant and active supervisor engines: • 802.1Q tunneling with Layer 2 Protocol Tunneling (L2PT) • Baby giants • Jumbo frame support • CDP • Flood blocking • UDLD • SPAN/RSPAN • NetFlow The following features are learned on the redundant supervisor engine if the SSO feature is enabled: • All Layer 3 protocols on Catalyst 4500 series switches (Switch Virtual Interfaces)
一序列号查询总表 设备型号 机箱序列号查看命令 板卡序列号查看命令 Gsr 12000 show gsr chassis-info Show diag Cisco 7500 show rsp chassis Show diag Cisco 7200 show c7200 Show diag Catalyst 6500 show version/show idp Show module AS5800 show nitro Show diag AS5300 show VER Show diag Catalyst 4000 show version Show module 二、查询命令输出说明 2.1 GSR 12000 路由器 机箱序列号查询: 机箱号可以通过show gsr chassis-info命令显示出机箱序列号。输出如下所示: Backplane NVRAM [version 0x20] Contents - Chassis: type 12016 Fab Ver: 4 Chassis S/N: TBA04520710---------------------------机箱序列号 PCA: 73-4214-4 rev: A0 dev: 4759 HW ver: 1.0 Backplane S/N: TBC04490778 MAC Addr: base 0004.6DA5.7C00 block size: 1024 RMA Number: 0x00-0x00-0x00 code: 0x00 hist: 0x002. 板卡序列号查询板卡序列号可以通过 show diag B-XZ-R1#show diag 15 SLOT 15 (RP/LC 15): 3 Port Gigabit Ethernet MAIN: type 68, 800-6376-01 rev E0 dev 0 HW config: 0x00 SW key: 00-00-00 PCA: 73-4775-02 rev E0 ver 2 HW version 2.0 S/N CAB0443FA99-------------------------板卡序列号 MBUS: Embedded Agent Test hist: 0x00 RMA#: 00-00-00 RMA hist: 0x00 DIAG: Test count: 0x00000000 Test results: 0x00000000 FRU: Linecard/Module: 3GE-GBIC-SC= Route Memory: MEM-GRP/LC-256= Packet Memory: MEM-LC1-PKT-512= L3 Engine: 2 - Backbone OC48 (2.5 Gbps) MBUS Agent Software version 01.50 (RAM) (ROM version is 02.00) Using CAN Bus A 以上输出加重部分为15板卡的序列号 2.2 Cisco 7500路由器1. 机箱序列号查询:机箱序列号可以通过show rsp chassis得出: show rsp chassis-info Backplane NVRAM(ver 1) contents: Chassis model: 0x01 Chassis S/N: 50014400-----------------------------机箱序列号 MAC base: 0060.5C51.1A00 MAC block size: 1024 RMA failure: 0 RMA number: 0 Manufactured Date: 96 12 102. 板卡序列号查询板卡序列号可以通过 show diag 7200VXR>show c7200 C7206VXR CPU EEPROM:Hardware Revision : 1.0 Top Assy. Part Number : 800-18896-05Part Number : 73-6988-05Board Revision : B0PCB Serial Number : 29630271------------------------机箱序列号RMA History : 00Fab Version : 05Fab Part Number : 28-5082-05Product Number : NPE-G1Deviation Number : 0-02. 板卡序列号查询: Cisco7200# show diag 4 Slot 4: Ethernet port adapter, 4 ports Port adapter is analyzed Port adapter insertion time 2d09h ago Hardware revision 1.12 Board revision A0 Serial number 4294967295 ----------------------板卡序列号 Part number 73-1556-04 Test history 0x0 RMA number 00-00-00 EEPROM format version 1 EEPROM contents (hex): 0x20: 01 02 01 01 FF FF FF FF 49 06 14 04 00 00 00 00 0x30: 50 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF2.4 Catalyst 6500 交换机1. 机箱序列号查询:机箱序列号和板卡序列号可以通过show version获得:Console> (enable) show version WS-C6506 Software, Version NmpSW: 5.5(3) Copyright © 1995-2000 by Cisco Systems NMP S/W compiled on Sep 8 2000, 17:39:10 System Bootstrap Version: 5.3(1Model: WS-C6506 Serial #: TBA04321604-----------------机箱序列号 Mod Port Model Serial # Versions --- ---- ------------------- ----------- -------------------------------------- 2 WS-X6K-SUP2-2GE SAD04300J7L Hw : 3.2---------板卡序列号 Fw : 5.3(1) Fw1: 5.1(1)CSX Sw : 5.5(3) Sw1: 5.5(3) WS-F6K-PFC SAD042604HE Hw : 1.1 3 16 WS-X6548-GE-TX SAD1234567 -----------------板卡序列号 Fw : 5.4(2) Sw : 5.5(3) 15 1 WS-F6K-MSFC SAD0428191K Hw : 1.4 Fw : 12.1(2)E, Sw : 12.1(2)E,2. 板卡序列号查询:板卡的序列号也可以通过show modle命令获得: Cat6500 (enable) show module Mod Slot Ports Module-Type Model Sub Status --- ---- ----- ------------------------- ------------------- --- -------- 1 1 2 1000BaseX Supervisor WS-X6K-SUP1A-2GE yes ok Mod Module-Name Serial-Num --- -------------------- ----------- 1 SAD040200B3---------------------------------------板卡序列号 2.5 AS5800 访问服务器1. 机箱序列号查询:机箱序列号可以通过show tec中找到show context all 中的show nitro项目中获得:------------------ show context all ------------------------------------ show nitro ------------------Nitro Network IO Interrupt Throttling:throttle count=31, timer count=31active=0, configured=1netint usec=3999, netint mask usec=200Nitro CPU EEPROM: (format version 1)Hardware version 3.2, Board revision J0Serial number: SAD041103L7, Part number 800-02553-04RMA history 0,0 (0x0), RMA number 00-00-00 EEPROM contents (hex): 0x00: 01 00 01 00 49 00 08 62 07 58 00 00 00 00 00 00 0x10: 43 41 42 30 34 30 37 37 35 39 35 00 00 00 00 00 Nitro Backplane EEPROM: (format version 5) Hardware version: 1.0 Board revision: A0 Part number: 73-2409-03 Fab version: 2 Deviation: 0 Serial number: SAA04031280 RMA history: 0,0 (0x0) RMA number: 00-00-00 RMA failure code: 0x0 MAC address base: 0001.6458.7c00 Block size: 128 Chassis serial number: CAE04115N5R------------------机箱序列号 EEPROM contents (hex): 0x00: 05 01 01 07 00 49 00 09 69 03 50 00 00 00 02 00 0x10: 53 41 41 30 34 30 33 31 32 38 30 00 00 00 00 00 序列号查询总表 设备型号 机箱序列号查看命令[/b] 板卡序列号查看命令[/b] Gsr 12000 show gsr chassis-info Show diag Cisco 7500[/b] show rsp chassis Show diag Cisco 7200[/b] show c7200 Show diag Catalyst 6500 show version Show module AS5800 show nitro Show diag AS5300 show VER Show diag Catalyst 4000 show version Show module 二、查询命令输出说明 2.1 GSR 12000 路由器 1. 机箱序列号查询:[/b] [/b] 机箱号可以通过[b]show gsr chassis-info命令显示出机箱序列号。输出如下所示:[/b] Backplane NVRAM [version 0x20] Contents - Chassis: type 12016 Fab Ver: 4 Chassis S/N: TBA04520710---------------------------机箱序列号[/b] PCA: 73-4214-4 rev: A0 dev: 4759 HW ver: 1.0 Backplane S/N: TBC04490778 MAC Addr: base 0004.6DA5.7C00 block size: 1024 RMA Number: 0x00-0x00-0x00 code: 0x00 hist: 0x00 2. 板卡序列号查询[/b] 板卡序列号[/b]可以通过 show diag 命令获得: B-XZ-R1#show diag 15 SLOT 15 (RP/LC 15): 3 Port Gigabit Ethernet MAIN: type 68, 800-6376-01 rev E0 dev 0 HW config: 0x00 SW key: 00-00-00 PCA: 73-4775-02 rev E0 ver 2 HW version 2.0 S/N CAB0443FA99-------------------------板卡序列号[/b] MBUS: Embedded Agent Test hist: 0x00 RMA#: 00-00-00 RMA hist: 0x00 DIAG: Test count: 0x00000000 Test results: 0x00000000 FRU: Linecard/Module: 3GE-GBIC-SC= Route Memory: MEM-GRP/LC-256= Packet Memory: MEM-LC1-PKT-512= L3 Engine: 2 - Backbone OC48 (2.5 Gbps) MBUS Agent Software version 01.50 (RAM) (ROM version is 02.00) Using CAN Bus A 以上输出加重部分为15板卡的序列号[/b] 2.2 Cisco 7500路由器[/b] 1. 机箱序列号查询:[/b] 机箱序列号[/b]可以通过show rsp chassis得出: [/b] [b]show rsp chassis-info Backplane NVRAM(ver 1) contents: Chassis model: 0x01 Chassis S/N: 50014400-----------------------------[b][u]机箱序列号[/b][/u][/b] MAC base: 0060.5C51.1A00 MAC block size: 1024 RMA failure: 0 RMA number: 0 Manufactured Date: 96 12 10 2. 板卡序列号查询[/b] 板卡序列号[/b]可以通过 show diag 命令获得: Router# show diag 10 Slot 10: Physical slot 10, ~physical slot 0x5, logical slot 10, CBus 0 Microcode Status 0x4 Master Enable, LED, WCS Loaded Board is analyzed Pending I/O Status:None EEPROM format version 1 VIP2 controller, HW rev 2.04, board revision D0 Serial number:03709026 -------------------------------板卡序列号[/b] Part number:73-1684-03 Test history:0x00 RMA number:00-00-00 Flags:cisco[/b] 7000 board; 7500 compatible EEPROM contents (hex): 0x20:01 15 02 04 00 38 98 62 49 06 94 03 00 00 00 00 0x30:68 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Slot database information: Flags:0x4 Insertion time:0x389930C (00:04:07 ago) Controller Memory Size:8 MBytes DRAM, 512 KBytes SRAM 2.3 Cisco 7200路由器:[/b] 1. 机箱序列号查询:[/b] [/b] 机箱序列号可以通过show C7200获得: 7200VXR>show c7200 C7206VXR CPU EEPROM: Hardware Revision : 1.0 Top Assy. Part Number : 800-18896-05 Part Number : 73-6988-05 Board Revision : B0 PCB Serial Number : 29630271------------------------机箱序列号[/b] RMA History : 00 Fab Version : 05 Fab Part Number : 28-5082-05 Product Number : NPE-G1 Deviation Number : 0-0 2. 板卡序列号查询:[/b] [/b] Cisco7200# show diag 4 Slot 4: Ethernet port adapter, 4 ports Port adapter is analyzed Port adapter insertion time 2d09h ago Hardware revision 1.12 Board revision A0 Serial number 4294967295 ----------------------板卡序列号 [/b] Part number 73-1556-04 Test history 0x0 RMA number 00-00-00 EEPROM format version 1 EEPROM contents (hex): 0x20: 01 02 01 01 FF FF FF FF 49 06 14 04 00 00 00 00 0x30: 50 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF 2.4 Catalyst 6500 交换机 1. 机箱序列号查询:[/b] 机箱序列号[/b]和板卡序列号[/b]可以通过show version获得: Console> (enable) show version WS-C6506 Software, Version NmpSW: 5.5(3) Copyright © 1995-2000 by Cisco[/b] Systems NMP S/W compiled on Sep 8 2000, 17:39:10 System Bootstrap Version: 5.3(1 Model: WS-C6506 Serial #: TBA04321604-----------------机箱序列号[/b] Mod Port Model Serial # Versions --- ---- ------------------- ----------- -------------------------------------- 2 WS-X6K-SUP2-2GE SAD04300J7L Hw : 3.2---------板卡序列号[/b] Fw : 5.3(1) Fw1: 5.1(1)CSX Sw : 5.5(3) Sw1: 5.5(3) WS-F6K-PFC SAD042604HE Hw : 1.1 3 16 WS-X6548-GE-TX SAD1234567 -----------------板卡序列号[/b] Fw : 5.4(2) Sw : 5.5(3) 15 1 WS-F6K-MSFC SAD0428191K Hw : 1.4 Fw : 12.1(2)E, Sw : 12.1(2)E, 2. 板卡序列号查询:[/b] 板卡的序列号[/b]也可以通过show modle命令获得: Cat6500 (enable) show module Mod Slot Ports Module-Type Model Sub Status --- ---- ----- ------------------------- ------------------- --- -------- 1 1 2 1000BaseX Supervisor WS-X6K-SUP1A-2GE yes ok Mod Module-Name Serial-Num --- -------------------- ----------- 1 SAD040200B3---------------------------------------板卡序列号[/b] 2.5 AS5800 访问服务器 1. 机箱序列号查询:[/b] 机箱序列号[/b]可以通过show tec中找到show context all 中的show nitro项目中获得: ------------------ show context all ------------------ ------------------ show nitro ------------------ Nitro Network IO Interrupt Throttling: throttle count=31, timer count=31 active=0, configured=1 netint usec=3999, netint mask usec=200 Nitro CPU EEPROM: (format version 1) Hardware version 3.2, Board revision J0 Serial number: SAD041103L7, Part number 800-02553-04 RMA history 0,0 (0x0), RMA number 00-00-00 EEPROM contents (hex): 0x00: 01 00 01 00 49 00 08 62 07 58 00 00 00 00 00 00 0x10: 43 41 42 30 34 30 37 37 35 39 35 00 00 00 00 00 Nitro Backplane EEPROM: (format version 5) Hardware version: 1.0 Board revision: A0 Part number: 73-2409-03 Fab version: 2 Deviation: 0 Serial number: SAA04031280 RMA history: 0,0 (0x0) RMA number: 00-00-00 RMA failure code: 0x0 MAC address base: 0001.6458.7c00 Block size: 128 Chassis serial number: CAE04115N5R------------------机箱序列号[/b] [b][/b] EEPROM contents (hex): 0x00: 05 01 01 07 00 49 00 09 69 03 50 00 00 00 02 00 0x10: 53 41 41 30 34 30 33 31 32 38 30 00 00 00 00 00
//write by wenhui.org using System; using System.IO; using System.Text; using System.Collections; namespace PDFGenerator { public class PDFGenerator { static float pageWidth = 594.0f; static float pageDepth = 828.0f; static float pageMargin = 30.0f; static float fontSize = 20.0f; static float leadSize = 10.0f; static StreamWriter pPDF=new StreamWriter("E:\\myPDF.pdf"); static MemoryStream mPDF= new MemoryStream(); static void ConvertToByteAndAddtoStream(string strMsg) { Byte[] buffer=null; buffer=ASCIIEncoding.ASCII.GetBytes(strMsg); mPDF.Write(buffer,0,buffer.Length); buffer=null; } static string xRefFormatting(long xValue) { string strMsg =xValue.ToString(); int iLen=strMsg.Length; if (iLen<10) { StringBuilder s=new StringBuilder(); int i=10-iLen; s.Append('0',i); strMsg=s.ToString() + strMsg; } return strMsg; } static void Main(string[] args) { ArrayList xRefs=new ArrayList(); //Byte[] buffer=null; float yPos =0f; long streamStart=0; long streamEnd=0; long streamLen =0; string strPDFMessage=null; //PDF文档头信息 strPDFMessage="%PDF-1.1\n"; ConvertToByteAndAddtoStream(strPDFMessage); xRefs.Add(mPDF.Length); strPDFMessage="1 0 obj\n"; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage="<< /Length 2 0 R >>\n"; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage="stream\n"; ConvertToByteAndAddtoStream(strPDFMessage); ////////PDF文档描述 streamStart=mPDF.Length; //字体 strPDFMessage="BT\n/F0 " + fontSize +" Tf\n"; ConvertToByteAndAddtoStream(strPDFMessage); //PDF文档实体高度 yPos = pageDepth - pageMargin; strPDFMessage=pageMargin + " " + yPos +" Td\n" ; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage= leadSize+" TL\n" ; ConvertToByteAndAddtoStream(strPDFMessage); //实体内容 strPDFMessage= "(http://www.wenhui.org)Tj\n" ; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage= "ET\n"; ConvertToByteAndAddtoStream(strPDFMessage); streamEnd=mPDF.Length; streamLen=streamEnd-streamStart; strPDFMessage= "endstream\nendobj\n"; ConvertToByteAndAddtoStream(strPDFMessage); //PDF文档的版本信息 xRefs.Add(mPDF.Length); strPDFMessage="2 0 obj\n"+ streamLen + "\nendobj\n"; ConvertToByteAndAddtoStream(strPDFMessage); xRefs.Add(mPDF.Length); strPDFMessage="3 0 obj\n<</Type/Page/Parent 4 0 R/Contents 1 0 R>>\nendobj\n"; ConvertToByteAndAddtoStream(strPDFMessage); xRefs.Add(mPDF.Length); strPDFMessage="4 0 obj\n<</Type /Pages /Count 1\n"; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage="/Kids[\n3 0 R\n]\n"; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage="/Resources<</ProcSet[/PDF/Text]/Font<</F0 5 0 R>> >>\n"; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage="/MediaBox [ 0 0 "+ pageWidth + " " + pageDepth + " ]\n>>\nendobj\n"; ConvertToByteAndAddtoStream(strPDFMessage); xRefs.Add(mPDF.Length); strPDFMessage="5 0 obj\n<</Type/Font/Subtype/Type1/BaseFont/Courier/Encoding/WinAnsiEncoding>>\nendobj\n"; ConvertToByteAndAddtoStream(strPDFMessage); xRefs.Add(mPDF.Length); strPDFMessage="6 0 obj\n<</Type/Catalog/Pages 4 0 R>>\nendobj\n"; ConvertToByteAndAddtoStream(strPDFMessage); streamStart=mPDF.Length; strPDFMessage="xref\n0 7\n0000000000 65535 f \n"; for(int i=0;i<xRefs.Count;i++) { strPDFMessage+=xRefFormatting((long) xRefs[i])+" 00000 n \n"; } ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage="trailer\n<<\n/Size "+ (xRefs.Count+1)+"\n/Root 6 0 R\n>>\n"; ConvertToByteAndAddtoStream(strPDFMessage); strPDFMessage="startxref\n" + streamStart+"\n%%EOF\n"; ConvertToByteAndAddtoStream(strPDFMessage); mPDF.WriteTo(pPDF.BaseStream); mPDF.Close(); pPDF.Close(); } } } 转自 http://www.chinaaspx.com/article/csharp/301.htm
词语选择 避免使用由经常使用的名称空间复制的类型名。类型名不能使用下列词语。 System Collections Forms UI 避免使用与常用关键词冲突的标识符。例如,避免使用下列词语。 AddHandler AddressOf Alias And Ansi As Assembly Auto BitAnd BitNot BitOr BitXor Boolean ByRef Byte ByVal Call Case Catch CBool CByte CChar CDate CDec CDbl Char CInt Class CLng CObj Const CShort CSng CStr CType Date Decimal Declare Default Delegate Dim Do Double Each Else ElseIf End Enum Erase Error Event Exit ExternalSource False Finally For Friend Function Get GetType Goto Handles If Implements Imports In Inherits Integer Interface Is Let Lib Like Long Loop Me Mod Module MustInherit MustOverride MyBase MyClass Namespace New Next Not Nothing NotInheritable NotOverridable Object On Option Optional Or Overloads Overridable Overrides ParamArray Preserve Private Property Protected Public RaiseEvent ReadOnly ReDim Region REM RemoveHandler Resume Return Select Set Shadows Shared Short Single Static Step Stop String Structure Sub SyncLock Then Throw To True Try TypeOf Unicode Until Variant When While With WithEvents WriteOnly Xor eval extends instanceof package var 标识符(包括参数名)中不要使用缩写。 如果必须使用缩写: 任何超过两个字符以上的缩写都使用camel大写格式,即使这不是标准缩写。 名称空间 命名名称空间的一般规则如下: CompanyName.TechnologyName 这样,我们看到的名称空间应该是这样的: Microsoft.Office PowerSoft.PowerBuilder 注意:这只是一个原则。第三方公司可以选择其它的名字。 避免用公司名称或其它著名品牌的名称作为名称空间的前缀,这样会造成两个公布的名称空间有同一个名称的可能性。(例如,将微软提供的Office自动类命名为Microsoft.Office。) 使用Pascal大写方式,用逗号分隔逻辑成分(例如,Microsoft.Office.PowerPoint)。如果你的品牌使用的是非传统大写方式,那么一定要遵循你的品牌所确定使用的大写方式,即使这种方式背离了通常的名称空间大写规则(例如,NeXT.WebObjects,和ee.cummings。) 该用复数的时候要使用复数的名称空间名。例如,使用System.Collections而不是System.Collection。本规则的特例是品牌名称和缩写。例如:使用System.IO而不是System.IOs。 名称空间和类不能使用同样的名字。例如,有一个类被命名为Debug后,就不要再使用Debug作为一个名称空间名。 类和类成分 类的命名原则 用名词或名词短语命名类。 使用Pascal大写。 减少类名中缩写的使用量。 不要使用任何类前缀(比如C)。 不要使用带下划线的字符。 下面是一些正确命名的类名的例子。 public class FileStream { } public class Button { } public class String { } 接口命名原则 使用名词或名词短语,或者描述行为的形容词来命名接口。例如,IComponent(描述性名词),ICustomAttributeProvider(名词短语),和IPersistable(形容词)。 使用Pascal大写。 减少接口名中缩写的使用量。 不要使用带下划线的字符。 在接口名前加前缀I,以表示这个类型是一个接口。 不要在类名前加上前缀C。偶而情况下,需要在类名前加上I而并不表示它是一个接口。在这种情况下,只要I后面的字符是小写就可(例如,IdentityStore。) 当类是接口的标准执行时,定义这一对类/接口组合就要使用相似的名称。两个名称的不同之处只是接口名前有一个I前缀。 下面我们举个例子,来看看接口IComponent和它的标准执行,类Component。 public interface IComponent { } public class Component : IComponent { } public interface IServiceProvider{ } public interface IFormatable { } 属性命名原则 在属性的后面加上Attribute后缀,来自定义属性类。如下例所示。 public class ObsoleteAttribute{ } Enum命名原则 Enum需使用Pascal大写。 Enum值名需使用Pascal大写。 减少enum名中缩写的使用量。 Enum名前不要加前缀(例如,adxxx表示ADO enums,rtfxxx表示多信息文本enum,等等。)。 在enum类型上不要加Enum后缀。 Enum名称需使用单数名词。 比特域使用复数名词。 如果列举值在参数或属性中使用,需用一个enum来定义列举值。这样工具就可以知道一个属性或参数可能的值了。 public enum FileMode{ Create, CreateNew, Open, OpenOrCreate, Truncate } 如果数字值to be bitwise or'ed together,就使用Flags对属性进行自定义。 [Flags] public enum Bindings { CreateInstance, DefaultBinding, ExcatBinding, GetField, GetProperty, IgnoreCase, InvokeMethod, NonPublic, OABinding, SetField SetProperty, Static } 在封装一个Win32 API时,这个规则有一个特例。从一个Win32标头产生内部定义是很常见的。你可以使用Win32大写,这种形式下字母通常全部大写。 使用Int32作为一个enum的基础类型。 如果这个enum代表标志,而且标志又非常多(大于32),或者这个enum在将来可以发展成许多标志,或者类型需要与类型int有所不同以便向后兼容时,在这种情况下就产生了特例。 只有在值可以被完全表示为一组位标志时,才使用enum。开集不能使用enum(例如操作系统版,等等)。 只读和Const字段名 用名词,名词短语,或名词的缩写命名静态字段。 用Pascal大写命名静态字段。 不要用匈牙利文类型的符号作静态字段名的前缀。 参数名 使用描述性参数名。参数名应该具有足够的描述性,这样在大多数情况下参数名和它的种类可以用来确定它的意思。 用camel大写方式命名参数。 根据参数的意思来命名参数,而不是根据参数的种类来命名。我们希望开发工具可以用很方便的方式提供关于参数种类的信息,这样参数名可以得到更好的使用,可以对语义而不是对种类进行描述。但是偶尔使用根据类型命名的参数名也是完全可以的。 不要使用保留参数。如果在下一个版本中需要更多的数据,可以增加进来。 不要用匈牙利文类型的符号作为字段名的前缀。 Type GetType (string typeName) string Format (string format, object [] args) 方法命名原则 用动词或动词短语命名方法。 用下述范例所示的Pascal大写方式命名方法。 RemoveAll() GetCharArray() Invoke() 属性命名原则 用名词或名词短语命名属性。 用Pascal大写命名属性。 属性与类型要一样。 用与一个类型的名称相同的名字来命名属性时,就使这个属性的类型成为那个类型。虽然听起来有些奇怪,但这是正确的。下面的例子正确使用了属性命名原则。 public enum Color {...} public class Control { public Color Color { get {...} set {...} } } 下例就是不正确的。 public enum Color {...} public class Control { public int Color { get {...} set {...} } } 在那个不正确的例子中,要想引用Color enum是不可能的,因为Color,Xxx会被翻译成一个成员访问,它会首先获得Color属性的值(int种类),然后再访问那个值的成员(它应该是System.Int32的一个实例成员)。 事件命名原则 用EventHandloer后缀命名事件处理程序,如下列所示。 public delegate void MouseEventHandler(object sender, MouseEvent e); 使用名为sender和e的两个参数。 Sender参数代表提出事件的对象。Sender参数永远是一个类型对象,即使它可能使用了更为特定的类型。 与事件相关的状态被封装在一个名为e的事件类范例中。要使用这个类型的正确的、特定的事件类。 public delegate void MouseEventHandler(object sender, MouseEvent e); 用EventArgs后缀命名事件自变量类,如下例所示。 public class MouseEventArgs : EventArgs { int x; int y; public MouseEventArgs(int x, int y) { this.x = x; this.y = y; } public int X { get { return x; } } public int Y { get { return y; } } } 命名事件名时,需要有之前和之后的时态概念,因此要使用现在时态和过去时态(不要使用BeforeXxx\AfterXxx的方式)。例如,可以被取消的结束事件就有Closing事件和Closed事件。 public event ControlEventHandler ControlAdded { //.. } 用动词命名事件。 区分大小写 不要使用需要对大小写作出区分的名称。各成分不论是在区分大小写还是不区分大小写的语言下都必须是完全可用的。因为不区分大小写的语言不能在同样的环境下对只有大小写不同的两个名称作出辩别,所以成分必须避免这种情况。 不要产生两个名称相同只有大小写不同的名称空间。 namespace ee.cummings; namespace Ee.Cummings; 带有两个参数的一个类型,其两个参数的名称不能只有大小写不同。 void foo(string a, string A) System.WinForms.Point p; System.WinForms.POINT pp; 带有两个属性的一个类型,其属性的名称不能只有大小写不同。 int Foo {get, set}; int FOO {get, set} 带有两种方法的一个类型,其方法的名称不能只有大小写不同。 void foo(); void Foo(); 避免类型名出现混淆 不同的语言使用不同的术语以识别基本管理类型。设计人员必须避免使用对语言有专门要求的术语。遵照本章说明的规则,避免出现类型名称混淆的情况。 使用语义上有意义的名称,而不要使用类型名称。 在很少见的情况下,参数除了类型以外语义上没有任何意义,这时使用类属名。例如,一个类支持将多种数据类型写进一个流中,这个类可能有下列方法: void Write(double value); void Write(float value); void Write(long value); void Write(int value); void Write(short value); 上面的例子在下述对语言有专门要求的情况下是首选。 void Write(double doubleValue); void Write(float floatValue); void Write(long longValue); void Write(int intValue); void Write(short shortValue); 在极端情况下,每一个基本数据类型需要有唯一的命名方式,此时使用下面的通用类型名称。 C# type name Visual Basic type name JScript type name Visual C++ type name IL representation Universal type name sbyte SByte SByte char I1 SByte byte Byte byte unsigned char U1 Byte short Short short short I2 Int16 ushort UInt16 UInt16 unsigned short U2 UInt16 int Integer int int I4 Int32 uint NA NA unsigned int U4 UInt32 long Long long __int64 I8 Int64 ulong UInt64 UInt64 Unsigned __int64 U8 UInt64 float Single float float R4 Single double Double double double R8 Double bool Boolean boolean bool I4 Boolean char Char char wchar_t U2 Char string String String String System.String String object Object Object Object System.Object Object 一个支持从流中读取多种数据类型的类可以有下列方法。 double ReadDouble(); float ReadSingle(); long ReadIn64(); int ReadInt32(); short ReadInt16(); 上面的例子在下述对语言有专门要求的情况下是首选。 double ReadDouble(); float ReadFloat(); long ReadLong(); int ReadInt(); short ReadShort();
一、字符转换函数 1、ASCII() 返回字符表达式最左端字符的ASCII 码值。在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错。 2、CHAR() 将ASCII 码转换为字符。如果没有输入0 ~ 255 之间的ASCII 码值,CHAR() 返回NULL 。 3、LOWER()和UPPER() LOWER()将字符串全部转为小写;UPPER()将字符串全部转为大写。 4、STR() 把数值型数据转换为字符型数据。 STR (<float_expression>[,length[, <decimal>]]) length 指定返回的字符串的长度,decimal 指定返回的小数位数。如果没有指定长度,缺省的length 值为10, decimal 缺省值为0。 当length 或者decimal 为负值时,返回NULL; 当length 小于小数点左边(包括符号位)的位数时,返回length 个*; 先服从length ,再取decimal ; 当返回的字符串位数小于length ,左边补足空格。 二、去空格函数 1、LTRIM() 把字符串头部的空格去掉。 2、RTRIM() 把字符串尾部的空格去掉。 三、取子串函数 1、left() LEFT (<character_expression>, <integer_expression>) 返回character_expression 左起 integer_expression 个字符。 2、RIGHT() RIGHT (<character_expression>, <integer_expression>) 返回character_expression 右起 integer_expression 个字符。 3、SUBSTRING() SUBSTRING (<expression>, <starting_ position>, length) 返回从字符串左边第starting_ position 个字符起length个字符的部分。 四、字符串比较函数 1、CHARINDEX() 返回字符串中某个指定的子串出现的开始位置。 CHARINDEX (<’substring_expression’>, <expression>) 其中substring _expression 是所要查找的字符表达式,expression 可为字符串也可为列名表达式。如果没有发现子串,则返回0 值。 此函数不能用于TEXT 和IMAGE 数据类型。 2、PATINDEX() 返回字符串中某个指定的子串出现的开始位置。 PATINDEX (<’%substring _expression%’>, <column_ name>)其中子串表达式前后必须有百分号“%”否则返回值为0。 与CHARINDEX 函数不同的是,PATINDEX函数的子串中可以使用通配符,且此函数可用于CHAR、 VARCHAR 和TEXT 数据类型。 五、字符串操作函数 1、QUOTENAME() 返回被特定字符括起来的字符串。 QUOTENAME (<’character_expression’>[, quote_ character]) 其中quote_ character 标明括字符串所用的字符,缺省值为“[]”。 2、REPLICATE() 返回一个重复character_expression 指定次数的字符串。 REPLICATE (character_expression integer_expression) 如果integer_expression 值为负值,则返回NULL 。 3、REVERSE() 将指定的字符串的字符排列顺序颠倒。 REVERSE (<character_expression>) 其中character_expression 可以是字符串、常数或一个列的值。 4、REPLACE() 返回被替换了指定子串的字符串。 REPLACE (<string_expression1>, <string_expression2>, <string_expression3>) 用string_expression3 替换在string_expression1 中的子串string_expression2。 4、SPACE() 返回一个有指定长度的空白字符串。 SPACE (<integer_expression>) 如果integer_expression 值为负值,则返回NULL 。 5、STUFF() 用另一子串替换字符串指定位置、长度的子串。 STUFF (<character_expression1>, <start_ position>, <length>,<character_expression2>) 如果起始位置为负或长度值为负,或者起始位置大于character_expression1 的长度,则返回NULL 值。 如果length 长度大于character_expression1 中 start_ position 以右的长度,则character_expression1 只保留首字符。 六、数据类型转换函数 1、CAST() CAST (<expression> AS <data_ type>[ length ]) 2、CONVERT() CONVERT (<data_ type>[ length ], <expression> [, style]) 1)data_type为SQL Server系统定义的数据类型,用户自定义的数据类型不能在此使用。 2)length用于指定数据的长度,缺省值为30。 3)把CHAR或VARCHAR类型转换为诸如INT或SAMLLINT这样的INTEGER类型、结果必须是带正号或负号的数值。 4)TEXT类型到CHAR或VARCHAR类型转换最多为8000个字符,即CHAR或VARCHAR数据类型是最大长度。 5)IMAGE类型存储的数据转换到BINARY或VARBINARY类型,最多为8000个字符。 6)把整数值转换为MONEY或SMALLMONEY类型,按定义的国家的货币单位来处理,如人民币、美元、英镑等。 7)BIT类型的转换把非零值转换为1,并仍以BIT类型存储。 8)试图转换到不同长度的数据类型,会截短转换值并在转换值后显示“+”,以标识发生了这种截断。 9)用CONVERT() 函数的style 选项能以不同的格式显示日期和时间。style 是将DATATIME 和SMALLDATETIME 数据转换为字符串时所选用的由SQL Server 系统提供的转换样式编号,不同的样式编号有不同的输出格式。 七、日期函数 1、day(date_expression) 返回date_expression中的日期值 2、month(date_expression) 返回date_expression中的月份值 3、year(date_expression) 返回date_expression中的年份值 4、DATEADD() DATEADD (<datepart>, <number>, <date>) 返回指定日期date 加上指定的额外日期间隔number 产生的新日期。 5、DATEDIFF() DATEDIFF (<datepart>, <date1>, <date2>) 返回两个指定日期在datepart 方面的不同之处,即date2 超过date1的差距值,其结果值是一个带有正负号的整数值。 6、DATENAME() DATENAME (<datepart>, <date>) 以字符串的形式返回日期的指定部分此部分。由datepart 来指定。 7、DATEPART() DATEPART (<datepart>, <date>) 以整数值的形式返回日期的指定部分。此部分由datepart 来指定。 DATEPART (dd, date) 等同于DAY (date) DATEPART (mm, date) 等同于MONTH (date) DATEPART (yy, date) 等同于YEAR (date) 8、GETDATE() 以DATETIME 的缺省格式返回系统当前的日期和时间
C# 数据字段属性 char(12) 用下面: object result=cmd.ExecuteScalar(); int re=Convert.ToInt32(result); txb.Text=re.ToString(); 显示错误:值对于Int32太大或太小; 改成如下: object result=cmd.ExecuteScalar(); long re=Convert.ToInt64(result); txb.Text=re.ToString(); 编译通过 不明白啊…… baidu上搜索的关键字:值对于Int32太大或太小。收获微小。 再次实验,将 long re=Convert.ToInt64(result); 改为 decimal re=Convert.ToDecimal(result); 也通过了…… |
最后的评论
|