郁郁青青

 
 

与我联系

  • 发短消息

搜索

 

常用链接

  • 我的随笔
  • 我的空间
  • 我的短信
  • 我的评论
  • 更多链接
  • 我的参与
  • 我的新闻
  • 最新评论
  • 我的标签

留言簿

  • 给我留言
  • 查看留言

随笔档案

  • 2008年4月 (3)
  • 2008年3月 (2)
  • 2007年11月 (1)

最新评论

阅读排行榜

  • 1. b/s c/s结构的区别!(99)
  • 2. c#修饰符!(28)
  • 3. 我在这里安家啦,哈哈!(20)
  • 4. 决定好好学习!(17)
  • 5. c#.net函数和方法集(15)

评论排行榜

  • 1. 我在这里安家啦,哈哈!(1)
  • 2. 决定好好学习!(0)
  • 3. b/s c/s结构的区别!(0)
  • 4. c#修饰符!(0)
  • 5. c#.net函数和方法集(0)

Powered by: 博客园
模板提供:沪江博客
博客园 | 首页 | 发新随笔 | 发新文章 | 联系 | 订阅订阅 | 管理

2008年4月7日

oracle体系结构
track: http://oracle.chinaitlab.com/serial/38165.html

 在本章里你可以了解以下内容
  
  1、 ORACLE 实例——包括内存结构与后台进程
  2、 ORACLE 数据库——物理操作系统文件的集合
  3、 了解内存结构的组成
  4、 了解后台进程的作用
  5、 了解数据库的物理文件
  6、 解释各种逻辑结构
  
  一、ORACLE实例
  
  1、ORACLE 实例
  
  System Global Area(SGA) 和 Background Process 称为数据库的实例。
  
  2、ORACLE 数据库
  
  一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等)
  
  3、系统全局共享区System Global Area(SGA)
  
  System Global Area 是一块巨大的共享内存区域,他被看做是Oracle 数据库的一个大缓冲池,这里的数据可以被ORACLE的各个进程共用。其大小可以通过如下语句查看:
  SQL> select * from v$sga;
  NAME VALUE
  -------------------- ---------
  Fixed Size 39816
  Variable Size 259812784
  Database Buffers 1.049E+09
  Redo Buffers 327680
  
  更详细的信息可以参考V$sgastat、V$buffer_pool
  
  主要包括以下几个部分:
  
  a、 共享池(Shared pool)
  
  共享池是SGA中最关键的内存片段,特别是在性能和可伸缩性上。一个太小的共享池会扼杀性能,使系统停止,太大的共享池也会有同样的效果,将会消耗大量的CPU来管理这个共享池。不正确的使用共享池只会带来灾难。共享池主要又可以分为以下两个部分:
  
  SQL语句缓冲(Library Cache)
  
  当一个用户提交一个SQL语句,Oracle会将这句SQL进行分析(parse),这个过程类似于编译,会耗费相对较多的时间。在分析完这个SQL,Oracle会把他的分析结果给保存在Shared pool的Library Cache中,当数据库第二次执行该SQL时,Oracle自动跳过这个分析过程,从而减少了系统运行的时间。这也是为什么第一次运行的SQL 比第二次运行的SQL要慢一点的原因。
  
  下面举例说明parse的时间
  SQL> select count(*) fromscpass ;
  COUNT(*)
  ----------
  243
  Elapsed: 00:00:00.08
  
  这是在Share_pool 和Data buffer 都没有数据缓冲区的情况下所用的时间
  SQL> alter system flush SHARED_POOL;
  System altered.
  
  清空Share_pool,保留Data buffer
  SQL> select count(*) from scpass ;
  COUNT(*)
  ----------
  243
  Elapsed: 00:00:00.02
  SQL> select count(*) from scpass ;
  COUNT(*)
  ----------
  243
  Elapsed: 00:00:00.00
  
  从两句SQL 的时间差上可以看出该SQL 的Parse 时间约为00:00:00.02
  
  对于保存在共享池中的SQL语句,可以从V$Sqltext、v$Sqlarea中查询到,对于编程者来说,要尽量提高语句的重用率,减少语句的分析时间。一个设计的差的应用程序可以毁掉整个数据库的Share pool,提高SQL语句的重用率必须先养成良好的变成习惯,尽量使用Bind变量。
  
  数据字典缓冲区(Data Dictionary Cache)
  
  显而易见,数据字典缓冲区是ORACLE特地为数据字典准备的一块缓冲池,供ORACLE内部使用,没有什么可以说的。
  
  b、块缓冲区高速缓存(Database Buffer Cache)
  
  这些缓冲是对应所有数据文件中的一些被使用到的数据块。让他们能够在内存中进行操作。在这个级别里没有系统文件,,户数据文件,临时数据文件,回滚段文件之分。也就是任何文件的数据块都有可能被缓冲。数据库的任何修改都在该缓冲里完成,并由DBWR进程将修改后的数据写入磁盘。
  
  这个缓冲区的块基本上在两个不同的列表中管理。一个是块的“脏”表(Dirty List),需要用数据库块的
  
  书写器(DBWR)来写入,另外一个是不脏的块的列表(Free List),一般的情况下,是使用最近最少使用 (Least Recently Used,LRU)算法来管理。块缓冲区高速缓存又可以细分为以下三个部分(Default pool,Keep pool,Recycle pool)。如果不是人为设置初始化参数(Init.ora),ORACLE将默认为Default pool。由于操作系统寻址能力的限制,不通过特殊设置,在32位的系统上,块缓冲区高速缓存最大可以达到1.7G,在64位系统上,块缓冲区高速缓存最大可以达到10G。
  
  c、重做日志缓冲区(Redo log buffer)
  
  重做日志文件的缓冲区,对数据库的任何修改都按顺序被记录在该缓冲,然后由LGWR进程将它写入磁盘。这些修改信息可能是DML语句,如(Insert,Update,Delete),或DDL语句,如(Create,Alter,Drop等)。 重做日志缓冲区的存在是因为内存到内存的操作比较内存到硬盘的速度快很多,所以重作日志缓冲区可以加快数据库的操作速度,但是考虑的数据库的一致性与可恢复性,数据在重做日志缓冲区中的滞留时间不会很长。所以重作日志缓冲区一般都很小,大于3M之后的重作日志缓冲区已经没有太大的实际意义。
  
  d、Java程序缓冲区(Java Pool)
  
  Java 的程序区,Oracle 8I 以后,Oracle 在内核中加入了对Java的支持。该程序缓冲区就是为Java 程序保留的。如果不用Java程序没有必要改变该缓冲区的默认大小。
  
  e、大池(Large Pool)
  
  大池的得名不是因为大,而是因为它用来分配大块的内存,处理比共享池更大的内存,在8.0开始引入。
  
  下面对象使用大池:
  
  MTS——在SGA的Large Pool中分配UGA
  
  语句的并行查询(Parallel Executeion of Statements)——允许进程间消息缓冲区的分配,用来协调 并行查询服务器
  
  备份(Backup)——用于RMAN磁盘I/O缓存
  
  4、后台进程(Background process)
  
  后台进程是Oracle的程序,用来管理数据库的读写,恢复和监视等工作。Server Process主要是通过他和user process进行联系和沟通,并由他和user process进行数据的交换。在Unix机器上,Oracle后台进程相对于操作系统进程,也就是说,一个Oracle后台进程将启动一个操作系统进程;在Windows机器上, Oracle后台进程相对于操作系统线程,打开任务管理器,我们只能看到一个ORACLE.EXE的进程,但是通过另外的工具,就可以看到包含在这里进程中的线程。
  
  在Unix上可以通过如下方法查看后台进程:
  
  ps –ef | grep ora_
  # ps -ef | grep ora_ | grep XCLUAT
  oracle 29431 1 0 Sep 02 2:02 ora_dbwr_SID
  oracle 29444 1 0 Sep 02 0:03 ora_ckpt_SID
  oracle 29448 1 0 Sep 02 2:42 ora_smon_SID
  oracle 29442 1 0 Sep 02 3:25 ora_lgwr_SID
  oracle 29427 1 0 Sep 02 0:01 ora_pmon_SID
  
  a、Oracle系统有5 个基本进程他们是
  DBWR(数据文件写入进程)
  LGWR(日志文件写入进程)
  SMON(系统监护进程)
  PMON(用户进程监护进程)
  CKPT(检查点进程,同步数据文件, 日志文件,控制文件)
  
  b、DBWR
  将修改过的数据缓冲区的数据写入对应数据文件
  维护系统内的空缓冲区
  这里指出几个容易错误的概念:
  当一个更新提交后,DBWR把数据写到磁盘并返回给用户提交完成.
  DBWR会触发CKPT 后台进程
  DBWR不会触发LGWR 进程
  上面的概念都是错误的.
  DBWR是一个很底层的工作进程,他批量的把缓冲区的数据写入磁盘。和任何前台用户的进程几乎没有什么关系,也不受他们的控制。至于DBWR会不会触发LGWR和CKPT进程,我们将在下面几节里讨论。
  DBWR工作的主要条件如下
  DBWR 超时
  系统中没有多的空缓冲区用来存放数据
  CKPT 进程触发DBWR 等
  
  c、LGWR
  将重做日志缓冲区的数据写入重做日志文件,LGWR是一个必须和前台用户进程通信的进程。当数据被修改的时候,系统会产生一个重做日志并记录在重做日志缓冲区内。这个重做日志可以类似的认为是以下的一个结构:
  SCN=000000001000
  数据块ID
  对象ID=0801
  数据行=02
  修改后的数据=0011
  提交的时候,LGWR必须将被修改的数据的重做日志缓冲区内数据写入日志数据文件,然后再通知前台进程提交成功,并由前台进程通知用户。从这点可以看出LGWR承担了维护系统数据完整性的任务。
  LGWR 工作的主要条件如下
  用户提交
  有1/3 重做日志缓冲区未被写入磁盘
  有大于1M 重做日志缓冲区未被写入磁盘
  超时
  DBWR需要写入的数据的SCN号大于LGWR 记录的SCN号,DBWR 触发LGWR写入
  
  d、SMON
  工作主要包含
  清除临时空间
  在系统启动时,完成系统实例恢复
  聚结空闲空间
  从不可用的文件中恢复事务的活动
  OPS中失败节点的实例恢复
  清除OBJ$表
  缩减回滚段
  使回滚段脱机
  
  e、PMON
  主要用于清除失效的用户进程,释放用户进程所用的资源。如PMON将回滚未提交的工作,释放锁,释放分配给失败进程的SGA资源。
  
  f、CKPT
  同步数据文件,日志文件和控制文件,由于DBWR/LGWR的工作原理,造成了数据文件,日志文件,控制文件的不一至,这就需要CKPT进程来同步。CKPT会更新数据文件/控制文件的头信息。
  CKPT工作的主要条件如下
  在日志切换的时候
  数据库用immediate ,transaction , normal 选项shutdown 数据库的时候
  根据初始话文件LOG_CHECKPOINT_INTERVAL、LOG_CHECKPOINT_TIMEOUT、FAST_START_IO_TARGET 的设置的数值来确定
  用户触发
  以下进程的启动需要手工配置
  
  g、ARCH
  当数据库以归档方式运行的时候,Oracle会启动ARCH进程,当重做日志文件被写满时,日志文件进行切换,旧的重做日志文件就被ARCH进程复制到一个/多个特定的目录/远程机器。这些被复制的重做日志文件被叫做归档日志文件。
  
  h、RECO
  负责解决分布事物中的故障。Oracle可以连接远程的多个数据库,当由于网络问题,有些事物处于悬而未决的状态。RECO进程试图建立与远程服务器的通信,当故障消除后,RECO进程自动解决所有悬而未决的会话。
  i、服务进程Server Process
  服务进程的分类
  专用服务进程(Dedicated Server Process)
  一个服务进程对应一个用户进程
  共享服务进程(MultiTreaded Server Process)
  一个服务进程对应多个用户进程,轮流为用户进程服务。
  PGA & UGA
  PGA = Process Global Area
  UGA = User Global Area
  他保存了用户的变量、权限、堆栈、排序空间等用户信息,对于专用服务器进程,UGA在PGA中分配。对于多线程进程,UGA在Large pool中分配。
  
  j、用户进程User Process
  在客户端,将用户的SQL 语句传递给服务进程
  
  5、一个贯穿数据库全局的概念----系统改变号SCN(System Change Number)
  系统改变号,一个由系统内部维护的序列号。当系统需要更新的时候自动增加,他是系统中维持数据的一致性和顺序恢复的重要标志。
  
  a. 查询语句不会使SCN增加,就算是同时发生的更新,数据库内部对应的SCN也是不同的。这样一来就保证了数据恢复时候的顺序。
  
  b. 维持数据的一致性,当一
  
  二、ORACLE 数据库
  
  ORACLE数据库的组成——物理操作系统文件的集合。主要包括以下几种。
  
  1、控制文件(参数文件init.ora记录了控制文件的位置)
  控制文件包括如下主要信息
  数据库的名字,检查点信息,数据库创建的时间戳
  所有的数据文件,联机日志文件,归档日志文件信息
  备份信息等
  有了这些信息,Oracle就知道那些文件是数据文件,现在的重做日志文件是哪些,这些都是系统启动和运行的基本条件,所以他是Oracle运行的根本。如果没有控制文件系统是不可能启动的。控制文件是非常重要的,一般采用多个镜相复制来保护控制文件,或采用RAID来保护控制文件。控制文件的丢失,将使数据库的恢复变的很复杂。
  控制文件信息可以从V$Controlfile中查询获得
  
  2、数据文件(数据文件的详细信息记载在控制文件中)
  可以通过如下方式查看数据文件
  SQL> select name from v$datafile;
  NAME
  ---------------------------------------------
  /u05/dbf/PROD/system_01.dbf
  /u06/dbf/PROD/temp_01.dbf
  /u04/dbf/PROD/users_01.dbf
  /u09/dbf/PROD/rbs_01.dbf
  /u06/dbf/PROD/applsys_indx_01.dbf
  /u05/dbf/PROD/applsys_data_01.dbf
  从以上可以看出,数据文件大致可以分为以下几类:
  
  i. 系统数据文件(system_01.dbf)
  存放系统表和数据字典,一般不放用户的数据,但是用户脚本,如过程,函数,包等却是保存在数据字典中的。
  名词解释:数据字典 数据字典是一些系统表或视图,他存放系统的信息,他包括数据库版本,数据文件信息,表与索引等段信息,系统的运行状态等各种和系统有关的信息和用户脚本信息。数据库管理员可以通过对数据字典的查询,就可以了解到Oracle的运行状态。
  
  ii. 回滚段文件(rbs_01.dbf)
  如果数据库进行对数据的修改,那么就必须使用回滚段,回滚段是用来临时存放修改前的数据(Before Image)。回滚段通常都放在一个单独的表空间上(回滚表空间),避免表空间碎片化,这个表空间包含的数据文件就是回滚数据文件。
  
  iii. 临时数据文件(temp_01.dbf)
  主要存放用户的排序等临时数据,与回滚段相似,临时段也容易引起表空间碎片化,而且没有办法在一个永久表空间上开辟临时段,所以就必须有一个临时表空间,它所包含的数据文件就是临时数据文件,主要用于不能在内存上进行的排序操作。我们必须为用户指定一个临时表空间。
  
  iv. 用户数据文件(/applsys_data_01.dbf ,applsys_indx_01.dbf)
  存放用户数据,这里列举了两类常见的用户型数据,一般数据和索引数据,一般来说,如果条件许可的话,可以考虑放在不同的磁盘上。
  
  3、重做日志文件(联机重做日志)
  用户对数据库进行的任何操作都会记录在重做日志文件。在了解重做日志之前必须了解重做日志的两个概念,重做日志组和重做日志组成员(Member),一个数据库中至少要有两个日志组文件,一组写完后再写另一组,即轮流写。每个日志组中至少有一个日志成员,一个日志组中的多个日志成员是镜相关系,有利于日志文件的保护,因为日志文件的损坏,特别是当前联机日志的损坏,对数据库的影响是巨大的。
  联机日志组的交换过程叫做切换,需要特别注意的是,日志切换在一个优化效果不好的数据库中会引起临时的“挂起”。挂起大致有两种情况:
  在归档情况下,需要归档的日志来不及归档,而联机日志又需要被重新利用
  检查点事件还没有完成(日志切换引起检查点),而联机日志需要被重新利用
  解决这种问题的常用手段是:
  
  i.增加日志组
  
  ii.增大日志文件成员大小
  通过v$log可以查看日志组,v$logfile可以查看具体的成员文件。
  
  4、归档日志文件
  Oracle可以运行在两种模式之中,归档模式和不归档模式。如果不用归档模式,当然,你就不会有归档日志,但是,你的系统将不会是一个实用系统,特别是不能用于生产系统,因为你可能会丢失数据。但是在归档模式中,为了保存用户的所有修改,在重做日志文件切换后和被覆盖之间系统将他们另外保存成一组连续的文件系列,该文件系列就是归档日志文件。
  有人或许会说,归档日志文件占领我大量的硬盘空间,其实,具体想一想,你是愿意浪费一点磁盘空间来保护你的数据,还是愿意丢失你的数据呢?显而义见,我们需要保证我们的数据的安全性。其实,归档并不是一直占领你的磁盘空间,你可以把她备份到磁带上,或则删除上一次完整备份前的所有日志文件。
  
  5、初始化参数文件
  initSID.ora或init.ora文件,因为版本的不一样,其位置也可能会不一样。在8i中,通常位于$ORACLE_HOME/admin//Pfile下,初始化文件记载了许多数据库的启动参数,如内存,控制文件,进程数等,在数据库启动的时候加载(Nomount时加载),初始化文件记录了很多重要参数,对数据库的性能影响很大,如果不是很了解,不要轻易乱改写,否则会引起数据库性能下降。
  
  6、其他文件
  i . 密码文件
  用于Oracle 的具有sysdba权限用户的认证.
  ii. 日志文件
  报警日志文件(alert.log或alrt.ora)
  记录数据库启动,关闭和一些重要的出错信息。数据库管理员应该经常检查这个文件,并对出现的问题作出即使的反应。你可以通过以下SQL 找到他的路径select value from v$PARAMETER where name ="background_dump_dest";
  后台或用户跟踪文件
  系统进程或用户进程出错前写入的信息,一般不可能读懂,可以通过ORACLE的TKPROF工具转化为可以读懂的格式。对于系统进程产生的跟踪文件与报警日志文件的路径一样,用户跟踪文件的路径,你可以通过以下SQL找到他的路径select value from v$PARAMETER where name ="user_dump_dest";
  
  三、ORACLE逻辑结构
  
  1、 表空间(tablespace)
  表空间是数据库中的基本逻辑结构,一系列数据文件的集合。一个表空间可以包含多个数据文件,但是一个数据文件只能属于一个表空间。
  
  2、 段(Segment)
  段是对象在数据库中占用的空间,虽然段和数据库对象是一一对应的,但段是从数据库存储的角度来看的。一个段只能属于一个表空间,当然一个表空间可以有多个段。
  表空间和数据文件是物理存储上的一对多的关系,表空间和段是逻辑存储上的一对多的关系,段不直接和数据文件发生关系。一个段可以属于多个数据文件,关于段可以指定扩展到哪个数据文件上面。
  段基本可以分为以下四种
  数据段(Data Segment)
  索引段(Index Segment)
  回滚段(Rollback Segment)
  临时段(Temporary Segment)
  
  3、区间(Extent)
  关于Extent的翻译有多种解释,有的译作扩展,有的译作盘区,我这里通常译为区间。在一个段中可以存在多个区间,区间是为数据一次性预留的一个较大的存储空间,直到那个区间被用满,数据库会继续申请一个新的预留存储空间,即新的区间,一直到段的最大区间数(Max Extent)或没有可用的磁盘空间可以申请。 在ORACLE8i以上版本,理论上一个段可以无穷个区间,但是多个区间对ORACLE却是有性能影响的,ORACLE建议把数据分布在尽量少的区间上,以减少ORACLE的管理与磁头的移动。
  
  4、Oracle数据块(Block)
  ORACLE最基本的存储单位,他是OS数据块的整数倍。ORACLE的操作都是以块为基本单位,一个区间可以包含多个块(如果区间大小不是块大小的整数倍,ORACLE实际也扩展到块的整数倍)。
  
  5、基本表空间介绍
  
  a. 系统表空间
  主要存放数据字典和内部系统表基表
  查看数据数据字典的SQL
  select * from dict
  查看内部系统表的SQL
  select * from v$fixed_view_definition
  DBA对系统的系统表中的数据字典必须有一个很深刻的了解,他们必须准备一些基础的SQL语句,通过这些SQL可以立即了解系统的状况和数据库的状态,这些基本的SQL包括
  系统的剩余空间
  系统的SGA
  状态系统的等待
  用户的权限
  当前的用户锁
  缓冲区的使用状况等
  在成为DBA 的道路上我们不建议你过分的依赖于OEM/Quest 等优秀的数据库管理工具,因为他们不利于你对数据数据字典的理解,SQL语句可以完成几乎全部的数据库管理工作。
  大量的读少量的写是该表空间的一个显著的特点。
  
  b. 临时表空间.
  临时表空间顾名思义是用来存放临时数据的,例如排序操作的临时空间,他的空间会在下次系统启动的时候全部被释放。
  
  c. 回滚段表空间
  
  i. 回滚段在系统中的作用
  当数据库进行更新插入删除等操作的时候,新的数据被更新到原来的数据文件,而旧的数据(Before Image)就被放到回滚段中,如果数据需要回滚,那么可以从回滚段将数据再复制到数据文件中。来完成数据的回滚。在系统恢复的时候, 回滚段可以用来回滚没有被commit 的数据,解决系统的一至性。
  回滚段在什么情况下都是大量的写,一般是少量读,因此建议把回滚段单独出来放在一个单独的设备(如单独的磁盘或RAID),以减少磁盘的IO争用。
  
  ii. 回滚段的工作方式
  一个回滚表空间可以被划分成多个回滚段.
  一个回滚段可以保存多个会话的数据.
  回滚段是一个圆形的数据模型
  假设回滚段由4 个区间组成,他们的使用顺序就是区间1à区间2à区间3à区间4à区间1。也就是说,区间是可以循环使用的,当区间4到区间1的时候,区间1里面的会话还没有结束, 区间4用完后就不能再用区间1,这时系统必须分配区间5,来继续为其他会话服务服务。
  我们分析一个Update 语句的完成
  
  ①. 用户提交一个Update 语句
  
  ②. Server Process 检查内存缓冲.
  如果没有该数据块的缓冲,则从磁盘读入
  
  i. 如果没有内存的有效空间,DBWR被启动将未写入磁盘的脏缓冲写入磁盘
  
  ii. 如果有有效空间,则读入
  
  ③. 在缓冲内更新数据
  
  i. 申请一个回滚段入口,将旧数据写如回滚段
  
  ii. 加锁并更新数据
  
  iii. 并在同时将修改记录在Redo log buffer中
