posts - 129, comments - 17, trackbacks - 0, articles - 0
  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

  《理财周刊》人脉创富系列:

    吴榳华:朋友数千 助造千万富翁

    许飞:贵人相助 人生得以飞跃

    朱艳艳:用心经营 人缘变财源

  文/本刊记者江南

  提要:常常有人抱怨,我想创一番自己的事业,却没有合适的主攻方向,缺乏必要的资金力量,更幻想能得贵人襄助。其实,庞大的资源往往就在身边,那就是无数的“人”。只要善于把握、打理、培植你的人脉,就能聚集人气,进而铸造人望,有了这样的臂助,资金、技术、渠道还不是唾手可得,何愁大事不成?

  问世间,情为何物?

posted @ 2005-09-01 19:50 woow 阅读(386) | 评论 (0)编辑 收藏

我们当中很多人不乏成功的天资,但在现实中却并未取得成功。当然,运气是一个重要原因。但更为常见的是人们日常的言行把自己拖入陷阱,从而不可避免地给自己带来了坏运气。我把这样的陷阱称为不成功者的八大致命坏习惯。

    1.自欺欺人的幻想 不成功的人在生活中总喜欢自己欺骗自己。如果仅仅是对别人不诚实,这个人至少在金钱上还有望达到目的。但如果这个人连对他自己都谈不上诚实,那他在人生路上的进步就一点也别指望了。不敢如实承认自己现状的情况很多,如自己在生活中究竟是什么样的处境,达到理想目标的前景如何,自己有哪些不足等等。

    2.缺乏创造性 我曾一遍又一遍地告诉那些没有基本生活技能的人,要靠什么东西才会让人家心甘情愿地付钱给你,即人是有所劳才有所获的。他们也不明白另一个显而易见的道理,即人们只有让自己所做之事越有价值,自己所获也就越多。大家可以看到,从事医学、法律、音乐或经济财会类的人,他们可以让人身体健康、生活幸福、玩得快乐或是收获点什么。如果经济上的成功是你所追求的目标,那你就必须在现实生活里,而不是在梦幻里制造或创造点别人很需要的东西。

    3.怠慢朋友 大凡不成功者都有一个习惯,就是喜欢讨好和巴结那些对自己并没有多大帮助的人,偏偏慢待与自己关系颇友好的人,我是非常惊讶地发现这个“规律”的。事实是,要想没有朋友们的帮助和支持赤手空拳打天下,你就别指望心想事成。在我所见过的每个失败者的例子中,不能交朋友和保持朋友间的友谊总是其中的原因之一。

    4.言行不恭 失败者待人接物的粗鲁无礼也很常见。他们不能按时赴约,不会很得体地对别人馈赠的礼物表示感谢,也不会为自己的傲慢和错误进行道歉。

    我喜欢通过统计客人迟到时间的长短来估计一个人的成功与否,职业高尚、事务繁忙、责任重大的客人一般总能准时赴约,而整天无所事事的闲人却会姗姗来迟,甚至干脆就不露面。

    5.穿着打扮不当 我还认识一个年轻漂亮的女士,她一直在拼命四处求职。我介绍她参加过一次面试。这家公司一直以其良好的家族形象为骄傲。让人难以置信的是,这位女士是穿着短裤和T恤衫、高跟凉鞋出现在总经理的餐厅里的。从她出现的那一刻开始,她自己就已毁掉了这次面试。

posted @ 2005-09-01 19:49 woow 阅读(143) | 评论 (0)编辑 收藏

【简 介】
  在传统的营销领域中,一个人要成功,必须经过许多的艰难困苦,才能玉汝于成。然而,在以网络营销为发展特色的新营销管理体系中,一个基层业务员成长为年收入达300万元的总裁,则只需完成非常简单的七个步骤就可以达到自己理想彼岸。设计这一职业进阶,是为了将企业打造成一流的国际型企业,开创新时期的蠃利法则,从而,对传统的营销理论进行彻底革命。
    
  网络营销为每个业务员都设计了一个最初的职业进阶,这是为了帮助业务员一步步成长。业务员从进入公司的第一天起,业务员就已成为公司事业的一分子,是公司大家庭中的一员。业务员成为业务组长只须完成下列程序,即可达到:

  程序一,业务员进入公司后,要接受公司统一的为期七天的教育培训,此后,还要在工作中接受每周一次的例会培训,通常在周六进行。培训的内容包括:公司背景介绍、产品知识、美容知识、营养健康知识、业务销售技巧、公司制度、业务员职业规划、业务成果分享、经验与教训等;

  程序二,业务员接受完培训后,开始分组组建各自的团队,每一小组为五人,在小组长的管理和带领下进行市场业务开发和销售工作。与传统的销售模式不同,公司的产品必须经过业务员与顾客进行一对一的沟通、面对面的交流,以零售的方式来完成的。公司产品在全国各地不设置代理商,只有通过公司的业务员以口碑传播的方式来达到交易的目的。这样的销售模式,省去了大量的中间商和广告成本,而公司却将这些成本作为奖金提成反馈给为公司事业打拼的业务员们,并培养他们成长;

  程序三,业务员每人每月必须完成公司规定的销售任务8000元人民币,在完成任务额的情况下,公司将给予业务员20%的提成奖金和500元的基本工资。如果业务员当月未完成规定的销售任务额,公司也会按业务员实际销售额给予相应的提成奖金,这些奖金的提成比例为:销售1000-2999元(包括1000元以内),提成12%;销售3000-4999元,提成15%;销售5000-7999元,提成18%;销售8000元以上,提成20%;业务员在未完成任务的情况下,将失去领取当月工资的资格。这一制度的设计充分体现了多劳多得的公平原则,旨在奖励大多数勤劳勤奋的业务员们。

  程序四,业务员连续三个月业绩达标4000元以上,或三个月总业绩达1.2万元以上,公司将通过报纸、网站等传媒手段为业务员招募新员工,帮助业务员组建自己的小组团队。业务员在平日的工作中也可以推荐自己的亲戚、朋友、同学或以前的同事进入公司工作,业务员推荐的新员工由业务员自己带队管理并组建自己的业务团队,当达到五个人定量标准后,业务员同时晋级为小组团队的组长。每一个小组团队的人数以五人为标准。五人团队的设计标准是公司根据人的工作和生活能力进行科学的设计的。这是因为,一个人最大的管理能力和传播影响力只能在五个人范围内产生效果,超过了这一标准极限,则一般人的能力将很难达到最佳状态。

  程序五,业务员成为组长后,要肩负起小组成员的管理和教育工作,小组成员的业绩由组长去督导,并协助各成员形成团队的凝聚力和战斗力,言传身教培养小组成员的业务技巧和业务能力。小组成员的业绩也是组长自己的业绩,将影响到自己的每月收入和后续的职业进阶。因此,在小组成员中要养成“帮助别人就是帮助自己”的文化理念和良好的团队工作氛围;

  程序六,业务组长以完成规定销售任务额为目标,督导小组成员完成各自的销售任务。组长当月必须个人完成销售量至少1000元以上,才有资格领取当月的工资,基本工资标准为600元。组长除领取自己的销售提成外,还可以领取团队销售业绩的提成,提成标准为5%,在当月发薪日发放。如果组长当月未达到本人至少1000元的销售额,则失去当月领取工资的资格。如果组长连续三个月本人销售均未达到1000元,则将失去团队业绩提成的资格。同时,将失去组长职务资格,小组团队转为其上级主任管理。

