首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 数据库 第二书店 程序员

wukele/ 


共300个网摘 [ 1  2  3  4  5  6  7  8  9  10 ]  上一页 | 下一页  |  访问wukele的个人空间

一个值得研究的系统存储过程 sp_MSforeachtable - lee576的专栏 - CSDNBlog

wukele收录,使用标签:sql,时间:2008-3-30 16:52:24 | 相关网摘我也收藏

sp_MSforeachtable @command1='Delete from ?'
这样可以删除所有表中的数据

也可以这样写

sp_MSforeachtable @command1 = "TRUNCATE TABLE ?"

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

创建一个新表AAA,表中包含其它表的名称和记录数量:

create table AAA(id int identity(1,1),tablename varchar(50),[rowcount] int)

delete from AAA

exec sp_msforeachtable 'insert AAA(tablename, [rowcount]) select N''?'', count(*) from ?'

select * from AAA where AAA.[rowcount]>0

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

1。在sql server2000下一个数据库中有建立了几十个表,现在要给每个表增加同样的列。可以用"alter table"语句,但是这么多表一个一个的操作太麻烦,有什么方法可以操作循环每一个表呢?
方法:sp_msforeachtable 'alter table ? add 列名 int'



2。假设所有表中的'note' 字段不能为空,如果为空则要改为"。
方法:sp_msforeachtable 'update ? set note='''' where note is null'

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

结论: 看了很多例子以后发现sp_msforeachtable 里面那个问号指代数据库中所有的表

此存储过程还有一个参数为@whereend,可以这么写 @whereend='name in 'table1','table2',... ...'

这个参数是限制此存储过程的操作用于哪些表



sql server 面试时 的考题!!(整理) MS-SQL Server / 应用实例 - CSDN社区 community.csdn.net

wukele收录,时间:2008-3-26 21:23:26 | 相关网摘我也收藏

首先需要知道这些磁盘是否要用于存放数据库备份文件和数据库性能(读/写)要求。来决定raid的级别。
1)、如果偏重于性能考虑,而且不用


NOT IN null 的问题

wukele收录,使用标签:sql,时间:2008-3-20 22:41:50 | 相关网摘我也收藏

--1. NULL 对 IN(NOT IN) 查询的影响
--测试数据
DECLARE @1 TABLE(col1 int)
INSERT @1 SELECT 1
UNION ALL SELECT NULL
UNION ALL SELECT 2

DECLARE @2 TABLE(col1 int)
INSERT @2 SELECT 1

--查询
SELECT [@1总记录数]=COUNT(*) FROM @1
--结果: 3

SELECT [@1在@2表中存在的记录数]=COUNT(*) FROM @1 a
WHERE col1 IN(SELECT col1 FROM @2)
--结果: 1

SELECT [@1在@2表中存


小小鱼之家: dtree动态树 Javascript右键菜单(一)(实现动态树)

wukele收录,使用标签:JavaScrip,时间:2008-3-20 19:32:32 | 相关网摘我也收藏

dtree动态树+Javascript右键菜单(一)(实现动态树)
:)
第一部分已经介绍过dtree的实现及布署方法,下面介绍从数据库中取数据动态生成树的方法。也是粉简单地说哦:)

1、既然是从数据库中取数据,首先需要建数据表,命名为TreeInfo。
可以参照dtree目录下的api.html文件中介绍的各个参数,来创建数据表
比如我的TreeInfo中包含如下字段:
CREATE TABLE TreeInfo (
nodeid number(10,0),
parentid number(10,0),
caption varchar(200),
nodeurl varchar(200),
target varchar(200),
tipinfo varchar(200),
icon varchar(200),
iconopen varchar(200),
isopen number(10,0))
2、在数据库中创建这样的表
写入几条数据:
insert into TreeInfo (nodeid, parentid, caption, nodeurl, target) values (1,0,'node 1','jsp1.jsp','mainFrame');
insert into TreeInfo (nodeid, parentid, caption, nodeurl, target) values (2,0,'node 1','jsp1.jsp','mainFrame');
insert into TreeInfo (nodeid, parentid, caption, nodeurl, target) values (3,1,'node 1','jsp1.jsp','mainFrame');
insert into TreeInfo (nodeid, parentid, caption, nodeurl, target) values (4,1,'node 1','jsp1.jsp','mainFrame');
insert into TreeInfo (nodeid, parentid, caption, nodeurl, target) values (5,2,'node 1','jsp1.jsp','mainFrame');
3、写一个类,把TreeInfo表中的数据取出来封装在一个TreeInfoVO类中。(该类为一个数据Bean),多条记录封装在一个ArrayList中。
4、修改TreeInfo.jsp页面
修改其中生成树的javascript代码:




5、重新运行应用程序,动态树显示出来。


LinuxYang

wukele收录,使用标签:blog,时间:2008-3-20 19:10:37 | 相关网摘我也收藏


CSDN技术中心 安装Eclipse和Lomboz碰到的一些问题

wukele收录,时间:2008-3-15 19:31:38 | 相关网摘我也收藏

安装步骤无非是下载、解压、拷贝、配置,网上一大把教程,不需多说。

安装时有些小问题值得注意:
1、下载时注意Eclipse和Lomboz版本号很重要
一般来说相同版本号的才比较兼容。
即:2.0的Eclipse对应插件就装2.0的Lomboz;Eclipse3.01就对应装插件lomboz.301,这样不容易出错,下载时最好认真看清楚网站上的说明,否则有时安装总出现莫名其妙的问题,浪费时间。

2、安装Lomboz需要gef和emf插件的支持,所以光下载安装 Eclipse3.01,和lomboz.301.zip还不够,必须下载以下四个插件:
Eclipse3.01
lomboz.301.zip
GEF-runtime-3.0.1.zip
emf-sdo-runtime-2.0.0.zip

这一点很容易被忽视,结果安装时有时就会碰到一个问题:
按照步骤安装好后,启动Eclipse,结果【window】--->【Preference】左侧菜单上跟本找不到lomboz一项。
而在【Help】-->【About Eclipse Platform】--->【Plug-in Details】 里面查看,却又明明显示lomboz插件已都安装好了。这个问题折腾了我半天,网上一些中文安装教程都没明确说清楚,其实要安装好lomboz,gef和emf这两个插件也是需要装的。

3、有时启动Eclipse未加载插件,解决方法很多,总结一下:

a 、 删除整个目录/eclipse/configuration/org.eclipse.update/,重启Eclipse

b 、在启动Eclipse时带上 -clean参数
如:d:\eclipse\eclipse.exe -clean

c 、 如果Eclipse启动找不到插件了,解决办法: 在/configuration/config.ini文件中加入一行
osgi.checkConfiguration=true
这样它会寻找并安装插件,找到后可以把那行再注释掉,这样以后每次启动就不会因寻找插件而显得慢了。

4、为了便于管理众多插件,建议用links方式安装各种eclipse插件




CSS 教程

wukele收录,使用标签:css, html,时间:2008-3-9 17:24:58 | 相关网摘我也收藏


Web.XML 配置详解 - cocojiji5的专栏 - CSDNBlog

wukele收录,使用标签:tomact,时间:2008-3-9 17:21:17 | 相关网摘我也收藏

每一个站的WEB-INF下都有一个web.xml的设定文件,它提供了我们站台的配置设定.
web.xml定义:
.站台的名称和说明
.针对环境参数(Context)做初始化工作
.Servlet的名称和映射
.Session的设定
.Tag library的对映
.JSP网页设定
.Mime Type处理
.错误处理
.利用JDNI取得站台资源

要了解web.xml的设定值,必须了解它的schema,从web.xml中知道它的schema是由Sum Microsystems公司定制的,如果你想更为详细的了解它,
可以到http://java.sun.com/xml/ns/j2ee/web-mapp_2_4.xsd网页,那里有更为详细的介绍。这里我介绍我们平常见得最都的.





这是一般在写XML时所做的声明,定义了XML的版本,编码格式,还有重要的指明schema的来源,为http://java.sun.com/xml/ns/j2ee
/web-app_2_4.xsd.


,,
____________________________________________

站台描述
对站台做出描述.

站台名称
定义站台的名称.


icon元素包含small-icon和large-icon两个子元素.用来指定web站台中小图标和大图标的路径.
/路径/smallicon.gif
small-icon元素应指向web站台中某个小图标的路径,大小为16 X 16 pixel,但是图象文件必须为GIF或JPEG格式,扩展名必须为:.gif或
.jpg.

/路径/largeicon-jpg
large-icon元素应指向web站台中某个大图表路径,大小为32 X 32 pixel,但是图象文件必须为GIF或JPEG的格式,扩展名必须为; gif
或jpg.
范例:
Develop Example
JSP 2.0 Tech Book's Examples

/images/small.gif
/images/large.gir




______________________________________


distributable 元素为空标签,它的存在与否可以指定站台是否可分布式处理.如果web.xml中出现这个元素,则代表站台在开发时已经
被设计为能在多个JSP Container 之间分散执行.
范例:





___________________________________


context-param 元素用来设定web站台的环境参数(context),它包含两个子元素:
param-name和param-value.
参数名称
设定Context名称

设定Context名称的值

范例:

param_name
param_value

此所设定的参数,在JSP网页中可以使用下列方法来取得:
${initParam.param_name}
若在Servlet可以使用下列方法来获得:
String param_name=getServletContext().getInitParamter("param_name");




_________________________________
filter元素用来声明filter的相关设定.filter元素除了下面介绍的的子元素之外,还包括介绍过的,
,,,其用途一样.
Filter的名称
定义Filter的名称.
Filter的类名称
定义Filter的类名称.例如:com.foo.hello

范例:

setCharacterEncoding
coreservlet.javaworld.CH11.SetCharacterEncodingFilter

encoding
GB2312





______________________________________

filter-mapping 元素的两个主要子元素filter-name和url-pattern.用来定义Filter所对应的URL.
Filter的名称
定义Filter的名称.
URL
Filter所对应的RUL.例如:/Filter/Hello

Servlet的名称
定义servlet的名称.
REQUEST|INCLUDE|FORWARD|ERROR
设定Filter对应的请求方式,有RQUEST,INCLUDE,FORWAR,ERROR四种,默认为REQUEST.

范例:

GZIPEncoding
/*





___________________________________________

listener元素用来定义Listener接口,它的主要子元素为
Listener的类名称
定义Listener的类名称.例如: com.foo.hello

范例:

coreservlet.javaworld.CH11.ContenxtListener





_____________________________________________
servlet-mapping元素包含两个子元素servlet-name和url-pattern.用来定义servlet所对应URL.
Servlet的名称
定义Servlet的名称.
Servlet URL
定义Servlet所对应的RUL.例如:/Servlet/Hello

范例:

LoginChecker
/LoginChecker




__________________________________

session-config包含一个子元素session-timeout.定义web站台中的session参数.
分钟
定义这个web站台所有session的有效期限.单位为分钟.

范例:

20




___________________________________________________

mime-mapping包含两个子元素extension和mime-type.定义某一个扩展名和某一MIME Type做对映.
扩展名名称
扩展名称
MIME格式
MIME格式.

范例:

doc
application/vnd.ms-word


xls
application/vnd.ms-excel


ppt
application/vnd.ms-powerpoint




_____________________________________________

welcome-file-list包含一个子元素welcome-file.用来定义首页列单.
用来指定首页文件名称
welcome-file用来指定首页文件名称.我们可以用指定几个首页,而服务器会依照设定的顺序来找首页.
范例:

index.jsp
index.htm





_________________________

error-page元素包含三个子元素error-code,exception-type和location.将错误代码(Error Code)或异常(Exception)的种类对应
到web站台资源路径.
错误代码
HTTP Error code,例如: 404
Exception
一个完整名称的Java异常类型
/路径
在web站台内的相关资源路径

范例:

404
/error404.jsp


java.lang.Exception
/except.jsp





_______________________________________________

jsp-config元素主要用来设定JSP的相关配置,包括和两个子元素.其中元素
在JSP 1.2时就已经存在了;而是JSP 2.0新增的元素.


taglib元素包含两个子元素taglib-uri和taglib-location.用来设定JSP网页用到的Tag Library路径.
URI
taglib-uri定义TLD文件的URI,JSP网页的taglib指令可以经由这个URI存取到TLD文件.
/WEB-INF/lib/xxx.tld
TLD文件对应Web站台的存放位置.



jsp-property-group元素包含8个元素,分别为:
Description
此设定的说明

Name
此设定的名称

URL
设定值所影响的范围,如:/CH2 或者/*.jsp

true|false
若为true,表示不支持EL语法.

true|false
若为true表示不支持<%scription%>语法.

encoding
设定JSP网页的编码

.jspf
设置JSP网页的抬头,扩展名为.jspf

.jspf
设置JSP网页的结尾,扩展名为.jspf


范例:


Taglib
/WEB-INF/tlds/MyTaglib.tld



Special property group for JSP Configuration JSP example.

JSPConfiguration
/*
true
GB2312
true
............






________________________________________________

resource-ref元素包括五个子元素description,res-ref-name,res-type,res-auth,res-sharing-scope.利用JNDI取得站台可
利用资源.
说明
资源说明

资源名称
资源名称

资源种类
资源种类

Application|Container
资源由Application或Container来许可

Shareable|Unshareable
资源是否可以共享.默认值为 Shareable
范例:

JNDI JDBC DataSource of JSPBook
jdbc/sample_db
javax.sql.DataSoruce
Container


这些都是些比较常用的,详细可以登录: http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd





Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1584635




Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1601428




结合Spring2.0和ActiveMQ进行异步消息调用(转) - Duffblog - BlogJava

wukele收录,使用标签:activemq,时间:2008-3-6 22:23:15 | 相关网摘我也收藏

在Spring 2.0之前,Spring的JMS的作用局限于产生消息。这个功能(封装在 JmsTemplate 类中)当然是很好的, 但是,它没有描述完整的JMS堆栈,比如像消息的 异步 产生和消耗。JMS堆栈缺少的这一部分已经被添加,Spring 2.0现在提供对消息异步消耗的完整支持。
让我们从一个例子开始。
首先我们打开ActiveMQ。从ActiveMQ的安装路径上的bin目录,那里有一个ActiveMQ.bat,双击执行即可。不过要注意必须先设置java_home环境变量。ActiveMQ默认的服务端口是61616。
然后我们开始配置Spring配置文件。我起名为spring-jms.xml

首先要配置一个ConnectionFactory代码如下





这里用到的ConnectionFactory是ActiveMQ提供的工厂,为了能使用这个工厂,我们必须在项目中添加以下几个jar文件:
geronimo-jms_1.1_spec-1.0.jar,
activeio-core-3.0-beta3.jar,
activemq-core-4.0.1.jar,
backport-util-concurrent-2.1.jar,
commons-logging-1.0.4.jar,
geronimo-j2ee-management_1.0_spec-1.0.jar
以上这些Jar文件都存在于ActiveMQ安装目录的lib目录下,这些可是我一个一个试验出来的,累个半死。。


然后应该配置一个Queue(我使用的是点对点方式),不过ActiveMQ只要提供一个名字就可以自动创建队列,因此这一步省了,呵呵

下面就轮到Spring的支持类了,首先是JmsTemplate。这个类提供了大量的方法简化我们对JMS的操作。常用的有两个, org.springframework.jms.core.JmsTemplate102和 org.springframework.jms.core.JmsTemplate,这两个类分别支持JMS的1.02版本和1.1版本。现在比较常用的还是1.02版本。配置如下







上面的配置中用到了第一步配置的connectionFactory以及一个消息转换的类 messageConverter,这个类实现了 org.springframework.jms.support.converter.MessageConverter接口,可以在消息发送之前和接受之后进行消息类型转换。具体的看最后的实例代码。配置代码如下:










这里还配置了发送的消息的存在时间timeToLive,目标Queue的名字defaultDestinationName,接受消息超时时间receiveTimeout

4。配置发送代码



5。接着配置监听器,这是Spring2.0新增的功能,配置如下:

















Spring配置监听器有很多种选择,在这里我选择这回种MessageListenerAdapter方法主要是因为这个方法比较灵活。实现他只要一个很普通的java类即可,和JMS以及Spring的耦合度最低。其中方法onMessage可以随便修改方法名,只要在配置文件中对应的修改就好了。
MessageListenerAdapter还有一个功能就是如果处理方法(我这里是onMessage)返回一个非空值,它将自动返回一个响应消息。这个消息会返回给JMS Reply-To属性定义的目的地(如果存在),或者是MessageListenerAdapter设置(如果配置了)的缺省目的地;如果没有定义目的地,那么将产生一个InvalidDestinationException异常(此异常将不会只被捕获而不处理,它将沿着调用堆栈上传)。
这样我们的配置就都完成了。接下来我们来实现对应的Java文件
先是接口文件发送消息接口IApmgtMessageProducer.java
public interface IApmgtMessageProducer {
public abstract void sendMessage(ApmgtMessageData messageData);
}
接受消息接口IApmgtMessageListener.java
public interface IApmgtMessageListener {
public void onMessage(ApmgtMessageData message);
}
发消息的文件DefaultApmgtMessageProducer.java
public class DefaultApmgtMessageProducer implements IApmgtMessageProducer {

private JmsTemplate jmsTemplate;

public void setJmsTemplate(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}

public void sendMessage(ApmgtMessageData messageData) {
this.jmsTemplate.convertAndSend(messageData);
}
}
收消息文件DefaultApmgtMessageListener.java
public class DefaultApmgtMessageListener implements IApmgtMessageListener {
public void onMessage(ApmgtMessageData message) {
System.out.println("监听到消息:"+message);
}
}
消息转换类ApmgtMessageConverter.java
public class ApmgtMessageConverter implements MessageConverter {

private Log log = LogFactory.getLog(ApmgtMessageConverter.class);

private SimpleMessageConverter converter;

public void setConverter(SimpleMessageConverter converter) {
this.converter = converter;
}

public Object fromMessage(Message message) throws JMSException, MessageConversionException {
if (message instanceof ObjectMessage) {
ObjectMessage o_message = (ObjectMessage)message;
MessageHeader header = new MessageHeader();
header.setId(message.getLongProperty("id"));
header.setReceiver(message.getIntProperty("receiver"));
header.setSender(message.getIntProperty("sender"));
header.setSendPerson(message.getStringProperty("sendPerson"));
header.setType(message.getIntProperty("type"));
Serializable messageContent = o_message.getObject();
ApmgtMessageData messageData = new ApmgtMessageData();
messageData.setMessageContent(messageContent);
messageData.setMessageHeader(header);
return messageData;
}
return null;
}

public Message toMessage(Object object, Session session) throws JMSException, MessageConversionException {
if (object instanceof ApmgtMessageData) {
ApmgtMessageData data = (ApmgtMessageData) object;
Message message = converter.toMessage(data.getMessageContent(), session);
message.setLongProperty("id", data.getMessageHeader().getId());
message.setIntProperty("receiver", data.getMessageHeader().getReceiver());
message.setIntProperty("sender", data.getMessageHeader().getSender());
message.setIntProperty("type", data.getMessageHeader().getType());
message.setStringProperty("sendPerson", data.getMessageHeader().getSendPerson());
log.info("发送消息[MessageSender]:\n" + message);
return message;
} else {
return null;
}
}

}
消息类文件 消息父类:ApmgtMessageData.java
public class ApmgtMessageData{

protected T messageContent;

protected MessageHeader messageHeader;

public T getMessageContent() {
return this.messageContent;
}

public MessageHeader getMessageHeader() {
return this.messageHeader;
}

public void setMessageContent(T messageContent) {
this.messageContent = messageContent;
}
public void setMessageHeader(MessageHeader messageHeader) {
this.messageHeader = messageHeader;
}

}
消息属性的一个类MessageHeader.java
public class MessageHeader {

/**
* 消息ID
*/
private long id;

/**
* 消息类型
*/
private int type;

/**
* 消息发送方,发送消息的模块
*/
private int sender;

/**
* 消息接收方,接收消息的模块
*/
private int receiver;

/**
* 消息发送者,具体的用户
*/
private String sendPerson;

public MessageHeader(){
this.id = System.currentTimeMillis() ;
}

public long getId() {
return id;
}

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

public String getSendPerson() {
return sendPerson;
}

public void setSendPerson(String sendPerson) {
this.sendPerson = sendPerson;
}

public int getReceiver() {
return receiver;
}

public void setReceiver(int receiver) {
this.receiver = receiver;
}

public int getSender() {
return sender;
}

public void setSender(int sender) {
this.sender = sender;
}

public int getType() {
return type;
}

public void setType(int type) {
this.type = type;
}

}

消息体的类ModPasswordRequest.java
public class ModPasswordRequest implements Serializable{


private static final long serialVersionUID = 1L;

/**
* 旧密码
*/
private String oldPassword;

/**
* 新密码
*/
private String newPassword;

public String getNewPassword() {
return newPassword;
}

public void setNewPassword(String newPassword) {
this.newPassword = newPassword;
}

public String getOldPassword() {
return oldPassword;
}

public void setOldPassword(String oldPassword) {
this.oldPassword = oldPassword;
}

}

消息类:ApmgtModPasswordRequest.java
public class ApmgtModPasswordRequest extends ApmgtMessageData {



private static final int REQ_MODPASSWORD = 0;
private static final int INTF = 1;
private static final int APMGT = 2;

public void init(){
messageHeader = new MessageHeader();
messageContent = new ModPasswordRequest();
messageHeader.setType(REQ_MODPASSWORD);
messageHeader.setSender(INTF);
messageHeader.setReceiver(APMGT);
messageContent.setNewPassword("123456");
messageContent.setOldPassword("654321");
}

}
最后是测试类Main.java


public class Main {

public static void main(final String[] args) throws Exception {

PropertyConfigurator.configure("log4j.properties");

AbstractApplicationContext ctx = new ClassPathXmlApplicationContext(new String[] { "spring-jms.xml" });
// ctx.registerShutdownHook();

IApmgtMessageProducer producer = (IApmgtMessageProducer)ctx.getBean("producer");

ApmgtModPasswordRequest messageData = new ApmgtModPasswordRequest();
messageData.setMessageHeader(new MessageHeader());
messageData.setMessageContent(new ModPasswordRequest());
messageData.init();

producer.sendMessage(messageData);
}
}
还有两个配置文件,第一个spring-jms.xml

[/url]





apmgt.properties























































apmgt.properties

#jms properties
jms.brokerURL=tcp://localhost:61616
jms.receiveTimeout=3000
jms.destinationName.cmpp=cmpp
jms.messageSelector=receiver=2
#one day is 86400000 ms. 0 is means that it lives forever.
jms.timeToLive=86400000


JSP中的隐藏对象-我爱aspx

wukele收录,使用标签:jsp,时间:2008-2-29 16:32:31 | 相关网摘我也收藏

application的生命周期:从Web服务器启动到Web服务器关闭。

application在生命周期内的作用范围:在同一个发布目录A下的所有网页文件中,都可以对"和发布目录A对应"的application对象进行操作,而且访问发布目录A的所有客户都共用一个application对象。因此,当在该application中存放数据信息时,所有访问该发布目录A的客户都能够对其进行访问,实现了多客户之间的数据共享。

application对象的基类是:javax.servlet.ServletContext类。可以用该类中的getServletContext()方法取得application。具体的使用方法参见Servlet API。

3.request对象

request对象主要用于取得客户在表单中提交的数据信息及多个网页之间数据信息传递等。同时通过它也可以取得Web服务器的参数。跟Servlet参数中的Request对象是相对应的。

request对象的基类为:javax.servlet.ServletRequest

如果传输协议是http,则是javax.servlet.HttpServletRequest

具体的使用方法参见Servlet API。

4. respose对象

respose对象主要用于向客户端输出信息,响应客户端的请求。跟Servlet参数中的Response对象是相对应的。

respose对象的基类是:javax.servlet.ServletResponse

如果传输协议是http.则为javax.servlet.HttpServletResponse.

具体的使用方法参见Servlet API。

5.out对象

out对象用于向客户端输出数据。

out对象基类是:javax.servlet.JspWriter类,跟Servlet中由HttpServletResponse得到的PrintWriter略有不同,但是都是从



共300个网摘 [ 1  2  3  4  5  6  7  8  9  10 ]  上一页 | 下一页

wukele/相关标签



网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
Copyright © 2000-2008, CSDN.NET, All Rights Reserved