posted @ 2008-04-07 17:38 叶儿轻飞 阅读(14) | 评论 (0) | 编辑
 

2008年4月3日

c#.net函数和方法集
 

 


1、DateTime 数字型
System.DateTime currentTime=new System.DateTime();
1.1
取当前年月日时分秒
currentTime=System.DateTime.Now;
1.2
取当前年
int
年=currentTime.Year;
1.3
取当前月
int
月=currentTime.Month;
1.4
取当前日
int
日=currentTime.Day;
1.5
取当前时
int
时=currentTime.Hour;
1.6
取当前分
int
分=currentTime.Minute;
1.7
取当前秒
int
秒=currentTime.Second;
1.8
取当前毫秒
int
毫秒=currentTime.Millisecond;
(变量可用中文)

1.9 取中文日期显示——年月日时分
string strY=currentTime.ToString("f"); //
不显示秒

1.10 取中文日期显示_年月
string strYM=currentTime.ToString("y");

1.11 取中文日期显示_月日
string strMD=currentTime.ToString("m");

1.12 取中文年月日
string strYMD=currentTime.ToString("D");

1.13 取当前时分,格式为:14:24
string strT=currentTime.ToString("t");

1.14 取当前时间,格式为:2003-09-23T14:46:48
string strT=currentTime.ToString("s");