posted @ 2005-09-01 19:34 woow 阅读(296) | 评论 (0)编辑 收藏

很多家庭都有旧的电脑,用来跑Windows系统已经力不从心,而安装上Linux系统还可以用来做许多的事情,比如,《开放系统世界》2003年第8期《给Linux家庭网络升级》中介绍的使用Linux做NAT网关进行ADSL上网。作为一个NAT网关,给它配备显示器等外设太奢侈,我们完全可以利用Windows来省略这些配置。

    远程登录的服务器设置

    我们以Red Hat Linux为例说明。首先安装Linux,这个时候不可以省略鼠标、键盘和显示器,将网络调通,保证Windows机器可以ping到。在Linux上,使用setup命令,在出现的配置选单后,选中“System Services”,回车后出现一个服务列表选单,确保在选单中有Telnet或sshd服务(为了安全起见,一般只选择sshd即可),若它们前边的方框内没有“*”号,则按空格键选择它。还要注意,firewall configuration要开放这些端口(telnet端口号23,SSH端口号22),或者为了简单实验可以暂时选择no firewall,但是今后为了安全,还是需要建立防火墙,开放22或23端口,相关设置请参考HowTo。在Linux上,用命令“useradd myself”新建一个用户myself,再用“passwd myself”设置这个用户的密码,在服务器上这样的设置就已经可以允许远程访问了。然后将那些外设统统拿掉。

    通过telnet方式访问Linux

    Windows本身自带一个telnet客户程序,在“开始”|“运行”中输入命令“telnet”。假设以上设置的Linux服务器IP地址为192.168.0.1,输入命令“open 192.168.0.1”,输入用户名“myself”和它的密码,接下来即可模仿坐在Linux机器前边进行操作了。

需要说明一点,默认情况下,使用telnet方式不允许以root用户登录,这也是在远程登录服务器设置一节最后建立用户myself的原因,下面将要提到的SSH方式就没有这个限制。

    通过SSH方式访问Linux

    由于telnet的不安全性,现在Linux发行版大多都集成了SSH功能,而Windows本身是没有SSH Client的,需要一个第三方软件支持。这里推荐使用SecureCRT或SSH Secure Shell非商业版。前者是所有Windows下客户端中能够在一个屏幕显示最多行数的软件,非免费软件,网址为http://www.vankyde.com。后者自带一个图形化的sftp软件,方便传输文件,个人使用免费,网址为http://www.ssh.com。

    要想使用SSH传输文件,还需要Linux上允许使用ssh2。方法是在/etc/ssh下使用“more sshd_config”,看sshd_config文件中protocal一行,若这一行前没有使用“#”,而且protocal后面只有数字“1”,则说明不可使用ssh2;若不是这种情况,即可使用ssh2。图1是SecureCRT的屏幕截图,图2是SSH Secure Shell的屏幕截图,并且,这些SSH类Client一般都支持telnet方式登录。在连接对话框中输入必要的信息,即可连接Linux机器了,如图3和图4。还有其它很多优秀的类似软件,这里就不一一介绍了,有兴趣的读者可以继续寻找。


图1 SecureCRT


图2 SSH Secure Shell


图3 SecureCRT connection


图4 SSH Secure Shell connection


    使用X-Window

    如果还想使用X-Window,就必须使用X Server软件了。如果安装Linux的时候选择安装了X-Window,只要可以使用telnet或SSH,那么就可以使用X-Window,不需要做额外的设置。

    这里有个概念要澄清,X Server是在Windows上运行的软件,用来接受鼠标键盘的输入,此时在Linux上跑的是X Client,负责做出对X Server的响应。此类软件比较著名的有Exceed和Xmanage,非常可惜的是它们都是商业软件。

    Exceed的历史非常悠久,在telnet/rlogin/rsh/方式下使用X-Window很方便,它来自http://www.hummingbird.com。

    Xmanage功能也十分强大,而且我还找到了一个汉化包(for 1.3.8版本免费的汉化包),安装之后可以显示中文的X-Window。有需要的读者可以发邮件到fisherjams@tom.com向我索要。至于Xmanage本身,用Google搜索很容易找到,但要注意版权问题。

图5为Xmangae,图6是使用Xmangae连接Linux。连接建立之后,运行命令“startx”即可启动X-Window。


图5 Xmanage


图6 用Xmanage连接Linux


    通过串口方式访问Linux

    无论使用前面介绍的哪种方式,都有个前提就是Linux机器一直不重启。如果Linux重新启动,会检测键盘是否存在,机器会一直停在需要确认键盘的界面上(而此时各项服务还都没有运行)。要想绕过这个限制,就需要其它的连接方式,一种方法是将终端定向到串口上(com1或com2)。制作一根DB9串口线,两边都是母头(有插孔的那种),将一头的2、3、5脚分别与另一头的3、2、5脚连接起来就可以了,当然最标准的是使用“null modem”线。

    在Linux上可进行如下设置。在文件/etc/inittab中增加下面一行(注意,如果不采用agetty程序,采用其它的程序如like getty_ps ,应用正确的命令语法):
    ID:RUNLEVELS:respawn:/sbin/agetty -L SPEED TTY TERM

    这里,ID为两字母的标识符,如s1或s2;RUNLEVELS为终端激活的运行级别;SPEED为串口端口速率;TTY为串口的设备名;TERM为环境变量。

    范例如下:
    s2:12345:respawn:/sbin/agetty -L 9600 ttyS1 vt100

    上面命令表示串口/dev/ttyS2 (COM2 )速率为9600bps,终端模式为vt100。

最后,重新启动机器。在Windows上打开“超级终端”,在“连接时使用”下拉选单中选择com1,填入如图7的信息即可进行连接。


图7 串口连接设置


    以上介绍了使用Windows控制Linux的一些技巧和方法,这些方法在家庭中即可做实验。掌握好它们,对今后管理多个Unix/Linux服务器有着许多好处。(T111)

引文 http://tech.ccidnet.com/pub/article/c739_a188937_p1.html

posted @ 2005-08-24 10:59 woow 阅读(391) | 评论 (0)编辑 收藏

 

初买来一块硬盘,我们是没有办法使用的,你需要将它分区、格式化,然后再安装上操作系统才可以使用。一个完整硬盘的数据应该包括五部分:MBR,DBR,FAT,DIR区和DATA区。其中只有主引导扇区是唯一的,其它的随你的分区数的增加而增加。

主引导扇区

主引导扇区位于整个硬盘的0磁道0柱面1扇区,包括硬盘主引导记录MBR(Main Boot Record)和分区表DPT(Disk Partition Table)。其中主引导记录的作用就是检查分区表是否正确以及确定哪个分区为引导分区,并在程序结束时把该分区的启动程序(也就是操作系统引导扇区)调入内存加以执行。至于分区表,很多人都知道,以80H或00H为开始标志,以55AAH为结束标志,共64字节,位于本扇区的最末端。值得一提的是,MBR是由分区程序(例如DOS 的Fdisk.exe)产生的,不同的操作系统可能这个扇区是不尽相同。如果你有这个意向也可以自己去编写一个,只要它能完成前述的任务即可,这也是为什么能实现多系统启动的原因(说句题外话:正因为这个主引导记录容易编写,所以才出现了很多的引导区病毒)。

操作系统引导扇区

OBR(OS Boot Record)即操作系统引导扇区,通常位于硬盘的0磁道1柱面1扇区(这是对于DOS来说的,对于那些以多重引导方式启动的系统则位于相应的主分区/扩展分区的第一个扇区),是操作系统可直接访问的第一个扇区,它也包括一个引导程序和一个被称为BPB(BIOS Parameter Block)的本分区参数记录表。其实每个逻辑分区都有一个OBR,其参数视分区的大小、操作系统的类别而有所不同。引导程序的主要任务是判断本分区根目录前两个文件是否为操作系统的引导文件(例如MSDOS或者起源于MSDOS的Win9x/Me的IO.SYS和MSDOS.SYS)。如是,就把第一个文件读入内存,并把控制权交予该文件。BPB参数块记录着本分区的起始扇区、结束扇区、文件存储格式、硬盘介质描述符、根目录大小、FAT个数、分配单元(Allocation Unit,以前也称之为簇)的大小等重要参数。OBR由高级格式化程序产生(例如DOS 的Format.com)。

文件分配表

FAT(File Allocation Table)即文件分配表,是DOS/Win9x系统的文件寻址系统,为了数据安全起见,FAT一般做两个,第二FAT为第一FAT的备份, FAT区紧接在OBR之后,其大小由本分区的大小及文件分配单元的大小决定。关于FAT的格式历来有很多选择,Microsoft 的DOS及Windows采用我们所熟悉的FAT12、FAT16和FAT32格式,但除此以外并非没有其它格式的FAT,像Windows NT、OS/2、UNIX/Linux、Novell等都有自己的文件管理方式。

目录区

DIR是Directory即根目录区的简写,DIR紧接在第二FAT表之后,只有FAT还不能定位文件在磁盘中的位置,FAT还必须和DIR配合才能准确定位文件的位置。DIR记录着每个文件(目录)的起始单元(这是最重要的)、文件的属性等。定位文件位置时,操作系统根据DIR中的起始单元,结合FAT表就可以知道文件在磁盘的具体位置及大小了。在DIR区之后,才是真正意义上的数据存储区,即DATA区。

数据区

DATA虽然占据了硬盘的绝大部分空间,但没有了前面的各部分,它对于我们来说,也只能是一些枯燥的二进制代码,没有任何意义。在这里有一点要说明的是,我们通常所说的格式化程序(指高级格式化,例如DOS下的Format程序),并没有把DATA区的数据清除,只是重写了FAT表而已,至于分区硬盘,也只是修改了MBR和OBR,绝大部分的DATA区的数据并没有被改变,这也是许多硬盘数据能够得以修复的原因。但即便如此,如MBR/OBR/FAT/DIR之一被破坏的话,也足够咱们那些所谓的DIY老鸟们忙乎半天了……需要提醒大家的是,如果你经常整理磁盘,那么你的数据区的数据可能是连续的,这样即使MBR/FAT/DIR全部坏了,我们也可以使用磁盘编辑软件(比如DOS下的DiskEdit),只要找到一个文件的起始保存位置,那么这个文件就有可能被恢复(当然了,这需要一个前提,那就是你没有覆盖这个文件……)。

硬盘分区方式

我们平时说到的分区概念,不外乎三种:主分区、扩展分区和逻辑分区。主分区是一个比较单纯的分区,通常位于硬盘的最前面一块区域中,构成逻辑C磁盘。在主分区中,不允许再建立其它逻辑磁盘。

扩展分区的概念则比较复杂,也是造成分区和逻辑磁盘混淆的主要原因。由于硬盘仅仅为分区表保留了64个字节的存储空间,而每个分区的参数占据16个字节,故主引导扇区中总计可以存储4个分区的数据。操作系统只允许存储4个分区的数据,如果说逻辑磁盘就是分区,则系统最多只允许4个逻辑磁盘。对于具体的应用,4个逻辑磁盘往往不能满足实际需求。为了建立更多的逻辑磁盘供操作系统使用,系统引入了扩展分区的概念。

所谓扩展分区,严格地讲它不是一个实际意义的分区,它仅仅是一个指向下一个分区的指针,这种指针结构将形成一个单向链表。这样在主引导扇区中除了主分区外,仅需要存储一个被称为扩展分区的分区数据,通过这个扩展分区的数据可以找到下一个分区(实际上也就是下一个逻辑磁盘)的起始位置,以此起始位置类推可以找到所有的分区。无论系统中建立多少个逻辑磁盘,在主引导扇区中通过一个扩展分区的参数就可以逐个找到每一个逻辑磁盘。

需要特别注意的是,由于主分区之后的各个分区是通过一种单向链表的结构来实现链接的,因此,若单向链表发生问题,将导致逻辑磁盘的丢失。

既然要进行数据的恢复,当然数据的存储原理我们不能不提,在这之中,我们还要介绍一下数据的删除和硬盘的格式化相关问题……

文件的读取

操作系统从目录区中读取文件信息(包括文件名、后缀名、文件大小、修改日期和文件在数据区保存的第一个簇的簇号),我们这里假设第一个簇号是0023。

操作系统从0023簇读取相应的数据,然后再找到FAT的0023单元,如果内容是文件结束标志(FF),则表示文件结束,否则内容保存数据的下一个簇的簇号,这样重复下去直到遇到文件结束标志。

文件的写入

当我们要保存文件时,操作系统首先在DIR区中找到空区写入文件名、大小和创建时间等相应信息,然后在Data区找到闲置空间将文件保存,并将Data区的第一个簇写入DIR区,其余的动作和上边的读取动作差不多。

文件的删除

Win9x的文件删除工作却是很简单的,简单到只在目录区做了一点小改动——将目录区的文件的第一个字符改成了E5就表示将改文件删除了。

引文http://www.wxdn.net/shuju/0001.htm

posted @ 2005-08-24 10:25 woow 阅读(215) | 评论 (0)编辑 收藏

曾经努力地去奋斗但结果却失败了,这也许是人生的最大悲剧。除了少数的成功者之外,绝大多数人都遭遇过失败或正在失败。