1.15 取当前时间,格式为:2003-09-23 14:48:30Z
string strT=currentTime.ToString("u");

1.16 取当前时间,格式为:2003-09-23 14:48
string strT=currentTime.ToString("g");

1.17
取当前时间,格式为:Tue, 23 Sep 2003 14:52:40 GMT
string strT=currentTime.ToString("r");

1.18获得当前时间 n 天后的日期时间
DateTime newDay = DateTime.Now.AddDays(100);

2、Int32.Parse(变量) Int32.Parse("常量")
字符型转换转为32位数字型

3、变量.ToString()
字符型转换转为字符串
12345.ToString("n"); //
生成 12,345.00
12345.ToString("C"); //
生成¥12,345.00
12345.ToString("e"); //
生成 1.234500e+004
12345.ToString("f4"); //
生成 12345.0000
12345.ToString("x"); //
生成 3039 (16进制)
12345.ToString("p"); //
生成 1,234,500.00%


4、变量.Length 数字型
取字串长度:
如: string str="中国";
int Len = str.Length ; //Len
是自定义变量, str是求测的字串的变量名

5、System.Text.Encoding.Default.GetBytes(变量)
字码转换转为比特码
如:byte[] bytStr = System.Text.Encoding.Default.GetBytes(str);
然后可得到比特长度:
len = bytStr.Length;