研究证明失败的主要原因有31项,而积累财富则有13个主要原则。在这里我将陈述失败的31个主要原因。你在阅读这些原因时,应该逐点对照,看看有多少原因正是你成功的障碍。


一、不利的遗传背景。天生智力不足的人,是没什么办法可想的。唯一的补救办法就是“以勤补拙”。

二、缺乏明确的人生目标,凡是没有明确人生目标的人,便没有成功的希望,在我曾经分析过的100人中,有98个人没有这种目标,也许这是他们失败的主要原因。

三、缺乏志向与抱负,对什么都无所谓。凡不愿上进和不愿付出代价的人,便绝对没有成功的希望。

四、缺乏足够的教育。这个缺点的克服十分容易。经验证明,自学的人往往是学习得最好的人,光有一张大学文凭是不够的。光知道知识是不行的,重要的是知识的运用。人之所以能得到报酬,不是因为他们拥有知识,而是因为他们能将知识运用在工作上。

五、缺乏自律。纪律来自于自我控制,一个人必须能控制住自己所有的情绪与行为。在你要控制别人之前一定要先控制住自己。你会发现自我控制是最难的。你如果不能征服自己,就会被自己所征服。当你在镜子里看到自己时,他既是你的最好朋友,也是你最大敌人。

六、健康不佳。一个人如果没有健康的身体,便很难成功。健康不佳的原因为:
1、食物吃的太多;
2、养成消极的思想、情绪与行为;
3、性欲的不正常发泄与没有节制;
4、缺乏足够的身体锻炼;
5 、由于环境与呼吸系统的原因,而导致新鲜空气的供应不足。

七、童年时代不良环境的影响。“小树苗是弯的,长成大树后也是弯的。”多数人的犯罪倾向,都是童年时代由于不良环境和不正当的交朋友而造成的。

八、拖沓。这是最常见的一种失败原因。挥之不区的拖沓总是时刻跟随着每个人的身影,等待着破坏人们成功的机会。为什么老是失败,是因为我们总是等待!要知道时机不会“刚刚好”。就在你站立的地方,用你手中现有的工具开始干吧,无须再等!

九、缺乏百折不挠的精神。很多人做事都是虎头蛇尾,而且还有看到失败的迹象便立刻退却的倾向。百折不挠的精神是没有任何东西可以取代的。以百折不挠的精神作为座右铭的人,会发现失败因此而离去。失败抵挡不过百折不挠的精神。

十、消极的个性。消极的个性不会获得别人的合作。


十一、对性冲动缺乏控制。促使人们采取行动的所以冲动中,以性冲动为最强。因为性冲动是情绪中最强的一种,所以必须加以控制,用升华和转移的方法导入其他轨道。

十二、不能控制不良欲望。赌徒的欲望驱使着数以万计的人们走向失败。1929年华尔街股票市场的大崩溃,许许多多的人因此而破产。

十三、缺乏迅速的决断力。成功的 人都能迅速果断地下定决心,并根据情况的变化而改变他的决定。失败的人通常决定缓慢,并且常常要改变主意。犹豫不决和拖沓是孪生兄弟,只要看见一个,就会找到另一个。

十四、具有6种基本恐惧中的一种或几种。在最后一章中将会为你做分析这些恐惧。在你有效地提供个人服务之前,必须克服这些恐惧。

十五、选错结婚对象。这是失败者中常见的原因。婚姻失败的特点是充满悲哀和不愉快,这样会毁掉一个人所有的抱负。

十六、过分小心谨慎。不愿冒风险的人,通常只能选择别人剩下来的东西。过分谨慎与不够谨慎同样不足取,要防止这两个极端。人生中到处充满了不可预料的机遇。

十七、选择了错误的事业伙伴。商业的失败原因以这点为多见。一个人在寻找雇主与事业伙伴时应当极其小心,他们应当是智慧型与诚实型的。

十八、迷信和偏见。迷信是恐惧的一种,它也是无知的象征。成功的人虚怀若谷,并且无所畏惧。

十九、选错职业。一个人对他的职业不喜欢,那是不会成功的。在寻找职业中最重要的一点,便是要选择自己喜欢的职业,能全心全意去投入,以获得成功。

二十、未能专心致志。样样会一点的人,样样都不会!将你的全部努力集中在一个明确的目标上。

二十一、花钱没有节制。挥金如土者不可能成功,因为他无法过节俭的生活。要规定收入的固定比例作为储蓄,以养成有计划的储蓄习惯。一个人在谋职时能否和雇主讨价还价,它的前提往往是你在银行里有没有钱。一个人如果没有钱,就只能被迫接受别人给他的任何工作。

二十二、缺乏热情。缺乏热情的人是不会有人信任的,要知道人的热情极具感染力,热情的人往往会受到大家的欢迎。

二十三、偏执。不能容纳许多问题的人,很少能取得成就。偏执的意义便是一个人不再求知。最具有破坏性的偏执,是那些不能容忍宗教、种族以及政治观念上不同意见的、排斥异己的人。

二十四、没有节制。最具有破坏性的放纵与饮食、性的活动有关。过分沉溺在这些放纵里,都会构成你事业的致命伤,使你很难获得成功。

二十五、没有与别人合作的能力。因为不能与别人合作,而丧失地位和机遇的人为数太多。凡是要求自己成功或成为领袖的人,都不会容忍这样的缺点。

二十六、拥有不是靠自己努力而获得的权利。象富人的子女和遗产获得者,手中的权力与财富并不是靠自己勤劳努力而得来的,这也会成为成功的致命伤。突然暴富比贫穷还要危险。

二十七、蓄意欺骗。诚实是没有什么东西可以取代的。一个人由于处在某种不利的环境中而一时撒谎,是可以谅解的。但是一个蓄意欺骗的人则不会有成功的希望,他迟早要自食恶果,其代价从丧失信誉直至丧失自由。

二十八、自大和虚荣。这些缺点好象是红灯一般,令人望而止步,它们是成功的致命伤。

二十九、以猜测代替思考。大多数人不很注意问题的实质,他们宁愿凭着猜测或草率的判断去采取行动。

三十、缺乏资本。开创了事业,但没有足够的后备资本来承受他们所犯的错误,于是虽有友人相助也未能度过难关,这是一个令很多人失败的常见原因。

三十一、在这里你还可以从你自己的经历中找出一样前面未曾列出的失败原因。

这31条失败的原因是人生悲剧的证明。如果你能请一位了解你的人和你一起对照这些失败的原因,逐条地加以分析,那将是有益的。如果你独自对照分析,当然也可以,但对大多数人来说,往往是当局者迷,旁观者清,人们总是无法象别人那样清楚地看透自己。

posted @ 2005-08-20 13:13 woow 阅读(305) | 评论 (0)编辑 收藏

值得关注的持久化技术: hibernate

      大家都是怎样持久化数据的呢?ejb(cmp)? jdo? jdbc+sql?     

这里我要向大家推举另一个值得关注的对象-关系映射框架hibernate,它是sourceforge.net的一个子项目,

本文旨在用例子给出大概轮廓(很省时间),具体请参考其自带的优秀文档。

参考:一群牛人关于jdo和ejb的讨论:Java object models debated 其中也提到了此开源项目。

1.简述:

    学习一项新的技术要花时间的,它会不会把时间在使用它之后补回来是应该关注的问题:

我们可以用关键字:"jdo ejb cmp hibernate"在google上找一找对他们的评论文章,其中只要使用

过hibernate的人都对它很推崇(我也是).

    我们的对象模型可以被hibernate很好的利用,下图中的Persistent Object是简单的业务实体对象

(要被持久化的对象)。通过hibernate被透明的持久化到数据库中。下面的例子会说明一切。

2.一个简单的例子

我们开发一个Person类:

可以想象数据表是下面的样子:

表person

id(primary key) name address
000000001 陈鹏 西安
...    

要通过hibernate实现它要经过以下步骤:

    主要是先根据对象模型编写简单的业务实体类(简单的bean规范类,即有get,set方法的类,可以用jac等工具生成),

再用xml映射文件描述其映射数据库的方式(很easy),最后就可以通过很少的hibernate api写测试类对其进行持久化

操作。

2.1 写Person类(Persistent Object),它和普通的类没甚末不同,但注意它应该复合bean的规范,为每个属性提供get,set方法:

h.Person
//
// WARNING: this file has been automatically generated by JAC
// DO NOT MODIFY unless you know what you are doing
//

package h;

public class Person {

    String name;

/**
Sets the value of field name.
@param name value of field name
*/

    public void setName(String value) {
        this.name=value;
    }

/**
Gets the value of field name.
@return value of field name
*/

    public String getName() {
        return name;
    }

    String address;

/**
Sets the value of field address.
@param address value of field address
*/

    public void setAddress(String value) {
        this.address=value;
    }

/**
Gets the value of field address.
@return value of field address
*/

    public String getAddress() {
        return address;
    }

    String id;

/**
Sets the value of field id.
@param id value of field id
*/

    public void setId(String value) {
        this.id=value;
    }

/**
Gets the value of field id.
@return value of field id
*/

    public String getId() {
        return id;
    }
}

 

2.2 填写对象-关系映射xml文件,不用担心它的复杂程度,我们可以抄嘛:

和所有o-r 映射工具一样都要写这种映射文件。

Person.hbm.xml 建议命名为:"类名"+"hbm.xml" 并且放置在Person类相同包目录下
<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
<hibernate-mapping>

	<class name="h.Person">
	    <!--hibernate为我们生成主键id-->
		<id name = "id" unsaved-value = "null">
			<generator class="uuid.hex"/>
		</id>
		
	    <!--默认把类的变量映射为相同名字的表列,当然我们可以修改其映射方式-->
		<property name="name"/>
		<property name="address"/>
	</class>
</hibernate-mapping>
 

2.3 TestPerson 我们用hibernate api来进行持久化Person

h.TestPerson 
package h;

import net.sf.hibernate.Session;
import net.sf.hibernate.Transaction;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;
import net.sf.hibernate.tool.hbm2ddl.SchemaExport;

class TestPerson{ 

	private static SessionFactory sessions;

    public static void main(String[] args) throws Exception{        	
    	//配置环境,分析xml映射文件
    	Configuration conf= new Configuration()
			.addClass(Person.class);
        
        //生成并输出sql到文件(当前目录)和数据库
        SchemaExport dbExport=new SchemaExport(conf);
        dbExport.setOutputFile("build\\sql.txt");
        dbExport.create(true, true);
 
		sessions = conf.buildSessionFactory();
        //以上都是些固定格式的环境配置
        
        //start......
        Session s = sessions.openSession();
		Transaction t =  s.beginTransaction();
	    
        //1.用普通使用方式建立对象,填充数据
	    Person p1=new Person();
	    p1.setName("陈鹏");
	    p1.setAddress("西安东郊黄陵");
	    
	    //2.持久化
	    s.save(p1);
		//此时p1已经可以在数据库中找到

	    t.commit();
	    s.close();
    }
}

 

2.4 为了运行当然要配置数据库:我以mysql数据库为例子:(只用劳动1次即可)

hibernate.properties 在hibernate源程序的根目录可以找到此文件模板,copy到我们的类的根目录。即:“..\h”
## MySQL
## 前两行人家都给你填好了,只用填数据库连接和username,password
hibernate.dialect net.sf.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class org.gjt.mm.mysql.Driver
hibernate.connection.url jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=GBK
hibernate.connection.username root
hibernate.connection.password 

2.5 运行TestPerson类,在mysql中观察create好的表person和其中的数据

ok!整个过程主要的是前3步:写bean类(Persistent Object),写o-r映射文件,写存取测试类。

3. 复杂关系例子

我们换一个稍微复杂的例子来看看:

可以想象数据表是下面的样子:

表person

id(primary key) company_id name address
000000001 000000002 陈鹏 西安
       

表Company

id(primary key) name
000000002 东软
...  

 

3.1 Person(已有),Company类:Persistent Object

h.Company
package h;
public class Company {
    String id;
    public void setId(String value) {
        this.id=value;
    }
    public String getId() {
        return id;
    }
    String name;
    public void setName(String value) {
        this.name=value;
    }
    public String getName() {
        return name;
    }
    java.util.List employees=new java.util.Vector();
    public void setEmployees(java.util.List value) {
        this.employees=value;
    }
    public java.util.List getEmployees() {
        return employees;
    }
    public void addEmployee(h.Person value) {
        employees.add(value);
    }
    public void removeEmployee(h.Person value) {
        employees.remove(value);
    }
    public void clearEmployees() {
        employees.clear();
    }
}
 

3.2 填写对象-关系映射xml文件,Person.hbm.xml照旧

Company.hbm.xml 也放到h.Company类相同目录下
<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
<hibernate-mapping>
	<class name="h.Company">
	    <!--hibernate为我们生成主键id-->
		<id name = "id" unsaved-value = "null">
			<generator class="uuid.hex"/>
		</id>
		
        <property name="name"/>
	    <!--1:n关系的映射-->
	    <list name="employees" cascade="all">
            <key column="company_id"/>
            <index column="posn"/>
            <one-to-many class="h.Person"/>
        </list>
	</class>
</hibernate-mapping>
 

3.3 TestCompany 我们用hibernate api来进行持久化Person,Company

h.TestCompany
package h;

import net.sf.hibernate.Session;
import net.sf.hibernate.Transaction;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;
import net.sf.hibernate.tool.hbm2ddl.SchemaExport;

class TestCompany{ 

	private static SessionFactory sessions;