6、System.Text.StringBuilder("")
字符串相加,(+号是不是也一样?)
如:System.Text.StringBuilder sb = new System.Text.StringBuilder("");
sb.Append("
中华");
sb.Append("
人民");
sb.Append("
共和国");

7、变量.Substring(参数1,参数2);
截取字串的一部分,参数1为左起始位数,参数2为截取几位。
如:string s1 = str.Substring(0,2);

8、String user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
取远程用户IP地址

9、穿过代理服务器取远程用户真实IP地址:
if(Request.ServerVariables["HTTP_VIA"]!=null){
string user_IP=Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
}else{
string user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
}

10、 Session["变量"];
存取Session值;
如,赋值: Session["username"]="小布什";

取值: Object objName=Session["username"];
String strName=objName.ToString();
清空: Session.RemoveAll();

11、String str=Request.QueryString["变量"];
用超链接传送变量。
如在任一页中建超链接:<a href=Edit.aspx?fbid=23>点击</a>
在Edit.aspx页中取值:String str=Request.QueryString["fdid"];

12、DOC对象.CreateElement("新建节点名");
创建XML文档新节点

13、父节点.AppendChild(子节点);
将新建的子节点加到XML文档父节点下

14、父节点.RemoveChild(节点);
删除节点

15、Response
Response.Write("
字串");
Response.Write(
变量);
向页面输出。

Response.Redirect("URL地址");
跳转到URL指定的页面

16、char.IsWhiteSpce(字串变量,位数)——逻辑型
查指定位置是否空字符;
如:
string str="
中国人民";
Response.Write(char.IsWhiteSpace(str,2)); //
结果为:True, 第一个字符是0位,2是第三个字符。

17、char.IsPunctuation('字符') --逻辑型
查字符是否是标点符号
如:Response.Write(char.IsPunctuation('A')); //返回:False

18、(int)'字符'
把字符转为数字,查代码点,注意是单引号。
如:
Response.Write((int)'
中'); //结果为中字的代码:20013

19、(char)代码
把数字转为字符,查代码代表的字符。
如:
Response.Write((char)22269); //
返回“国”字。

20、 Trim()
清除字串前后空格

21 、字串变量.Replace("子字串","替换为")
字串替换
如:
string str="
中国";
str=str.Replace("
国","央"); //将国字换为央字
Response.Write(str); //
输出结果为“中央”

再如:(这个非常实用)

string str="这是<script>脚本";
str=str.Replace("<","<font><</font>"); //
将左尖括号替换为<font> 与 < 与 </font> (或换为<,但估计经XML存诸后,再提出仍会还原)
Response.Write(str); //
显示为:“这是<script>脚本”

如果不替换,<script>将不显示,如果是一段脚本,将运行;而替换后,脚本将不运行。
这段代码的价值在于:你可以让一个文本中的所有HTML标签失效,全部显示出来,保护你的具有交互性的站点。
具体实现:将你的表单提交按钮脚本加上下面代码:
string strSubmit=label1.Text; //label1
是你让用户提交数据的控件ID。
strSubmit=strSubmit.Replace("<","<font><</font>");
然后保存或输出strSubmit。
用此方法还可以简单实现UBB代码。

22、Math.Max(i,j)
取i与j中的最大值
如 int x=Math.Max(5,10); // x将取值 10

23、字串对比一般都用: if(str1==str2){ } , 但还有别的方法:

(1)、
string str1; str2
//
语法: str1.EndsWith(str2); __检测字串str1是否以字串str2结尾,返回布尔值.如:
if(str1.EndsWith(str2)){ Response.Write("
字串str1是以"+str2+"结束的"); }

(2)、
//
语法:str1.Equals(str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上.

(3)、
//
语法 Equals(str1,str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上.

24、IndexOf() 、LastIndexOf()
查找字串中指定字符或字串首次(最后一次)出现的位置,返回索引值,如:
str1.IndexOf("
字"); //查找“字”在str1中的索引值(位置)
str1.IndexOf("
字串");//查找“字串”的第一个字符在str1中的索引值(位置)
str1.IndexOf("
字串",3,2);//从str1第4个字符起,查找2个字符,查找“字串”的第一个字符在str1中的索引值(位置)

25、Insert()
在字串中指定索引位插入指定字符。如:
str1.Insert(1,"
字");在str1的第二个字符处插入“字”,如果str1="中国",插入后为“中字国”;

26、PadLeft()、PadRight()
在字串左(或右)加空格或指定char字符,使字串达到指定长度,如:
<%
string str1="
中国人";
str1=str1.PadLeft(10,'1'); //
无第二参数为加空格
Response.Write(str1); //
结果为“1111111中国人”,字串长为10
%>

27、Remove()
从指定位置开始删除指定数的字符
<%
string str1="
我是萨达姆的崇拜者之一";
Response.Write(str1.Remove(5,4)); //
结果为“我是萨达姆之一”
%>

posted @ 2008-04-03 10:19 叶儿轻飞 阅读(15) | 评论 (0) | 编辑
 

2008年4月1日

c#修饰符!

在C#中,有如下几种修饰符,分别是public,protected,internal,private。先来看一下C# 4th Edition中的说明:

public

No restrictions. Members marked public are visible to any method of any class.

private

The members in class A that are marked private are accessible only to methods of class A.

protected

The members in class A that are marked protected are accessible to methods of class A and also to methods of classes derived from class A.

internal

The members in class A that are marked internal are accessible to methods of any class in A's assembly.

protected internal

The members in class A that are marked protected internal are accessible to methods of class A, to methods of classes derived from class A, and also to any class in A's assembly. This is effectively protected OR internal. (There is no concept of protected AND internal.)



下面是C#中修饰符的具体意义:

修饰符
应用于
说明
public
所有的类型或成员
任何代码均可以访问该成员
protected
类型和内嵌类型(即在一个类中定义的类)的所有成员
只有派生的类型能访问该成员
internal
类型和内嵌类型的所有成员
只能在包含它的程序集中访问该成员
private
所有的类型或成员
只能在它所属的类型中访问该成员
protected internal
类型和内嵌类型的所有成员
能在包含它的程序集或派生类型中访问该成员
 
 
 
new
函数成员
成员用相同的签名隐藏继承的成员
static
所有的成员
成员不在类的具体实例中执行
virtual
仅函数成员
成员可以由派生类重写
abstract
类和函数成员
抽象成员定义了成员的签名,但没有提供实现代码
override
仅函数成员
成员重写了继承的虚拟或抽象成员
sealed
类
成员重写了继承的虚拟成员,但继承该类的任何类都不能重写该成员。必须与override一起使用
extern
仅静态[DllImport]方法
成员在外部用另一种语言实现

以上摘自  浪漫如枫

posted @ 2008-04-01 09:39 叶儿轻飞 阅读(28) | 评论 (0) | 编辑
 

2008年3月31日

b/s c/s结构的区别!
1 引言


散进散出货物或者称为大宗入出库货物的管理是综合仓库管理的主要内容??1??2??。目前,随着信息技术和网络技术的发展,“信息高速公路”建设已在全球拉开序幕,传统的ClientServer??简称CS??网络应用系统模式在开放性与信息的发布、交流等方面存在很大的局限性,严重影响到仓储管理适应全球性的全方位信息化进程的步伐,CS网络模式已经不适宜用来构建高性能的仓储管理网。Browser/Server ??简称B/S?? 网络结构模式作为传统CS模式的扩展,为仓储管理的建设提供了崭新的技术手段,开辟了网络建设的新途径。本文为克服传统的ClientServer的局限性,提出了基于B/S模式和C/S模式结合策略的仓储管理信息系统的总体结构和实现方法。

2 总体设计


在市场经济改革的大潮中,仓储行业为谋求发展,大量的是外协代管物资的保管。仓库服务的对象是货主,因此整个仓储管理信息系统的出发点应以货主为中心。货主的管理就成为系统设计的关键技巧。在总体设计上考虑到业务的复杂性及繁重的客户端计算,为提高管理效率,加强仓储管理系统与外部信息交互,系统设计采用C/S+B/S结构,其结构如图1所示。

3 B/S网络模式的结构、工作原理和特点

B/S网络结构模式是基于Intranet的需求而出现并发展的。Intranet是应用TCPIP协议建立的企事业单位内部专用网络,它采用诸如TCPIP、HTTP、SMTP和HTML等Internet技术和标准,能为企事业单位内部交换信息提供服务。同时,它具有连接Internet的功能和防止外界入侵的安全措施。另一方面,由于数据库具有强大的数据存储和管理能力,并且能够动态地进行数据输入和输出,如果把数据库应用于Intranet上,不仅可以实现大量信息的网上发布,而且能够为广大用户提供动态的信息查询和数据处理服务,进而加强企事业单位内部部门之间、上级部门与下级部门之间、企事业单位员工之间、企事业单位与客户之间以及企事业单位与企事业单位之间的信息交流,降低企事业单位的日常工作成本,提高企事业单位的经济效益。

3.1 BS模式的模型结构

BS模式,即浏览器/服务器模式,是一种从传统的二层CS模式发展起来的新的网络结构模式,其本质是三层结构CS模式。

3.2 BS模式的工作原理

在B/S模式中,客户端运行浏览器软件。浏览器以超文本形式向Web服务器提出访问数据库的要求,Web服务器接受客户端请求后,将这个请求转化为SQL语法,并交给数据库服务器,数据库服务器得到请求后,验证其合法性,并进行数据处理,然后将处理后的结果返回给Web服务器,Web服务器再一次将得到的所有结果进行转化,变成HTML文档形式,转发给客户端浏览器以友好的Web页面形式显示出来。

3.3 BS模式的特点

BS模式管理信息系统基本上克服了CS 模式管理信息系统的不足,其主要表现在:

3.3.1系统开发、维护和升级的经济性

对于大型的管理信息系统,软件开发、维护与升级的费用是非常高的,BS模式所具有的框架结构可以大大节省这些费用,同时,BS模式对前台客户机的要求并不高,可以避免盲目进行硬件升级造成的巨大浪费。

3.3.2 BS模式提供了一致的用户界面

BS模式的应用软件都是基于Web浏览器的,这些浏览器的界面都很相似。对于无用户交互功能的页面,用户接触的界面都是一致的,从而可以降低软件的培训费用。

3.3.3 BS模式具有很强的开放性

在BS模式下,外部的用户亦可通过通用的浏览器进行访问。

3.3.4 B/S模式的结构易于扩展

由于Web的平台无关性,BS模式结构可以任意扩展,可以从一台服务器、几个用户的工作组级扩展成为拥有成千上万用户的大型系统。

3.3.5 BS模式具有更强的信息系统集成性

在BS模式下,集成了解决企事业单位各种问题的服务,而非零散的单一功能的多系统模式,因而它能提供更高的工作效率。

3.3.6 BS模式提供灵活的信息交流和信息发布服务
BS模式借助Internet强大的信息发布与信息传送能力可以有效地解决企业内部的大量不规则的信息交流。

4 CS网络模式的结构、工作原理和特点

CS模式是一种两层结构的系统:第一层是在客户机系统上结合了表示与业务逻辑;第二层是通过网络结合了数据库服务器。CS模式主要由客户应用程序、服务器管理程序和中间件三个部分组成。首先,交互性强是CS固有的一个优点。在CS中,客户端有一套完整应用程序,在出错提示、在线帮助等方面都有强大的功能,并且可以在子程序间自由切换。其次,CS模式提供了更安全的存取模式。由于CS配备的是点对点的结构模式,采用适用于局域网、安全性可以得到可靠的保证。而B/S采用点对多点、多点对多点这种开放的结构模式,并采用TCPIP这一类运用于Internet的开放性协议,其安全性只能靠数据服务器上管理密码的数据库来保证。由于CS在逻辑结构上比BS少一层,对于相同的任务,CS完成的速度总比BS快,使得C/S更利于处理大量数据。由于客户端实现与服务器的直接相连,没有中间环节,因此响应速度快。同时由于开发是针对性的,因此,操作界面漂亮,形式多样,可以充分满足客户自身的个性化要求。但缺少通用性,业务的变更,需要重新设计和开发,增加了维护和管理的难度,进一步的业务拓展困难较多。不过此部分内容对于管理制度成熟的仓库企业而言,其困难度并不大。

5 基于BS模式和CS模式结合策略

如上所述,BS在MIS中的一个重要用途即是WEB??而目前企业WEB的基本工作模式就是:

①WEB Browser根据用户操作对WEB Server提出访问请求。

②Server将请求分析处理,通过CGI访问DBMS以进行数据的查询统计或事务的提交。

③CGI根据DBMS返回的结果生成HTML文书经过Server向客户的Browser返回结果。

④Browser将HTML结果显示给用户。

上述流程,工作量主要在WEB Server部分,而对该部分的处理目前也有几种方法,有用CGI访问DBMS??也有依靠Web Server自身具有数据库处理能力,也有混合访问DBMS,但总的来说,对Web Server端的应用开发能满足我们的要求。

在各个子系统??3??应用上,我们仍然使用ClientServer方式,在典型的CS数据库应用中,数据的储存管理功能,是由服务器程序独立进行的,并且通常把那些不同的(不管是已知还是未知的)前台应用所不能违反的规则,在服务器程序中集中实现,例如访问者的权限,编号不准重复、必须有客户才能建立定单这样的规则。所有这些,对于工作在前台程序上的最终用户,是“透明”的,他们无须过问(通常也无法干涉)这背后的过程,就可以完成自己的一切工作。在客户服务器架构的应用中,前台程序可以变的非常“瘦小”,麻烦的事情,都交给了服务器和网络。在CS体系下,数据库真正变成了公共、专业化的仓库,受到独立的专门管理。无论你用小型XBASE类数据库,或大型的Oracle 、Sybase类数据库,在客户端你仍然要装实用程序用于数据服务器的信息联系,而同样对于大多数管理类用户??则可安装浏览器??编制一定的CGI程序??甚至利用新出现的JDBC或ASP技术??实现与后台数据库的连接。

为此,我们在仓储管理信息系统中的货主物资入出库管理采用CS模式,而在货主库存物资动态信息管理采用BS模式。具体的功能模块和数据库结构参见文献??3??。

6 结束语

对于企业的BS应用,从当前的技术水平看,特别适用于系统同用户交互量不大的应用,对于需要大量频繁、高速交互的应用系统,采用这种模式并不一定是最好的选择。采用Intranet应用模式并不一定要全部取代传统的ClientServer结构,从某种意义特别是从近期的发展看,二者应用界限并不清晰,而且往往是互相补充、相辅相成的。事实上,企业MIS采用BS模式并不是要求把应用都转到WEB Server上来,而是要根据情况来选择。那么,在应用中新的BS模式就需要能同传统的CS模式结合起来。
企业在选择MIS系统平台模式时,要考虑到BS模式的先进性,也要考虑到CS模式的成熟性,还可以根据企业自身的业务特点,采取CS与BS交叉并用的体系结构。Intranet系统的出现,其技术日益走向成熟,无疑是企业MIS建设的首选模式。但目前情况下,完全抛弃CS技术及其系统结构模式也是不实际的。一方面,原来的系统能满足使用要求的应保留使用;另一方面,CS技术能解决许多目前Intranet系统还不易解决的问题。此外,Intranet系统的优越性表现在对信息的发布、数据的收集、数据共享方面。事实上,只有将主要以数据库为处理对象的统计、分析、控制作为主体的业务处理技术(CS技术)与采用WEB技术的信息查询、发布系统的有机结合,才是仓储管理企业网络化的最佳解决方案。

参考资料:http://www.e3356.com/info/shtml/200503/1112167733137.shtml
posted @ 2008-03-31 11:08 叶儿轻飞 阅读(99) | 评论 (0) | 编辑
 

2008年3月27日

决定好好学习!
不想感觉那么失败!开始好好学习!
学习c#
  1.   安装.NET   FRAMEWORK或VS.NET  
  2.   读本C#书或网上资料  
  3.   决定方向,WinForm还是ASP.NET?  
  4.   研究FCL(FRAMEWORK   CLASS   LIBRARY)  
  5.   研究C#源码  
  6.   做项目


posted @ 2008-03-27 15:36 叶儿轻飞 阅读(17) | 评论 (0) | 编辑
 

2007年11月23日

我在这里安家啦,哈哈!

心情无限好啊,终于在这里落户了!
posted @ 2007-11-23 08:37 叶儿轻飞 阅读(20) | 评论 (1) | 编辑
 
仅列出标题