    public static void main(String[] args) throws Exception{        	
    	//配置环境,分析xml映射文件
    	Configuration conf= new Configuration()
			.addClass(Person.class)
			.addClass(Company.class);
        
        //生成并输出sql到文件(当前目录)和数据库
        SchemaExport dbExport=new SchemaExport(conf);
        dbExport.setOutputFile("build\\sql.txt");
        dbExport.create(true, true);
 
		sessions = conf.buildSessionFactory();
        //以上都是些固定格式的环境配置
        
        //start......
        Session s = sessions.openSession();
		Transaction t = s.beginTransaction();
	    
	    //1.用普通方式建立对象,填充数据
	    Company c=new Company();
	    c.setName("东软");
	    
	    Person p1=new Person();
	    p1.setName("陈鹏");
	    p1.setAddress("西安东郊黄陵");

	    Person p2=new Person();
	    p2.setName("孙昱鹏");
	    p2.setAddress("南郊电子城");
	    
	    c.addEmployee(p1);
	    c.addEmployee(p2);
	    
	    //2.持久化
	    s.save(c);
		//此时c,p1,p2已经可以在数据库中找到
  
	    t.commit();
	    s.close();
    }
}

 

3.4 不用再配置数据库了。

3.5 运行TestCompany类,在mysql中观察create好的表person和Company其中的数据.

总结:

      这里只展现了极为简单的2个持久化例子,更多的1:1,1:n,m:n等的对象模型的实现请看hibernate附带的文档,

越是复杂的模型越能体现其威力。  使用hibernate,jdo,ejb这样的对象-关系映射中间件的好处是显而易见的,

还在刻苦写sql+jdbc的同志们该歇歇了,我是辛苦够了!(你不会自己去构建这样的中间件吧,厉害!)

例子下载:

Person类的例子

Person-Company的例子

2个例子都需要hibernate的lib,请自行下载hibernate

参考连接:

xPetstore 3.0 应用hibernate的一个完整的例子.

异常活跃的hibernate

mysql:http://www.mysql.com/

mysql的一个很简单好用的图形客户端:http://www.mysqlstudio.com/

我的另一篇介绍jdo的文章



引文 http://www.huihoo.com/java/hibernate/index.htm

陈鹏,东软西安公司。作为一名狂热的程序员希望每一天都能成长进步,并希望与大家分享快乐和知识。
请用以下方式和他联系:email chen56@msn.com  

posted @ 2005-08-16 10:10 woow 阅读(233) | 评论 (0)编辑 收藏

概述:CVS是一个C/S系统,多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的。

       CVS服务器(文件版本库)
     /     |       \
(版 本 同 步)
   /       |         \  
开发者1  开发者2   开发者3

以下是本文主要内容:开发人员可以主要挑选2, 6看就可以了,CVS的管理员则更需要懂的更多一些

  1. CVS环境初始化:CVS环境的搭建                                          管理员
  2. CVS的日常使用:日常开发中最常用的CVS命令,              开发人员      管理员
  3. CVS的分支开发:项目按照不同进度和目标并发进行                         管理员
  4. CVS的用户认证:通过SSH的远程用户认证,安全,简单                      管理员
  5. CVSWEB:CVS的WEB访问界面大大提高代码版本比较的效率                    管理员
  6. CVS TAG:将$Id$加入代码注释中,方便开发过程的跟踪       开发人员
  7. CVS vs VSS: CVS和Virsual SourceSafe的比较

一个系统20%的功能往往能够满足80%的需求,CVS也不例外,以下是CVS最常用的功能,可能用到的还不到它全部命令选项的10%,更多的功能请在实际应用过程中体会,学习过程中应该是用多少,学多少,用到了再学也不迟。


CVS环境初始化
============

环境设置:指定CVS库的路径CVSROOT
tcsh
setenv CVSROOT /path/to/cvsroot
bash
CVSROOT=/path/to/cvsroot ; export CVSROOT

后面还提到远程CVS服务器的设置:
CVSROOT=:ext:$USER@test.server.address#port:/path/to/cvsroot CVS_RSH=ssh; export CVSROOT CVS_RSH

初始化:CVS版本库的初始化。
cvs init

一个项目的首次导入
cvs import -m "write some comments here" project_name vendor_tag release_tag
执行后:会将所有源文件及目录导入到/path/to/cvsroot/project_name目录下
vender_tag: 开发商标记
release_tag: 版本发布标记

项目导出:将代码从CVS库里导出
cvs checkout project_name
cvs 将创建project_name目录,并将最新版本的源代码导出到相应目录中。这个checkout和Virvual SourceSafe中的check out不是一个概念,相对于Virvual SourceSafe的check out是cvs update, check in是cvs commit。

CVS的日常使用  
=============

注意:第一次导出以后,就不是通过cvs checkout来同步文件了,而是要进入刚才cvs checkout project_name导出的project_name目录下进行具体文件的版本同步(添加,修改,删除)操作。

将文件同步到最新的版本:
cvs update
不制定文件名,cvs将同步所有子目录下的文件,也可以制定某个文件名/目录进行同步
cvs update file_name
最好每天开始工作前或将自己的工作导入到CVS库里前都要做一次,并养成“先同步 后修改”的习惯,和Virvual SourceSafe不同,CVS里没有文件锁定的概念,所有的冲突是在commit之前解决,如果你修改过程中,有其他人修改并commit到了CVS库中,CVS会通知你文件冲突,并自动将冲突部分用
>>>>>>
content on cvs server
<<<<<<
content in your file
>>>>>>
标记出来,由你确认冲突内容的取舍。
版本冲突一般是在多个人修改一个文件造成的,但这种项目管理上的问题不应该指望由CVS来解决。

确认修改写入到CVS库里:
cvs commit -m "write some comments here" file_name

注意:CVS的很多动作都是通过cvs commit进行最后确认并修改的,最好每次只修改一个文件。在确认的前,还需要用户填写修改注释,以帮助其他开发人员了解修改的原因。如果不用写-m "comments"而直接确认`cvs commit file_name` 的话,cvs会自动调用系统缺省的文字编辑器(一般是vi)要求你写入注释。
注释的质量很重要:所以不仅必须要写,而且必须写一些比较有意义的内容:以方便其他开发人员能够很好的理解
不好的注释,很难让其他的开发人员快速的理解:比如: -m "bug fixed" 甚至 -m ""
好的注释,甚至可以用中文: -m "在用户注册过程中加入了Email地址校验"


修改某个版本注释:每次只确认一个文件到CVS库里是一个很好的习惯,但难免有时候忘了指定文件名,把多个文件以同样注释commit到CVS库里了,以下命令可以允许你修改某个文件某个版本的注释:
cvs admin -m 1.3:"write some comments here" file_name

添加文件
创建好新文件后,比如:touch new_file
cvs add new_file
注意:对于图片,Word文档等非纯文本的项目,需要使用cvs add -b选项,否则有可能出现文件被破坏的情况
比如:cvs add -kb new_file.gif
然后确认修改并注释
cvs ci -m "write some comments here"

删除文件:
将某个源文件物理删除后,比如:rm file_name
cvs rm file_name
然后确认修改并注释
cvs ci -m "write some comments here"
以上面前2步合并的方法为:
cvs rm -f file_name
cvs ci -m "why delete file"

注意:很多cvs命令都有缩写形式:commit=>ci; update=>up; checkout=>co; remove=>rm;


添加目录:
cvs add dir_name

查看修改历史:cvs log file_name
cvs history file_name

查看当前文件不同版本的区别
cvs diff -r1.3 -r1.5 file_name
查看当前文件(可能已经修改了)和库中相应文件的区别
cvs diff file_name
cvs的web界面提供了更方便的定位文件修改和比较版本区别的方法,具体安装设置请看后面的cvsweb使用

正确的通过CVS恢复旧版本的方法:
如果用cvs update -r1.2 file.name
这个命令是给file.name加一个STICK TAG: "1.2" ,虽然你的本意只是想将它恢复到1.2版本
正确的恢复版本的方法是:cvs update -p -r1.2 file_name >file_name
如果不小心已经加成STICK TAG的话:用cvs update -A 解决

移动文件:文件重命名
cvs里没有cvs move或cvs rename,因为这两个操作是先cvs remove old_file_name,然后cvs add new_file_name实现的。

删除,移动目录:
最方便的方法是让管理员直接移动,删除CVSROOT里相应目录(因为CVS一个项目下的子目录都是独立的,移动到$CVSROOT目录下都可以作为新的独立项目:好比一颗树,其实砍下任意一枝都能独立存活),对目录进行了修改后,要求其开发人员重新导出项目cvs checkout project_name 或者用cvs update -dP同步。

CVS Branch:项目多分支同步开发
=============================

确认版本里程碑:多个文件各自版本号不一样,项目到一定阶段,可以给所有文件统一指定一个阶段里程碑版本号,方便以后按照这个阶段里程碑版本号导出项目,同时也是项目的多个分支开发的基础。
cvs tag release_1_0

开始一个新的里程碑:
cvs commit -r 2 标记所有文件开始进入2.x的开发

注意:CVS里的revsion和软件包的发布版本可以没有直接的关系。但所有文件使用和发布版本一致的版本号比较有助于维护。

在开发项目的2.x版本的时候发现1.x有问题,但2.x又不敢用,则从先前标记的里程碑:release_1_0导出一个分支release_1_0_patch
cvs rtag -b -r release_1_0 release_1_0_patch proj_dir

一些人先在另外一个目录下导出release_1_0_patch这个分支:解决1.0中的紧急问题,
cvs checkout -r release_1_0_patch
而其他人员仍旧在项目的主干分支2.x上开发

在release_1_0_patch上修正错误后,标记一个1.0的错误修正版本号
cvs tag release_1_0_patch_1

如果2.0认为这些错误修改在2.0里也需要,也可以在2.0的开发目录下合并release_1_0_patch_1中的修改到当前代码中:
cvs update -j release_1_0_patch_1

CVS的远程认证:通过SSH远程访问CVS
================================

使用cvs本身的远程认证很麻烦,需要定义服务器和用户组,用户名,设置密码等,而且不安全,因此和系统本地帐号认证并通过SSH传输是比较好的办法,通过在客户机的/etc/profile里设置一下内容:
CVSROOT=:ext:$USER@test.server.address#port:/path/to/cvsroot CVS_RSH=ssh; export CVSROOT CVS_RSH
所有客户机所有本地用户都可以映射到CVS服务器相应同名帐号了。

如果CVS所在服务器的SSH端口不在缺省的22,或者和客户端与CVS服务器端SSH缺省端口不一致,有时候设置了:
:ext:$USER@test.server.address#port:/path/to/cvsroot 

仍然不行,比如有以下错误信息:
ssh: test.server.address#port: Name or service not known
cvs [checkout aborted]: end of file from server (consult above messages if any)

解决的方法是做一个脚本指定端口转向(不能使用alias,会出找不到文件错误):
创建一个/usr/bin/ssh_cvs文件:
#!/usr/bin/sh
/path/to/ssh -p 34567 "$@"
然后:chmod +x /usr/bin/ssh_cvs
并CVS_RSH=ssh_cvs; export CVS_RSH

注意:port是指相应服务器SSH的端口,不是cvs pserver的端口

CVSWEB:提高程序员比较文件修改效率
================================

CVSWEB就是CVS的WEB界面,可以大大提高程序员定位修改的效率:
使用的样例可以看:http://www.freebsd.org/cgi/cvsweb.cgi

CVSWEB的下载:CVSWEB从最初的版本已经演化出很多功能界面更丰富的版本,这个是个人感觉觉得安装设置比较方便的:
http://www.spaghetti-code.de/software/linux/cvsweb/

下载解包:
tar zxf cvsweb.tgz
把配置文件cvsweb.conf放到安全的地方(比如和apache的配置放在同一个目录下),
修改:cvsweb.cgi让CGI找到配置文件:
$config = $ENV{'CVSWEB_CONFIG'} || '/path/to/apache/conf/cvsweb.conf';

转到/path/to/apache/conf下并修改cvsweb.conf:

  1. 修改CVSROOT路径设置:
    %CVSROOT = (
    'Development' => '/path/to/cvsroot', #<==修改指向本地的CVSROOT
    );
  2. 缺省不显示已经删除的文档:
    "hideattic" => "1",#<==缺省不显示已经删除的文档
  3. 在配置文件cvsweb.conf中还可以定制页头的描述信息,你可以修改$long_intro成你需要的文字

CVSWEB可不能随便开放给所有用户,因此需要使用WEB用户认证:
先生成 passwd:
/path/to/apache/bin/htpasswd -c cvsweb.passwd user

修改httpd.conf: 增加
<Directory "/path/to/apache/cgi-bin/cvsweb/">
AuthName "CVS Authorization"
AuthType Basic
AuthUserFile /path/to/cvsweb.passwd
require valid-user
</Directory>

CVS TAGS: who? when?
====================

将$Id$ 加在程序文件开头的注释里是一个很好的习惯,cvs能够自动解释更新其中的内容成:file_name version time user_name 的格式,比如:cvs_card.txt,v 1.1 2002/04/05 04:24:12 chedong Exp,可以这些信息了解文件的最后修改人和修改时间

几个常用的缺省文件:
default.php
<?php
/*
* Copyright (c) 2002 Company Name.
* $Header$
*/

?>

====================================
Default.java: 注意文件头一般注释用 /* 开始 JAVADOC注释用 /** 开始的区别
/*
* Copyright (c) 2002 Company Name.
* $Header$
*/

package com.netease;

import java.io;

/**
* comments here
*/
public class Default {
    /**
    *
    * @param
    * @return
    */
    public toString() {

    }
}

====================================
default.pl:
#!/usr/bin/perl -w
# Copyright (c) 2002 Company Name.
# $Header$

# file comments here

use strict;

CVS vs VSS 
===========

CVS没有文件锁定模式,VSS在check out同时,同时记录了文件被导出者锁定。

CVS是update commit, VSS是check out check in

在CVS中,标记自动更新功能缺省是打开的,这样也带来一个潜在的问题,就是不用-kb方式添加binary文件的话在cvs自动更新时可能会导致文件失效。

Virsual SourceSafe中这个功能称之为Keyword Explaination,缺省是关闭的,需要通过OPITION打开,并指定需要进行源文件关键词扫描的类型:*.txt,*.java,*.html...

对于Virsual SourceSafe和CVS都通用的TAG有:
$Header$
$Author$
$Date$
$Revision$

尽量使用通用的关键词保证代码在CVS和VSS都能方便的跟踪。

 

相关资源:

CVS HOME:
http://www.cvshome.org

CVS FAQ:
http://www.loria.fr/~molli/cvs-index.html

相关网站:
http://directory.google.com/Top/Computers/Software/Configuration_Management/Tools/Concurrent_Versions_System/

CVS 免费书:
http://cvsbook.red-bean.com/

CVS 命令的速查卡片:
http://www.refcards.com/about/cvs.html


摘自:http://www.chedong.com/tech/cvs_card.html

posted @ 2005-08-16 10:07 woow 阅读(249) | 评论 (0)编辑 收藏

· SqlConnection (.NET)
      o 标准连接(Standard Security):
      "Data Source=Aron1;Initial Catalog=pubs;User Id=sa;Password=asdasd;"
      或者
      "Server=Aron1;Database=pubs;User ID=sa;Password=asdasd;Trusted_Connection=False"
      (这两个连接串的结果相同)
      o 信任连接(Trusted connection):
      "Data Source=Aron1;Initial Catalog=pubs;Integrated Security=SSPI;"
      或者
      "Server=Aron1;Database=pubs;Trusted_Connection=True;"
      (这两个连接串的结果相同)
      (可以用serverName\instanceName代替Data Source,取值为一个具体的SQLServer实例,但仅适用于 SQLServer2000)
      o 通过IP地址连接:
      "Data Source=190.190.200.100,1433;Network Library=DBMSSOCN;Initial Catalog=pubs;User ID=sa;Password=asdasd;"
      (DBMSSOCN=TCP/IP代替Named Pipes, Data Source的末尾是需要使用的端口号(缺省为1433))
      o SqlConnection连接的声明:
      C#:
      using System.Data.SqlClient;
      SqlConnection SQLConn = new SqlConnection();
      SQLConn.ConnectionString="my connectionstring";
      SQLConn.Open();
     
      VB.NET:
      Imports System.Data.SqlClient
      Dim SQLConn As SqlConnection = New SqlConnection()
      SQLConn.ConnectionString="my connectionstring"
      SQLConn.Open() 

  ·o 标准连接:
      "Data Source=Oracle8i;Integrated Security=yes";
      这只对Oracle 8i release 3或更高版本有效
      o OracleConnection声明:
      C#:
      using System.Data.OracleClient;
      OracleConnection OracleConn = new OracleConnection();
      OracleConn.ConnectionString = "my connectionstring";
      OracleConn.Open();

http://erwin.softwarechn.com/view.asp?ID=191
Conn="server=localhost;uid=sa;pwd=sa;database=flyring
SQLServer是采用集成登录的,而现在用uid,pwd也就是混合登录,所以会被
SQLServer拒绝
"Data Source=(local);Intergrated Security=SPII;Initial Catalog=Flyring");
conn ="server=localhost;database=flyringIntegrated Security=SSPI;Persist Security Info=False;"

posted @ 2005-08-16 08:35 woow 阅读(296) | 评论 (0)编辑 收藏

基本方式:在平台如ASP.NET中可以使用Visual Studio .NET工具制作表单,在java平台下的jsp中的表单可以使用JBuilder或是Eclipse制作表单,这些工具都提供了可视化的,即见即所得的编辑方式,但此类工具都常偏重于给程序设计,所以要制作一个漂亮的界面,基本上都需要使用工具中的原码编辑来制作。程序编码效率虽然很高,可是很难达到一个美化效果。

推荐方式一:借助DW工具。

  DW也就是由macromedia出品的Dreamweaver。Dreamweaver家族一直是Web美工的最爱,也是目前最强大的网页制作工具之一。DW其实对程序人员有一个好处,无论希望制作任何语言和平台下的表单,DW中都可以做到,更重要的是DW能满足任何美术要求下的表单制作。

  DW工具界面


此主题相关图片如下:

在DW做表单界面时如果能学会熟练使用DW中一些功能,可以大大的加快制作表单的速度:在此列出给大家作为参考。

1、学会使用设计区或代码区下的块代码选中功能。

2、输入区的html控件使用css样式来控制外观。(最好养成样式名一致的习惯)

3、css样式内容存入外部文件,在需要的页面中引入该css文件内容。

4、辅助各种表单功能的javascript内容做成function并存成一个单独文件。

5、适当并且合理的使用DW提供的模板(Template)和库(Library)功能来存放界面中被重用的代码。

推荐方式二:CSS2.0。

CSS2.0是一套全新的样式表结构,是由W3C推行的,同以往的CSS1.0或CSS1.2完全不一样,CSS2.0推荐的是一套内容和表现效果分离的方式,HTML元素可以通过CSS2.0的样式控制显示效果,可完全不使用以往HTML中的table和td来定位表单的外观和样式,只需使用div和Li此类HTML标签来分割元素,之后即可通过CSS2.0样式来定义表单界面的外观。

CSS2.0提供给我们了一个机制,让程序员开发时可以不考虑显示和界面就可以制作表单和界面,显示问题可由美工或是程序员后期再来编写相应的CSS2.0样式来解决。不过由于CSS2.0目前尚未见过很好的编辑软件,所以无法做到所见即所得,编写起来不易!国内纯美工能编写CSS2.0样式的我还没见过。呜呼,还是要程序员自己来写。但是CSS2.0起码已经给我们开启了一个美好的明天。关于CSS2.0有兴趣的朋友可以查看W3C的资料。 http://www.w3.org/TR/REC-CSS2/

方式三(重点推荐):NoahWeb引擎所提供的表单制作方式。

NoahWeb不愧为新一代的轻量级B/S应用开发引擎,NoahWeb提供了一整套非常强大的表单制作机制,使用NoahWeb开发B/S应用时,程序人员完全可以不用考虑表单的外观,用NoahWeb提供的XML格式结构化标签可定义表单,表单的最终显示效果完全由美术设计的表单模板决定。表现和结构分离,重用性也非常的好。

假设需要制作一个下面这样一个登陆表单界面:如下图:


此主题相关图片如下:

在NoahWeb中定义的时候就可以用下面的代码(大家不要被这些代码吓倒,仔细看,非常容易懂):


posted @ 2005-08-16 07:24 woow 阅读(321) | 评论 (0)编辑 收藏

仅列出标题
共13页: 1 2 3 4 5 6 7 8 9 Last