﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-每天写一个demo</title><link>http://www.cnblogs.com/zhangzheny/</link><description>.net技术</description><language>zh-cn</language><lastBuildDate>Sun, 07 Sep 2008 13:27:23 GMT</lastBuildDate><pubDate>Sun, 07 Sep 2008 13:27:23 GMT</pubDate><ttl>60</ttl><item><title>水晶报表的使用经验和资料总结 </title><link>http://www.cnblogs.com/zhangzheny/archive/2008/04/03/1136233.html</link><dc:creator>黑星</dc:creator><author>黑星</author><pubDate>Thu, 03 Apr 2008 06:24:00 GMT</pubDate><guid>http://www.cnblogs.com/zhangzheny/archive/2008/04/03/1136233.html</guid><wfw:comment>http://www.cnblogs.com/zhangzheny/comments/1136233.html</wfw:comment><comments>http://www.cnblogs.com/zhangzheny/archive/2008/04/03/1136233.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/zhangzheny/comments/commentRss/1136233.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zhangzheny/services/trackbacks/1136233.html</trackback:ping><description><![CDATA[<DIV class=postbody>
<H1 align=center><SPAN></SPAN>&nbsp;</H1>
<P><STRONG><SPAN>一.<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></STRONG><STRONG><SPAN><FONT size=3>前言</FONT></SPAN></STRONG></P>
<P><SPAN><FONT size=3>该文档就集团分析系统研发过程中水晶报表（<SPAN>Crystal Reports）的使用经验和值得注意的地方进行了总结和归纳，它不是水晶报表的使用手册，如果您要了解水晶报表使用的细节,那么您可以阅读《水晶报表中文手册》，或者使用水晶报表本身自带的联机帮助。本文乃经验之谈，错误之处在所难免，请不吝斧正。</SPAN></FONT></SPAN></P>
<P><STRONG><SPAN>二.<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></STRONG><STRONG><SPAN><FONT size=3>简介</FONT></SPAN></STRONG></P>
<P><SPAN><FONT size=3>Crystal Reports是世界领先的桌面及 Web 报表工具，可用于处理数据库，帮助用户分析和解释重要信息。使用 Crystal Reports 可以方便地创建简单报表，同时它也提供了创建复杂或专用的报表所需的整套工具。</FONT></SPAN></P>
<P><SPAN><FONT size=3>Crystal Reports 几乎可以从任何数据源生成您需要的报表。内置报表专家在您生成报表和完成一般的报表任务过程中，会一步一步地指导您进行操作。报表专家通过公式、交叉表、子报表和设置条件格式帮助表现数据的实际意义，揭示可能被隐藏掉的重要关系。如果文字和数字确实不够充分，则用地理地图和图形进行形象的信息交流。</FONT></SPAN></P>
<P><SPAN><FONT size=3>Crystal Reports 的灵活性并未停留在创建报表这一功能上，您可以用各种各样的格式发布报表，包括用 Microsoft 的 Word 和 Excel 发布、通过电子邮件甚至 Web 发布。高级的 Web 报表功能允许工作组中的其他成员在他们自己的 Web 浏览器中查看或更新共享报表。</FONT></SPAN></P>
<P><SPAN><FONT size=3>通过将<SPAN> Crystal Reports 的报表处理功能整合到自己的数据库应用程序中，应用程序和 Web 开发人员可以节省开发时间并满足用户的需求。Crystal Reports 支持大多数流行的开发语言，可以方便地在任何应用程序中添加报表。鉴于实际项目经验本文中仅结合C#语言进行归纳总结。<STRONG></STRONG></SPAN></FONT></SPAN></P>
<P><STRONG><SPAN>三.<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></STRONG><STRONG><SPAN><FONT size=3>安装</FONT></SPAN></STRONG></P>
<P><SPAN><FONT size=3>Crystal Reports 已经集成在Visual Studio.NET 2003中，因此它的安装非常简单方便，您只需要在安装Visual Studio.NET时勾选相应的选项即可，但必须提醒您，您必须注册，否则使用三十次以后Crystal Reports 将不能继续使用。目前网上可以搜索出大量注册码，但请您慎重使用。另外值得一提的是按照上面这种方式安装后，Crystal Reports的开发（程序代码部分）和设计（报表格式设计部分）都只能在Visual Studio.NET工具下进行。</FONT></SPAN></P>
<P><SPAN><FONT size=3>其实<SPAN>Crystal Reports 也可以作为独立的模块进行安装，公司内部有人制作了相应版本的ISO安装文件《Crystal Reports 9.iso》，您可以使用FTP工具登陆192.168.2.7（user：fox123，password：fox123）在 /SoftRoot/C#/目录下便可找到，同时该目录下还有Visual Studio.NET2003的安装程序。在您得到该文件后便可以安装，需要提醒您由于Crystal Reports 目前已经发布了众多版本，集团分析系统研发人员在研发过程中发现Crystal Reports不同版本之间的兼容性并不是很好，如果安装过程中出错会给以后的使用造成巨大的麻烦，请务必注意。因此，在您安装之前请先确认您即将安装Crystal Reports的这台电脑上是否安装过其它版本的Crystal Reports工具，当然这也包括Visual Studio.NET中自带的Crystal Reports，如果有那么请您最好先将其删除，以除后患。这里的安装同样非常简单，您只需要双击安装文件，注意默认的典型安装中有些数据库驱动程序并没有安装，这其中就包括公司里一直使用的SYBASE数据库，因此您需要选择自定义安装，进行相应的选择。安装结束时请注册，注册码在安装程序文件夹下保存，可任选其一进行注册。注册后您可以使用Crystal Reports设计工具进行报表的设计，也可以使用Visual Studio.NET进行代码的设计两者可以分开独立进行。</SPAN></FONT></SPAN></P>
<P><STRONG><SPAN>四.<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></STRONG><STRONG><SPAN><FONT size=3>报表设计</FONT></SPAN></STRONG></P>
<P><SPAN><FONT size=3>用<SPAN>Crystal Reports 设计报表是件非常简单的事情，当然设计一张结构负责、外观清新爽朗的报表也是需要下一番功夫的。Crystal Reports 带有一个报表设计向导，该向导会指导您一步一步的完成从选择报表类型、定义数据源到选择报表呈现模版的全部过程。当然您也可以避开这些繁琐的环节直接创建空白报表进行自行设计。接下来我就报表设计过程中比较重要的环节以及一些比较特殊实用的技巧进行简单介绍。</SPAN></FONT></SPAN></P>
<P><SPAN>u<SPAN>&nbsp;&nbsp;&nbsp; </SPAN></SPAN><STRONG><SPAN><FONT size=3>数据源</FONT></SPAN></STRONG></P>
<P><SPAN><FONT size=3>Crystal Reports 的主要用途就是访问存储在数据库中的数据并生成有关该数据的报表。Crystal Reports 可以访问的数据分为五大类：</FONT></SPAN></P>
<P><SPAN>Ø<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><STRONG><SPAN><FONT size=3>直接访问数据库文件：（<SPAN>dBASE、FoxPro、Clipper、Pervasive、Paradox、Microsoft Access）</SPAN></FONT></SPAN></STRONG></P>
<P><SPAN><FONT size=3>Crystal Reports 可以直接访问绝大多数常用的 PC 数据库格式的文件。换句话说，程序具备直接打开 dBASE、FoxPro、Clipper、Pervasive、Paradox、Microsoft Access 及其他此类软件中设计的数据库文件和表所需的内置功能。安装 Crystal Reports 后即具备此功能。一旦将程序安装在系统中，就可以立即开始选择适当的文件以创建基于这些数据库之上的报表。这是一种连接速度最快的方式，但是如果直接通过 Crystal Reports 访问某个数据库，则报表只能使用这一种数据库类型。不创建新的报表，就无法切换到不同类型的数据库或表。</FONT></SPAN></P>
<P><SPAN>Ø<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><STRONG><SPAN><FONT size=3>ODBC 数据源：（Access，Excel，Infoxmix，OLE Db,Visual Foxpro,）</FONT></SPAN></STRONG></P>
<P><SPAN><FONT size=3>现在大多数常用的数据库管理系统都提供<SPAN> ODBC 驱动程序，而且日益增多，因此 Crystal Reports 可以使用您拥有的任何数据类型。因为 ODBC 内置了很大的灵活性，所以可以在同一报表文件中使用不同的 ODBC 数据源。例如，可以使用 Oracle 数据源设计报表，以后当公司转换到 Microsoft SQL Server 时，则只需更改报表使用的 ODBC 数据源。通过 ODBC 将数据从数据库传递到应用程序涉及到很多层，因此出错几率变大，另外在能使用 ODBC 数据源之前，必须正确配置 ODBC 数据源并在 Odbc.ini 和 Odbcinst.ini 文件中设置它们。如果在一个系统上创建报表，而在另一个没有安装同一 ODBC 数据源的系统上打开此报表，则 Crystal Reports 无法连接到那些数据。</SPAN></FONT></SPAN></P>
<P><SPAN>Ø<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><STRONG><SPAN><FONT size=3>OLE DB</FONT></SPAN></STRONG></P>
<P><SPAN><FONT size=3>OLE DB 是 Microsoft 开发的、在概念上类似于 ODBC 的数据库连接实体。OLE DB 是一种连接方法论，而不是一种数据库。与 ODBC 一样，它通过提供一个接口层，使得在其它数据库管理系统中创建的数据易于交换。OLE DB 要求使用 OLE DB 提供程序，此程序是相当于 ODBC 驱动程序的 OLE DB 程序 。 Crystal Reports 为 OLE DB 使用者提供 P2soledb.dll 文件，使得 OLE DB 可以与 OLE DB 提供程序通讯。</FONT></SPAN></P>
<P><SPAN>Ø<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><STRONG><SPAN><FONT size=3>Crystal SQL Designer 文件:(Crystal SQL Designer)</FONT></SPAN></STRONG></P>
<P><SPAN><FONT size=3>Crystal SQL Designer 是一个查询，它只是对数据库中一组特定数据的请求。数据被收集后，即存储为 Crystal SQL Designer 文件 (.QRY)。之后，可以象使用数据库表一样使用 Crystal SQL Designer 文件。从 SQL 数据库中收集的数据成为新的数据集，可以添加到报表中。但非常遗憾的告诉您,上面的安装文件安装后Crystal SQL Designer并没有被安装,所以此处点到为止。</FONT></SPAN></P>
<P><SPAN>Ø<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><FONT size=3><STRONG><SPAN>字典</SPAN></STRONG><STRONG></STRONG></FONT></P>
<P><SPAN><FONT size=3>字典是结构化和简化的数据视图，可以为组织中使用<SPAN> Crystal Reports 的某些人或所有人创建字典. 与某些强制用户通过数据分发元层访问数据的系统不同，字典是可选组件。用户仍然可以直接访问数据。字典只是提供完全的便利，没有任何限制。同样非常遗憾的告诉您,上面的安装文件安装后Crystal SQL Designer并没有被安装,所以此处点到为止。</SPAN></FONT></SPAN></P>
<P><SPAN><FONT size=3></FONT></SPAN>&nbsp;</P>
<P><SPAN><FONT size=3>在介绍完<SPAN>Crystal Reports 可以访问的五大类数据后,请允许我着重介绍一下SYBASE。在介绍Crystal Reports时,我曾经提过安装Crystal Reports时SYBASE的数据库驱动程序是需要手选的这个请大家注意,另外就是安装Crystal Reports这台电脑需要安装SYBASE客户端程序,同时设置正确的数据库连接。接下来我们就可以在Crystal Reports的数据库专家的创建新连接里找到SYBASE服务器这一项了,点击它后便可以进行水晶报表与指定的SYBASE数据库的连接设置了，输入正确的服务器名登陆名密码以及要访问的数据库，那么数据源便定义完毕。</SPAN></FONT></SPAN></P>
<P><FONT size=3><SPAN>接下来还要介绍一个很重的技巧<SPAN>—修改数据源。在一些特殊的情况下,比如我们定义好了报表的数据源,它是A服务器上的一个存储过程,但情况有变我们需要把数据源更改为另一个过程(此处仅借此情况为例,意指数据源的更改),但糟糕的是此时整个报表的所有字段的格式字体等都已经设置好,如果此刻要更改数据源怎么办?先说明一下想通过数据库专家重新选择新数据源是行不通的,您可以尝试.最糟糕的办法是重新做一张报表。其实Crystal Reports设置了一个这样的功能来完成这个任务,您可以点击菜单下的数据库-&gt;设置数据源位置来完成这个工作,非常简单方便,操作方法是先选中需要更新的旧的数据源描述然后选择新的数据源然后点更新即可,这个功能对不知道该操作的人来说是非常重要的,您不妨一试。</SPAN></SPAN><STRONG></STRONG></FONT></P>
<P><SPAN>u<SPAN>&nbsp;&nbsp;&nbsp; </SPAN></SPAN><STRONG><SPAN><FONT size=3>报表类型</FONT></SPAN></STRONG></P>
<P><FONT size=3><SPAN>我们在设计报表时<SPAN>,最好使用</SPAN></SPAN><SPAN>Crystal Reports的报表向导,它会按照</SPAN><SPAN>不同类型的报表给以不同的指导<SPAN>,帮助您正确得设计出您想要的报表雏形,此处就不详细讲解报表的具体设计过程,下面仅针对于不同类别报表设计时的一些技巧予以提示共享.</SPAN></SPAN></FONT></P>
<P><SPAN>Ø<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><STRONG><SPAN><FONT size=3>交叉表</FONT></SPAN></STRONG></P>
<P><FONT size=3><SPAN>Crystal Reports把</SPAN><SPAN>每个交叉表看作一个交叉表对象<SPAN>,所谓的交叉表对象很简单,它是由几部分组成的,包括:行,列,汇总字段,行总计,列总结以及总计.交叉表可以有多个行,多个列以及多个汇总字段,</SPAN></SPAN><SPAN> 如果需要您也可以在一个报表中插入多个“交叉表”对象,但“交叉表”对象必须插入报表页眉或报表页脚或者插入组页眉或组页脚中, 当然您可以将“交叉表”对象放在子报表中。当要引用来自其他报表中的结果时，这一点很有用.另外当交叉表的汇总字段有多个时,而且不同的汇总字段要按照不同的方法进行汇总,这时候交叉表对象的行总计和列总计以及总计就失去了作用,那么怎么办呢?我们可以直接在数据库中算好把他们呈现出来,而这里需要把交叉表本身的总计都隐藏掉,方法很简单右击交叉表对象选择交叉表专家,选择自定义样式标签,勾选抑制显示行总计,抑制显示列总计复选框即可,当然在此你也可以进行其它尝试,比如抑制显示空行抑制显示空列等等.其它的设置请参阅联机指南.</SPAN></FONT></P>
<P><SPAN>Ø<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><STRONG><SPAN><FONT size=3>图表</FONT></SPAN></STRONG></P>
<P><FONT size=3><SPAN>Crystal Reports 使您可以在报表中包含复杂的、多彩的图表。任何时候都可以使用这些图表来增加报表的可用性. 您可以根据以下内容绘制图表: 汇总和小计字段, 详细资料、公式和运行总计字段, 交叉表汇总, OLAP 数据。通常在组级根据汇总和小计信息绘制图表。但是，根据所用数据类型，您可以为报表创建高级图表、交叉表图或 OLAP 网格图表</SPAN><STRONG></STRONG></FONT></P>
<P><SPAN>Ø<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><STRONG><SPAN><FONT size=3>子报表</FONT></SPAN></STRONG></P>
<P><FONT size=3><SPAN>子报表是报表中的报表。创建子报表的过程与创建常规报表的过程相似。子报表有报表的大多数特性，包括它自己的记录选择条件。子报表与主报表之间的唯一区别是子报表多节报表是作为对象插入到主报表中；它不能独立存在（但可以将子报表另存为主报表）<SPAN>,它可以放置在报表的任意一节内，整个子报表将在该节中打印, 它不能包含另一个子报表,也不要包含页眉或页脚节.使用子报表的情况很多比如: 将不相关的报表组合到单个报表中, 协调本无法链接的数据,在单个报表中显示相同数据的不同视图, 从在查阅字段上没有索引的字段中执行一对多查阅等等,您可以根据自己的实际需要进行设计</SPAN></SPAN><STRONG></STRONG></FONT></P>
<P><STRONG><SPAN><FONT size=3></FONT></SPAN></STRONG>&nbsp;</P>
<P><A name=381217></A><SPAN>u<SPAN>&nbsp;&nbsp;&nbsp; </SPAN></SPAN><STRONG><SPAN><FONT size=3>Crystal Reports之专家</FONT></SPAN></STRONG></P>
<P><SPAN>Ø<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><STRONG><SPAN><FONT size=3>数据库专家</FONT></SPAN></STRONG></P>
<P align=left><A name=393991></A><SPAN><FONT size=3>“数据库专家”提供了一个可在 Crystal Reports 中使用的所有数据源的集成树视图。使用“数据库专家”，您可以：</FONT></SPAN></P>
<UL type=disc>
<LI><A name=393993></A><SPAN><FONT size=3>使用当前连接的数据源之一创建报表。<SPAN> <A name=393999></A></SPAN></FONT></SPAN>
<LI><SPAN><FONT size=3>基于存储在<SPAN> Crystal 储备库中的 SQL 命令创建报表。 <A name=394001></A></SPAN></FONT></SPAN>
<LI><SPAN><FONT size=3>基于数据源的自定义<SPAN>“收藏夹”列表（也由您在“数据库专家”中维护）创建报表。 <A name=394003></A></SPAN></FONT></SPAN>
<LI><SPAN><FONT size=3>基于最近访问过的数据源的列表（由<SPAN>“数据库专家”自动替您维护）创建报表。 <A name=394005></A></SPAN></FONT></SPAN>
<LI><SPAN><FONT size=3>通过连接到现有数据源（例如，位于本地的数据文件或已经建立的<SPAN> ODBC 数据源）创建报表。 <A name=394007></A></SPAN></FONT></SPAN>
<LI><SPAN><FONT size=3>通过先创建新连接（例如，新的<SPAN> ODBC 数据源或 OLE DB 文件数据链接）来创建报表。 <A name=394009></A></SPAN></FONT></SPAN>
<LI><SPAN><FONT size=3>查看有关某个数据库连接的信息，方法是右击该连接的图标，然后从快捷菜单中选择<SPAN>“属性”。 </SPAN></FONT></SPAN></LI></UL>
<P><SPAN>Ø<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><STRONG><SPAN><FONT size=3>组专家</FONT></SPAN></STRONG></P>
<P><FONT size=3><SPAN>使用<SPAN>“组专家”可指定字段在报表中的分组方式。还可以使用该对话框重新定位组，以及编辑用于触发和对组进行排序的条件。值得一提的是如果需要将组数据保持在同一页，那么您可以在组专家下进行设置，使用组专家的选项您可以进行很多与分组相关的设置。</SPAN></SPAN><STRONG></STRONG></FONT></P>
<P><SPAN>Ø<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><STRONG><SPAN><FONT size=3>组排序专家</FONT></SPAN></STRONG></P>
<P><SPAN><FONT face=宋体>报表必须包含一个汇总值才能执行<SPAN>“组排序”。<A name=394437></A> 使用“组排序专家”可标识最前或最后几组（例如，客户报表中客户最多/最少的省）。还可以标识最高或最低百分比。</SPAN></FONT></SPAN></P>
<P><SPAN>Ø<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><STRONG><SPAN><FONT size=3>选择专家</FONT></SPAN></STRONG></P>
<P><FONT size=3><SPAN>使用选择专家选择想包括在报表中的记录或组（如果不想全部包括在报表中），使用选择专家时，程序基于您在对话框中指定的设置自动生成记录或组选定公式，该专家使您得以设置相当复杂的选定条件，但若要对所生成的公式有更多的控制，请使用<SPAN> <SPAN><A href="mk:@MSITStore:G:\集团分析%20V1.0\学习文档\水晶报表\水晶报表中文手册crw.chm::/Dialog_Box_Reference95.html#96289"><SPAN>“公式编辑器”对话框</SPAN></A>。</SPAN></SPAN></SPAN><STRONG></STRONG></FONT></P>
<P><SPAN>Ø<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><STRONG><SPAN><FONT size=3>节专家</FONT></SPAN></STRONG></P>
<P><FONT size=3><SPAN>使用节专家格式化影响整个报表节的更改。可以插入、删除以及合并节，当然这些操作也可以通过鼠标直接完成。另外我们可以通过节专家对节属性进行设置，比如：抑制显示，延伸到后续节，新建节的位置，保持在一起等等，我们也可以通过设定不同的颜色标示不同的报表节，节专家在报表设计过程中会经常使用到</SPAN><STRONG></STRONG></FONT></P>
<P><SPAN>Ø<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><STRONG><SPAN><FONT size=3>图表专家</FONT></SPAN></STRONG></P>
<P><A name=393152></A><SPAN><FONT face=宋体>图表专家在下列情况下出现：</FONT></SPAN></P>
<UL type=disc>
<LI><A name=393158></A><FONT size=3><SPAN>单</SPAN><SPAN>击<SPAN><A href="mk:@MSITStore:G:\集团分析%20V1.0\学习文档\水晶报表\水晶报表中文手册crw.chm::/Command_Reference243.html#867425"><SPAN>标准工具栏</SPAN></A>上的“插入图表”按钮时。 <A name=393164></A></SPAN></SPAN></FONT>
<LI><FONT size=3><SPAN>从<SPAN>“插入”菜单中选择<A href="mk:@MSITStore:G:\集团分析%20V1.0\学习文档\水晶报表\水晶报表中文手册crw.chm::/Command_Reference84.html#863969"><SPAN>图表命令</SPAN></A>时。</SPAN></SPAN><SPAN> <A name=393166></A></SPAN></FONT>
<LI><SPAN><FONT size=3>右击图表并选择<SPAN>“图表专家”时。 </SPAN></FONT></SPAN></LI></UL>
<P align=left><FONT size=3><SPAN>使用图表专家你可以进行图表类型的选择，常用的条形图、折线图、面积图、饼图、圆环图以及甘特图等等。</SPAN><SPAN>图表专家提供了四种布局，分别对应特定的数据集<SPAN>,它们是高级,组,交叉表以及OLAP. 当有多个图表值或在报表中没有分组和摘要字段时，请使用“高级”布局. 为了用“分组”布局创建图表，您必须至少有一个分组和用于该分组的摘要字段使用“交叉表”布局在交叉表对象上绘制图表。交叉表图表使用交叉表中的字段作为其条件和摘要字段. 使用 OLAP 布局在 OLAP 网格上绘制图表。OLAP 图表使用 OLAP 网格中的字段作为其条件和摘要字段</SPAN></SPAN></FONT></P>
<P><SPAN>Ø<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><STRONG><SPAN><FONT size=3>交叉表专家</FONT></SPAN></STRONG></P>
<P><SPAN><FONT face=宋体>从<SPAN>“插入”菜单中选择<A href="mk:@MSITStore:G:\集团分析%20V1.0\学习文档\水晶报表\水晶报表中文手册crw.chm::/Command_Reference79.html#863747"><SPAN>交叉表命令</SPAN></A>时，或者当选定一个现有交叉表，然后从“格式”或右击菜单中选择“交叉表专家”命令时，会出现该专家.<A name=393706></A> “交叉表专家”中有三个选项卡：</SPAN></FONT></SPAN></P>
<UL type=disc>
<LI><A name=393712></A><SPAN><A href="mk:@MSITStore:G:\集团分析%20V1.0\学习文档\水晶报表\水晶报表中文手册crw.chm::/Wizard_Expert_Reference39.html#393746"><SPAN><FONT size=3>“交叉表”选项卡（交叉表专家）</FONT></SPAN></A><FONT size=3> </FONT><A name=393718></A></SPAN>
<LI><SPAN><A href="mk:@MSITStore:G:\集团分析%20V1.0\学习文档\水晶报表\水晶报表中文手册crw.chm::/Wizard_Expert_Reference40.html#393848"><SPAN><FONT size=3>“样式”选项卡（各种专家）</FONT></SPAN></A><FONT size=3> </FONT><A name=393724></A></SPAN>
<LI><SPAN><A href="mk:@MSITStore:G:\集团分析%20V1.0\学习文档\水晶报表\水晶报表中文手册crw.chm::/Wizard_Expert_Reference41.html#393878"><SPAN><FONT size=3>“自定义样式”选项卡（交叉表专家）</FONT></SPAN></A></SPAN> </LI></UL>
<P><FONT size=3><SPAN>“交叉表”选项卡包含创建交叉表所需的基本功能。可定义行、列以及汇总字段。也可直接从该选项卡创建组和公式. 使用“样式”选项卡可以选择交叉表或 OLAP 网格的预定义样式. 使用“自定义样式”选项卡可以用背景色、网格线和单元格边距格式化交叉表的网格</SPAN><STRONG></STRONG></FONT></P>
<P><STRONG><SPAN>五.<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></STRONG><STRONG><SPAN><FONT size=3>程序</FONT></SPAN></STRONG></P>
<P><SPAN>u<SPAN>&nbsp;&nbsp;&nbsp; </SPAN></SPAN><STRONG><SPAN><FONT size=3>模式</FONT></SPAN></STRONG></P>
<P><SPAN>Ø<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><STRONG><SPAN><FONT size=3>拉模式（<SPAN>PULL）</SPAN></FONT></SPAN></STRONG></P>
<P><SPAN><FONT size=3>在拉模型中，驱动程序将连接到数据库并根据需要将数据<SPAN>“拉”进来。使用这种模型时，与数据库的连接和为了获取数据而执行的 SQL 命令都同时由 Crystal Reports 本身处理，不需要开发人员编写代码。如果在运行时无须编写任何特殊代码，则使用拉模型。</SPAN></FONT></SPAN></P>
<P><STRONG><SPAN><FONT size=3></FONT></SPAN></STRONG></P>
<P><STRONG><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>图一：PULL模式</FONT></SPAN></STRONG></P>
<P><SPAN>Ø<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><STRONG><SPAN><FONT size=3>推模式（<SPAN>PUSH）</SPAN></FONT></SPAN></STRONG></P>
<P><FONT size=3><SPAN>推模型需要开发人员编写代码以连接到数据库，执行<SPAN> SQL 命令以创建与报表中的字段匹配的记录集或数据集，并且将该对象传递给报表。该方法使您可以将连接共享置入应用程序中，并在 Crystal Reports 收到数据之前先将数据筛选出来。</SPAN></SPAN><SPAN>在些这种情况下，通过使用连接共享以及限制记录集合的大小，可以使用报表性能最大化。<STRONG></STRONG></SPAN></FONT></P>
<P><STRONG><SPAN><FONT size=3></FONT></SPAN></STRONG></P>
<P><STRONG><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>图二：PUSH模式</FONT></SPAN></STRONG></P>
<P><SPAN>u<SPAN>&nbsp;&nbsp;&nbsp; </SPAN></SPAN><STRONG><SPAN><FONT size=3>如何开始</FONT></SPAN></STRONG></P>
<P><SPAN><FONT size=3>Visual Studio.NET提供了两个控件来实现你对水晶报表的控制,它们是CrystalReportViewer控件和CrystalReportDocument控件.<SPAN>这里只简单演示如何在Asp.net中使用一个现成的水晶报表文件，其实水晶报表的主要功能</SPAN></FONT></SPAN></P>
<P><SPAN><FONT size=3>1) 从WebForm工具栏中拖动水晶报表查看器控件(Crystal Report Viewer)至.aspx页面中。　</FONT></SPAN></P>
<P><SPAN><FONT size=3>2) 调出水晶报表查看器控件的属性窗口 　 </FONT></SPAN></P>
<P><SPAN><FONT size=3>3) 点击［...］按钮查看"Data Binding"属性，并弹出了DataBinding窗口。</FONT></SPAN></P>
<P><SPAN><FONT size=3>4) 从左边的"Bindable属性”区中选择“Report Source”</FONT></SPAN></P>
<P><SPAN><FONT size=3>5) 选中"自定义绑定表达式"单选按钮，在右边的底部的窗口中指定.rpt文件的文件名和路径，例如："C:\\ProgramFiles\\MicrosoftVisualStudio.NET\\CrystalReports\\Samples\\Reports\\General Business\\World Sales Report.rpt"，然后确定</FONT></SPAN></P>
<P><SPAN><FONT size=3>注意：文件<SPAN>"World Sales Report.rpt"文件是在VS.Net安装时创建的。如果你在安装过程中指定了其它目录，此时你最好确认一下路径的正确性。 </SPAN></FONT></SPAN></P>
<P><SPAN><FONT size=3>6) 在Page_Load方法中调用DataBind方法。（代码为VB.Net） </FONT></SPAN></P>
<P><SPAN><FONT size=3>Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) </FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp; </SPAN>&nbsp;<SPAN>&nbsp;&nbsp; </SPAN>&nbsp;DataBind() </FONT></SPAN></P>
<P><SPAN><FONT size=3>End Sub </FONT></SPAN></P>
<P><SPAN><FONT size=3>7) 保存并编译你的页面。 现在，你就有一个内嵌水晶报表的WebForm页面了。<STRONG></STRONG></FONT></SPAN></P>
<P><SPAN>u<SPAN>&nbsp;&nbsp;&nbsp; </SPAN></SPAN><STRONG><SPAN><FONT size=3>相关问题汇总</FONT></SPAN></STRONG></P>
<P><SPAN><FONT size=3>下面详细讨论水晶报表在使用过程中肯定遇到的主要的问题以及解决办法。</FONT></SPAN></P>
<P><SPAN>Ø<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><STRONG><SPAN><FONT size=3>报表打印</FONT></SPAN></STRONG></P>
<P><SPAN><FONT size=3>目前较低版本的<SPAN>Crystal Reports 不能实现网页直接打印，要实现网页打印我们只能采取其它的方式，目前主要有下面几种方法:</SPAN></FONT></SPAN></P>
<P><SPAN><FONT size=3>l</FONT><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><STRONG><SPAN><FONT size=3>使用客户端浏览器打印</FONT></SPAN></STRONG></P>
<P><SPAN><FONT size=3>我们在</FONT><SPAN><FONT size=3>IE浏览器下可以找到打印以及打印预览等所有有关打印的功能，但是这个打印会把网页上很多没用的东西一起打印出来，另外我们需要在我们自己编写的程序里控制这些功能，那么怎么办呢？我们需要使用一个ACTIVEX控件&lt;OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WB width=0&gt;&lt;/OBJECT&gt;这个Object 其实就是 IEWebBrowser 设定 Width 和 Height 以后，我们在界面上就看不到控件的形状了，然后，我们就可以使用这个object 实现我们选纸和预览的功能了.<BR><SPAN>&nbsp;&nbsp; </SPAN>WB.ExecWB(8,1) //打印设置<BR><SPAN>&nbsp;&nbsp; </SPAN>WB.ExecWB(7,1) //打印预览</FONT></SPAN></SPAN></P>
<P><FONT size=3><SPAN><SPAN>&nbsp;&nbsp;&nbsp; </SPAN><SPAN>&nbsp;&nbsp; </SPAN></SPAN><SPAN>WB.ExecWB(6,1) //</SPAN><SPAN>打印</SPAN></FONT></P>
<P><FONT size=3><SPAN><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>这里说明一点,要使用这个打印方法,我们必须另外设计一个页面,该页面上只有一个CrystalReportViewer控件,该控件用来呈现要打印的报表,而且我们必须通过设置CrystalReportViewer属性来控制该报表显示在一页上以及隐藏工具条等不需要打印的部分,经测试发现如果页数很多的报表不能使用该方法.</SPAN></FONT></P>
<P><SPAN><FONT size=3>l</FONT><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><STRONG><SPAN><FONT size=3>使用<SPAN>PDF</SPAN></FONT></SPAN></STRONG></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>string Fname = null;//用来暂存水晶报表利用pdf文件进行打印时调用的临时文件</FONT></SPAN></P>
<P><FONT size=3><SPAN><SPAN>&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN>ExportOptions crExportOptions = new ExportOptions();</SPAN></FONT></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>DiskFileDestinationOptions crDiskFileDestinationOptions = new DiskFileDestinationOptions();</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>Fname = "c:\\temp_cpt_print";</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>crDiskFileDestinationOptions.DiskFileName = Fname;</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>crExportOptions = crReportDocumentHere.ExportOptions;</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>crExportOptions.DestinationOptions = crDiskFileDestinationOptions;</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>crExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>crExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>crReportDocumentHere.Export();</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>Response.ClearContent();</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>Response.ClearHeaders();</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>Response.ContentType = "application/pdf";</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>Response.WriteFile(Fname);</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>Response.Flush();</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>Response.Close();</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>System.IO.File.Delete(Fname);</FONT></SPAN></P>
<P><SPAN><FONT size=3>l</FONT><SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><STRONG><SPAN><FONT size=3>导出打印</FONT></SPAN></STRONG></P>
<P><SPAN><FONT size=3>实际上就是将报表导出为某种类型文件然后进行打印，下面会详细介绍报表导出方法；</FONT></SPAN></P>
<P><SPAN>Ø<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><STRONG><SPAN><FONT size=3>报表导出</FONT></SPAN></STRONG></P>
<P><FONT size=3><SPAN>水晶报表可以导出为<SPAN>WORD文档,PDF文档,EXECL文档,</SPAN></SPAN><SPAN><FONT face="Times New Roman"> </FONT></SPAN><SPAN>RichText文件以及相应得html文件,在到处过程中我们主要使用ReportDocument对象的Export()方法,具体代码请参考如下程序:</SPAN></FONT></P>
<P><SPAN><FONT size=3>DiskFileDestinationOptions crDiskFileDestinationOptions= </FONT></SPAN></P>
<P><SPAN><FONT size=3>new DiskFileDestinationOptions();</FONT></SPAN></P>
<P><SPAN><FONT size=3>ExportOptions crExportOptions = crReportDocumentHere.ExportOptions;</FONT></SPAN></P>
<P><SPAN><FONT size=3>stringExportPath= System.Configuration.ConfigurationSettings.AppSettings["Report_Export_Path"];</FONT></SPAN></P>
<P><SPAN><FONT size=3>if(Directory.Exists(ExportPath)==false){</FONT></SPAN></P>
<P><SPAN><FONT size=3>&nbsp;System.IO.Directory.CreateDirectory(ExportPath);</FONT></SPAN></P>
<P><SPAN><FONT size=3>}</FONT></SPAN></P>
<P><SPAN><FONT size=3>string sessionFile=ExportPath+Session.SessionID.ToString();</FONT></SPAN></P>
<P><SPAN><FONT size=3>string extractName=string.Empty;</FONT></SPAN></P>
<P><SPAN><FONT size=3>if (ExportFileType.SelectedItem.Text == "RichText文件 (RTF)")</FONT></SPAN></P>
<P><SPAN><FONT size=3>{</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>//Export to RTF. </FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>extractName=".rtf";</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>crDiskFileDestinationOptions.DiskFileName =sessionFile+extractName;</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>crExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>crExportOptions.ExportFormatType = ExportFormatType.RichText;</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>crExportOptions.DestinationOptions = crDiskFileDestinationOptions;</FONT></SPAN></P>
<P><SPAN><FONT size=3>}</FONT></SPAN></P>
<P><SPAN><FONT size=3>else if (ExportFileType.SelectedItem.Text == "PDF文件 (PDF)")</FONT></SPAN></P>
<P><SPAN><FONT size=3>{</FONT></SPAN></P>
<P><SPAN><FONT size=3>//Export to PDF</FONT></SPAN></P>
<P><SPAN><FONT size=3></FONT></SPAN>&nbsp;</P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>extractName=".pdf";</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>crDiskFileDestinationOptions.DiskFileName = sessionFile+extractName;</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>crExportOptions.DestinationOptions = crDiskFileDestinationOptions;</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>crExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>crExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>}</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>else if (ExportFileType.SelectedItem.Text == "Word文件 (DOC)")</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>{</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>//Export to Word</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>extractName=".doc";</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>crDiskFileDestinationOptions.DiskFileName =sessionFile+extractName;</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>crExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>crExportOptions.ExportFormatType = ExportFormatType.WordForWindows;</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>crExportOptions.DestinationOptions = crDiskFileDestinationOptions;</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>}</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>else if (ExportFileType.SelectedItem.Text == "Excel文件 (XLS)")</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>{</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>//Export to Excel</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>extractName=".xls";</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>crDiskFileDestinationOptions.DiskFileName =sessionFile+extractName;</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>crExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>crExportOptions.ExportFormatType = ExportFormatType.Excel;</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>crExportOptions.DestinationOptions = crDiskFileDestinationOptions;</FONT></SPAN></P>
<P><SPAN><FONT size=3><SPAN>&nbsp;&nbsp;&nbsp; </SPAN>}</FONT></SPAN></P>
<P><SPAN><FONT size=3>crReportDocumentHere.Export();</FONT></SPAN></P>
<P><SPAN><FONT size=3>Response.ClearContent();</FONT></SPAN></P>
<P><SPAN><FONT size=3>Response.ClearHeaders();</FONT></SPAN></P>
<P><SPAN><FONT size=3>Response.ContentType = "application/octet-stream";</FONT></SPAN></P>
<P><SPAN><FONT size=3>Response.AddHeader("Content-Disposition", @"attachment;filename="+HttpUtility.UrlEncode(crrntQuery.Title+extractName,System.Text.Encoding.UTF8));</FONT></SPAN></P>
<P><SPAN><FONT size=3>Response.WriteFile(sessionFile+extractName);</FONT></SPAN></P>
<P><SPAN><FONT size=3>Response.Flush();</FONT></SPAN></P>
<P><SPAN><FONT size=3>Response.End();</FONT></SPAN></P>
<P><SPAN><FONT size=3>System.IO.File.Delete(sessionFile+extractName);</FONT></SPAN></P>
<P><SPAN><FONT size=3>我们发现使用<SPAN>9系列的水晶报表将报表导出为excel文件时,excel的表格线不能够自动导出生成,只能通过手工添加去处理,为了解决这个问题我们转么设计另一张导出报表已方便使用者添加格线,实属无奈之举.</SPAN></FONT></SPAN></P>
<P><SPAN>Ø<SPAN>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><STRONG><SPAN><FONT size=3>参数传递</FONT></SPAN></STRONG></P>
<P><SPAN><FONT size=3>通过<SPAN>ReportDocument控件我们可以实现讲外部参数传入水晶报表中从而实现报表数据动态显示,具体实现请参考如下代码:</SPAN></FONT></SPAN></P>
<P><FONT size=3><SPAN>private void BuildReportViewerParameters(CrystalDecisions.Web.CrystalReportViewer rptViewer, Hashtable ParamTable)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//</SPAN><SPAN>定义报表视图的参数的方法</SPAN></FONT><SPAN><BR><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParameterFields ParamFields = new ParameterFields();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach (object key in ParamTable.Keys)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParameterField ParamField = new ParameterField();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParameterValues ParamValues = new ParameterValues();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParameterDiscreteValue ParamValue = new ParameterDiscreteValue();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParamValue.Value = ParamTable[key].ToString();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParamValues.Add(ParamValue);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParamField.ParameterFieldName = key.ToString();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParamField.CurrentValues = ParamValues;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParamFields.Add(ParamField);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rptViewer.ParameterFieldInfo = ParamFields;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private void BuildReportClassParameters(CrystalDecisions.CrystalReports.Engine.ReportClass rpt, Hashtable ParamTable)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//</FONT></SPAN><SPAN><FONT size=3>定义报表类的参数的方法</FONT></SPAN><SPAN><BR><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach (object key in ParamTable.Keys)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParameterValues ParamValues = new ParameterValues();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParameterDiscreteValue ParamValue = new ParameterDiscreteValue();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParamValue.Value = ParamTable[key].ToString();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParamValues.Add(ParamValue);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rpt.DataDefinition.ParameterFields[key.ToString()].ApplyCurrentValues(ParamValues);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;protected void BuildReportParameters(CrystalDecisions.Web.CrystalReportViewer rpt,Hashtable ParamTable)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//</FONT></SPAN><SPAN><FONT size=3>定义报表参数的方法</FONT></SPAN><SPAN><BR><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParameterFields ParamFields = new ParameterFields();<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach(object key in ParamTable.Keys)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParameterField ParamField;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParameterValues ParamValues;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParameterDiscreteValue ParamValue;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParamField = new ParameterField();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParamValues = new ParameterValues();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParamValue = new ParameterDiscreteValue();<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParamValue.Value = (string)ParamTable[key]; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParamValues.Add(ParamValue);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParamField.ParameterFieldName=(string)key;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParamField.CurrentValues = ParamValues;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParamFields.Add(ParamField);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rpt.ParameterFieldInfo = ParamFields;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</FONT></SPAN></P></DIV><img src ="http://www.cnblogs.com/zhangzheny/aggbug/1136233.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42134/" target="_blank">[新闻]JavaScript将成Silverlight的最大对手?</a>]]></description></item><item><title>SQL中的临时表和表变量</title><link>http://www.cnblogs.com/zhangzheny/archive/2008/03/18/1111421.html</link><dc:creator>黑星</dc:creator><author>黑星</author><pubDate>Tue, 18 Mar 2008 05:33:00 GMT</pubDate><guid>http://www.cnblogs.com/zhangzheny/archive/2008/03/18/1111421.html</guid><wfw:comment>http://www.cnblogs.com/zhangzheny/comments/1111421.html</wfw:comment><comments>http://www.cnblogs.com/zhangzheny/archive/2008/03/18/1111421.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zhangzheny/comments/commentRss/1111421.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zhangzheny/services/trackbacks/1111421.html</trackback:ping><description><![CDATA[<BR><BR>
<DIV class=disPlayContent id=body0>
<P>我们经常使用<B style="COLOR: black; BACKGROUND-COLOR: #99ff99">临时表</B>和<B style="COLOR: black; BACKGROUND-COLOR: #a0ffff">表变量</B>,那现在我们就对<B style="COLOR: black; BACKGROUND-COLOR: #99ff99">临时表</B>和<B style="COLOR: black; BACKGROUND-COLOR: #a0ffff">表变量</B>进行一下讨论.</P>
<P><FONT color=#dd6d22><B style="COLOR: black; BACKGROUND-COLOR: #99ff99">临时表</B> <BR><BR>局部<B style="COLOR: black; BACKGROUND-COLOR: #99ff99">临时表</B> <BR><BR>全局<B style="COLOR: black; BACKGROUND-COLOR: #99ff99">临时表</B> <BR><BR><B style="COLOR: black; BACKGROUND-COLOR: #a0ffff">表变量</B></FONT> <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR><BR><STRONG><B style="COLOR: black; BACKGROUND-COLOR: #99ff99">临时表</B></STRONG> <BR><BR><B style="COLOR: black; BACKGROUND-COLOR: #99ff99">临时表</B>存储在TempDB数据库中,所有的使用此<B style="COLOR: black; BACKGROUND-COLOR: #ffff66">SQL</B>&nbsp;Server&nbsp;实例的用户都共享这个TempDB,因为我们应该确保用来存储TempDB数据库的硬盘有足够的空间,以使之能够自己的增长.最好能够存储在一个拥有独立硬盘控制器上.因为这样不存在和其它的硬盘I/O进行争用. <BR><BR>&nbsp; <BR><BR>我们很多程序员认为<B style="COLOR: black; BACKGROUND-COLOR: #99ff99">临时表</B>非常危险,因为<B style="COLOR: black; BACKGROUND-COLOR: #99ff99">临时表</B>有可能被多个连接所共享.其实在<B style="COLOR: black; BACKGROUND-COLOR: #ffff66">SQL</B>&nbsp;Server中存在两种<B style="COLOR: black; BACKGROUND-COLOR: #99ff99">临时表</B>:局部<B style="COLOR: black; BACKGROUND-COLOR: #99ff99">临时表</B>和全局<B style="COLOR: black; BACKGROUND-COLOR: #99ff99">临时表</B>,局部<B style="COLOR: black; BACKGROUND-COLOR: #99ff99">临时表</B>(Local&nbsp;temp&nbsp;table)以#前缀来标识,并且只能被创建它的连接所使用.全局<B style="COLOR: black; BACKGROUND-COLOR: #99ff99">临时表</B>(Global&nbsp;temp&nbsp;table)以##前缀来进行标识,并且可以和其它连接所共享. <BR><BR>&nbsp; <BR><BR><STRONG>局部<B style="COLOR: black; BACKGROUND-COLOR: #99ff99">临时表</B></STRONG> <BR><BR>局部<B style="COLOR: black; BACKGROUND-COLOR: #99ff99">临时表</B>不能够被其它连接所共享的原因其实是在<B style="COLOR: black; BACKGROUND-COLOR: #ffff66">SQL</B>&nbsp;Server&nbsp;2000中自动为局部<B style="COLOR: black; BACKGROUND-COLOR: #99ff99">临时表</B>的表名后面加上了一个唯一字符来标识.如:&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;<FONT color=#1111ee>&nbsp;&nbsp;CREATE&nbsp;TABLE&nbsp;[#DimCustomer_test] <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;( <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[CustomerKey]&nbsp;[int] <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,&nbsp;&nbsp;&nbsp;[FirstName]&nbsp;[nvarchar](50)&nbsp;&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;,[MiddleName]&nbsp;[nvarchar](50)&nbsp;&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;,[LastName]&nbsp;[nvarchar](50)&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) <BR></FONT><BR>现在我们来查看一下TempDB中&nbsp;sysobjects表,我们会发现我们新创建的<B style="COLOR: black; BACKGROUND-COLOR: #99ff99">临时表</B>#DimCustomer_test已经被加上了后缀: <BR><BR>&nbsp; <BR><BR>&nbsp;&nbsp;<FONT color=#0909f7>USE&nbsp;TempDB <BR><BR>&nbsp;&nbsp;GO <BR><BR>&nbsp;&nbsp;SELECT&nbsp;name&nbsp;FROM&nbsp;sysobjects&nbsp;WHERE&nbsp;name&nbsp;LIKE&nbsp;’%DimCustomer%’ <BR></FONT><BR>&nbsp; <BR><BR>the&nbsp;Result&nbsp;is: <BR><BR>name <BR><BR>#DimCustomer_test___________________________________________________________________________________________________000000000005 <BR><BR><STRONG>全局<B style="COLOR: black; BACKGROUND-COLOR: #99ff99">临时表</B></STRONG> <BR><BR>下面我们来看一下全局<B style="COLOR: black; BACKGROUND-COLOR: #99ff99">临时表</B>: <BR><BR><FONT color=#0909f7>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CREATE&nbsp;TABLE&nbsp;[##DimCustomer_test] <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;( <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[CustomerKey]&nbsp;[int] <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[FirstName]&nbsp;[nvarchar](50)&nbsp;&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;,[MiddleName]&nbsp;[nvarchar](50)&nbsp;&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;,[LastName]&nbsp;[nvarchar](50)&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)</FONT> <BR><BR>现在我们来查看一下TempDB中&nbsp;sysobjects表,我们会发现我们新创建的<B style="COLOR: black; BACKGROUND-COLOR: #99ff99">临时表</B>##DimCustomer_test没有被加上了后缀: <BR><BR>&nbsp; <BR><BR>&nbsp;&nbsp;<FONT color=#0909f7>USE&nbsp;TempDB <BR><BR>&nbsp;&nbsp;GO <BR><BR>&nbsp;&nbsp;SELECT&nbsp;name&nbsp;FROM&nbsp;sysobjects&nbsp;WHERE&nbsp;name&nbsp;LIKE&nbsp;’%DimCustomer%’ <BR></FONT><BR>&nbsp; <BR><BR>The&nbsp;Result&nbsp;are: <BR><BR>#DimCustomer_test___________________________________________________________________________________________________000000000005 <BR><BR>##DimCustomer_test <BR><BR>&nbsp; <BR><BR>--Drop&nbsp;test&nbsp;temp&nbsp;tables <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#0000ff>&nbsp;&nbsp;&nbsp;DROP&nbsp;TABLE&nbsp;[##DimCustomer_test] <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DROP&nbsp;TABLE&nbsp;[#DimCustomer_test] <BR></FONT><BR>&nbsp; <BR><BR>可以看到我们刚才创建的全局<B style="COLOR: black; BACKGROUND-COLOR: #99ff99">临时表</B>名字并没有被加上标识. <BR><BR>&nbsp; <BR><BR><STRONG><B style="COLOR: black; BACKGROUND-COLOR: #a0ffff">表变量</B></STRONG> <BR><BR><B style="COLOR: black; BACKGROUND-COLOR: #a0ffff">表变量</B>和<B style="COLOR: black; BACKGROUND-COLOR: #99ff99">临时表</B>针对我们使用人员来说并没有什么不同,但是在存储方面来说,他们是不同的,<B style="COLOR: black; BACKGROUND-COLOR: #a0ffff">表变量</B>存储在内存中.所以在性能上和<B style="COLOR: black; BACKGROUND-COLOR: #99ff99">临时表</B>相比会更好些! <BR><BR>&nbsp; <BR><BR>另一个不同的地方是在表连接中使用<B style="COLOR: black; BACKGROUND-COLOR: #a0ffff">表变量</B>时,要为此<B style="COLOR: black; BACKGROUND-COLOR: #a0ffff">表变量</B>指定别名.如: <BR><BR>&nbsp; <BR><BR>&nbsp;&nbsp;<FONT color=#0000ff>USE&nbsp;AdventureWorksDW <BR><BR>&nbsp;&nbsp;GO <BR><BR><BR><BR>&nbsp;&nbsp;DECLARE&nbsp;@DimCustomer_test&nbsp;TABLE&nbsp; <BR><BR>&nbsp;&nbsp;( <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[CustomerKey]&nbsp;[int] <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[FirstName]&nbsp;[nvarchar](50)&nbsp;&nbsp; <BR><BR>&nbsp;,[MiddleName]&nbsp;[nvarchar](50)&nbsp;&nbsp; <BR><BR>&nbsp;,[LastName]&nbsp;[nvarchar](50)&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) <BR><BR>&nbsp;&nbsp;---insert&nbsp;data&nbsp;to&nbsp;@DimCustomer_test <BR><BR>&nbsp;&nbsp;INSERT&nbsp;@DimCustomer_test&nbsp; <BR><BR>&nbsp;&nbsp;( <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[CustomerKey]&nbsp;&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[FirstName]&nbsp;&nbsp; <BR><BR>&nbsp;,[MiddleName]&nbsp;&nbsp; <BR><BR>&nbsp;,[LastName]&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) <BR><BR>&nbsp;&nbsp;SELECT&nbsp;&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[CustomerKey]&nbsp;&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[FirstName]&nbsp;&nbsp; <BR><BR>&nbsp;,[MiddleName]&nbsp;&nbsp; <BR><BR>&nbsp;,[LastName]&nbsp; <BR><BR>&nbsp;&nbsp;FROM&nbsp;DimCustomer <BR><BR><BR><BR>&nbsp;&nbsp;SELECT&nbsp;[@DimCustomer_test].CustomerKey,SUM(FactInternetSales.OrderQuantity) <BR><BR>&nbsp;FROM&nbsp;@DimCustomer_test&nbsp;&nbsp;INNER&nbsp;JOIN&nbsp;FactInternetSales&nbsp;&nbsp;&nbsp;ON <BR><BR>&nbsp;@DimCustomer_test.CustomerKey&nbsp;=&nbsp;FactInternetSales.CustomerKey <BR><BR>&nbsp;Group&nbsp;BY&nbsp;CustomerKey <BR></FONT><BR>&nbsp; <BR><BR>Result: <BR><BR>&nbsp; <BR><BR>Server:&nbsp;Msg&nbsp;137,&nbsp;Level&nbsp;15,&nbsp;State&nbsp;2,&nbsp;Line&nbsp;32 <BR><BR>Must&nbsp;declare&nbsp;the&nbsp;variable&nbsp;’@DimCustomer_test’. <BR><BR>&nbsp; <BR><BR>&nbsp; <BR><BR>如果我们对上面的查询进行更改,对查询使用别名(并且找开IO): <BR><BR>-----in&nbsp;the&nbsp;follow&nbsp;script,we&nbsp;used&nbsp;the&nbsp;table&nbsp;alias. <BR><BR><BR><BR><FONT color=#113dee>&nbsp;DECLARE&nbsp;@DimCustomer_test&nbsp;TABLE&nbsp; <BR><BR>&nbsp;( <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;[CustomerKey]&nbsp;[int] <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[FirstName]&nbsp;[nvarchar](50)&nbsp;&nbsp; <BR><BR>,[MiddleName]&nbsp;[nvarchar](50)&nbsp;&nbsp; <BR><BR>,[LastName]&nbsp;[nvarchar](50)&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;) <BR><BR><BR><BR>&nbsp;INSERT&nbsp;@DimCustomer_test&nbsp; <BR><BR>&nbsp;( <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;[CustomerKey]&nbsp;&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[FirstName]&nbsp;&nbsp; <BR><BR>,[MiddleName]&nbsp;&nbsp; <BR><BR>,[LastName]&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;) <BR><BR>&nbsp;SELECT&nbsp;&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;[CustomerKey]&nbsp;&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[FirstName]&nbsp;&nbsp; <BR><BR>,[MiddleName]&nbsp;&nbsp; <BR><BR>,[LastName]&nbsp; <BR><BR>&nbsp;FROM&nbsp;DimCustomer <BR><BR><BR><BR>&nbsp;SELECT&nbsp;t.CustomerKey,f.OrderQuantity <BR><BR>&nbsp;FROM&nbsp;@DimCustomer_test&nbsp;t&nbsp;INNER&nbsp;JOIN&nbsp;FactInternetSales&nbsp;&nbsp;f&nbsp;ON <BR><BR>&nbsp;t.CustomerKey&nbsp;=&nbsp;f.CustomerKey <BR><BR>&nbsp;where&nbsp;t.CustomerKey=13513 <BR></FONT><BR>&nbsp; <BR><BR><B style="COLOR: black; BACKGROUND-COLOR: #a0ffff">表变量</B>在批处理结束时自动被系统删除,所以你不必要像使用<B style="COLOR: black; BACKGROUND-COLOR: #99ff99">临时表</B>表一样显示的对它进行删除.&nbsp;</P></DIV><img src ="http://www.cnblogs.com/zhangzheny/aggbug/1111421.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42133/" target="_blank">[新闻]没有谷歌就活不下去的四个网站</a>]]></description></item><item><title>.NET框架程序设计--NET框架开发平台的体系架构概览(FCL,CTS,CLS) </title><link>http://www.cnblogs.com/zhangzheny/archive/2008/02/25/1080816.html</link><dc:creator>黑星</dc:creator><author>黑星</author><pubDate>Mon, 25 Feb 2008 07:31:00 GMT</pubDate><guid>http://www.cnblogs.com/zhangzheny/archive/2008/02/25/1080816.html</guid><wfw:comment>http://www.cnblogs.com/zhangzheny/comments/1080816.html</wfw:comment><comments>http://www.cnblogs.com/zhangzheny/archive/2008/02/25/1080816.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zhangzheny/comments/commentRss/1080816.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zhangzheny/services/trackbacks/1080816.html</trackback:ping><description><![CDATA[<DIV class=postTitle>&nbsp;</DIV>
<P><FONT color=#ffa500><FONT color=#000000><U>.NET框架程序设计--NET框架开发平台的体系架构概览(FCL,CTS,CLS)</U></FONT><BR><BR>(一)FCL(.NETFrameworkClassLibrary):.NET框架类库</FONT><BR><BR>FCL包含了数以千计的类型,这些类型按照其功能用命名空间(Namespace)来组织。<BR><BR>.NET的各种语言只是定义了一些规则,而我们在实际中的运用,则要在很大程度上去调用FCL中的类型。正是这些类型,使得我们可以运用更少的语言知识,来创建丰富的程序。<BR><BR>CLR和FCL支持我们可以开发以下几种应用程序:<BR><BR>(1)XML Web Services<BR>(2)Web Forms<BR>(3)Windows Forms<BR>(4)Windows CUI(控制台应用程序)<BR>(5)Windows服务(Windows SCM-Service Control Manager-所控制的服务程序)<BR>(6)组件库<BR><BR><BR><FONT color=#ffa500>(二)CTS(Common Type System)通用类型系统</FONT><BR><BR>类型是CLR的基础,Microsoft定义了一个正式规范--CTS来描述类型的定义与行为。<BR><BR>CTS定义了类型以及类型成员的访问控制项。<BR><BR>CTS定义了类型的行为,使得语言与代码行为的分离:我们可以用C++定义自己的类型以及成员,也可以用C#,VB来定义,但是,类型的行为是绝对完全相同的,与语言无关的。<BR><BR><BR><FONT style="BACKGROUND-COLOR: #ffffff" color=#ffa500>(三)CLS(Common Language Specification)公共语言规范</FONT><BR><BR>[参见相应目录例如:\Microsoft Visual Studio .NET 2003\SDK\v1.1\Tool Developers Guide\docs里面的Partition I Architecture.doc]<BR></P>
<P>
<TABLE style="WIDTH: 581px; HEIGHT: 288px" height=288 cellSpacing=0 cellPadding=0 width=581 border=1>
<TBODY>
<TR>
<TD>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 要和其他对象完全交互，而不管这些对象是以何种语言实现的，对象必须只向调用方公开那些它们必须与之互用的所有语言的通用功能。为此定义了公共语言规范 (CLS)，它是许多应用程序所需的一套基本语言功能。CLS 规则定义了<A href="http://msdn.microsoft.com/library/CHS/cpguide/html/cpconthecommontypesystem.asp"><FONT color=#002c99>通用类型系统</FONT></A>的子集，即所有适用于公共类型系统的规则都适用于 CLS，除非 CLS 中定义了更严格的规则。CLS 通过定义一组开发人员可以确信在多种语言中都可用的功能来增强和确保语言互用性。CLS 还建立了 CLS 遵从性要求，这帮助您确定您的托管代码是否符合 CLS 以及一个给定的工具对托管代码（该代码是使用 CLS 功能的）开发的支持程度。<BR><BR>如果您的组件在对其他代码（包括派生类）公开的 API 中只使用了 CLS 功能，那么可以保证在任何支持 CLS 的编程语言中都可以访问该组件。遵守 CLS 规则、仅使用 CLS 中所包含功能的组件叫做符合 CLS 的组件。<BR><BR>[http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpguide/html/cpconwritingcls-compliantcode.asp]</TD></TR></TBODY></TABLE></P>
<P><BR>如果你想开发一门面向CLR编译器,CLS是必须遵循的。<BR><BR><IMG height=331 src="http://www.cnblogs.com/images/cnblogs_com/caca/clrcts.jpg" width=330 border=0></P>
<P>图中所示:<BR>CLR/CTS提供了一个组特性,一些语言会提供这些特性的一个较大子集(IL提供全部特性)。而CLS是每种语言必须支持的一个最小特性集合。<BR></P>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">using</SPAN><SPAN style="COLOR: #000000">&nbsp;System;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">检测CLS兼容性<BR></SPAN><SPAN style="COLOR: #008000">&nbsp;&nbsp; //CLR会检测共有类型成员是否符合CLS特性<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">[assembly:CLSCompliant(</SPAN><SPAN style="COLOR: #0000ff">true</SPAN><SPAN style="COLOR: #000000">)]<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #008000">//公</SPAN><SPAN style="COLOR: #008000">有类型,不会报错误</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;App()<BR><IMG id=Codehighlighter1_87_255_Open_Image onclick="this.style.display='none'; Codehighlighter1_87_255_Open_Text.style.display='none'; Codehighlighter1_87_255_Closed_Image.style.display='inline'; Codehighlighter1_87_255_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_87_255_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_87_255_Closed_Text.style.display='none'; Codehighlighter1_87_255_Open_Image.style.display='inline'; Codehighlighter1_87_255_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_87_255_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_87_255_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">错误:App.Abc()的返回类型与CLS不兼容</SPAN><SPAN style="COLOR: #008000"><BR><IMG id=Codehighlighter1_143_153_Open_Image onclick="this.style.display='none'; Codehighlighter1_143_153_Open_Text.style.display='none'; Codehighlighter1_143_153_Closed_Image.style.display='inline'; Codehighlighter1_143_153_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_143_153_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_143_153_Closed_Text.style.display='none'; Codehighlighter1_143_153_Open_Image.style.display='inline'; Codehighlighter1_143_153_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;UInt32&nbsp;Abc()</SPAN><SPAN id=Codehighlighter1_143_153_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_143_153_Open_Text><SPAN style="COLOR: #000000">{</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">错误:大小写问题引起的CLS不兼容</SPAN><SPAN style="COLOR: #008000"><BR><IMG id=Codehighlighter1_200_201_Open_Image onclick="this.style.display='none'; Codehighlighter1_200_201_Open_Text.style.display='none'; Codehighlighter1_200_201_Closed_Image.style.display='inline'; Codehighlighter1_200_201_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_200_201_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_200_201_Closed_Text.style.display='none'; Codehighlighter1_200_201_Open_Image.style.display='inline'; Codehighlighter1_200_201_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;abc()</SPAN><SPAN id=Codehighlighter1_200_201_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_200_201_Open_Text><SPAN style="COLOR: #000000">{}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">正确,因为是私有的</SPAN><SPAN style="COLOR: #008000"><BR><IMG id=Codehighlighter1_243_253_Open_Image onclick="this.style.display='none'; Codehighlighter1_243_253_Open_Text.style.display='none'; Codehighlighter1_243_253_Closed_Image.style.display='inline'; Codehighlighter1_243_253_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_243_253_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_243_253_Closed_Text.style.display='none'; Codehighlighter1_243_253_Open_Image.style.display='inline'; Codehighlighter1_243_253_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000">&nbsp;UInt32&nbsp;ABC()</SPAN><SPAN id=Codehighlighter1_243_253_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cnblogs.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_243_253_Open_Text><SPAN style="COLOR: #000000">{</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN></DIV></DIV>
<P><BR><BR><FONT color=#ffa500>(四)CTS和CLS都是CLI(Common Language Infrastructure公用语言基础结构)的组成部分。<BR><BR><FONT color=#000000>The basic elements of the CLI are:<BR></FONT>·CL:I<BR>·CTS<BR>·CLS<BR>·VES(Virtual Execution System),<FONT color=#000000>which executes managed code and lies between the code and the native operating system<BR><BR>And these elements's relation(CLI,CTS,CLS)<BR>:</FONT><BR><IMG height=373 src="http://www.cnblogs.com/images/cnblogs_com/caca/clictscls.gif" width=500 border=0><BR>
<TABLE style="WIDTH: 557px; HEIGHT: 100px" height=100 cellSpacing=0 cellPadding=0 width=557 border=1>
<TBODY>
<TR>
<TD>
<P class=docText>Each programming language that complies with the CLI uses a subset of the Common Type System that is appropriate for that language. Language-based tools communicate with each other and with the Virtual Execution System using metadata to define and reference the types used to construct the application. When a constructor is called to create an instance of an object, the VES uses the metadata to create instances of types, and to provide data type information to other parts of the infrastructure (remoting services, assembly downloading, security, etc.).<BR>Languages and programming environments that do target the CLI—there are currently more than 20, and the list is growing—produce what is called <SPAN class=docEmphStrong>managed code</SPAN> and <SPAN class=docEmphStrong>managed data</SPAN>. The key to these is <SPAN class=docEmphStrong>metadata</SPAN>—information associated with the code and data that describes the data, identifies the locations of references to objects, and gives the VES enough information to handle most of the overhead associated with older programming models. This overhead includes handling exceptions and security, and providing information to tools that can ensure memory safety. It may also include running on remote systems by creating proxies for the programmer, as well as managing object lifetime (called <SPAN class=docEmphStrong>garbage collection</SPAN>).</P>
<P class=docText>Among the things the CLI specifies are the following:</P>
<UL>
<LI>
<P class=docList>The Common Type System</P>
<LI>
<P class=docList>The Common Language Specification for publicly available calls</P>
<LI>
<P class=docList>Metadata</P>
<LI>
<P class=docList>Portable file format for managed code</P>
<LI>
<P class=docList>The Common Intermediate Language (CIL) instruction set</P>
<LI>
<P class=docList>Basic requirements of a Virtual Execution System</P>
<LI>
<P class=docList>A programming framework built on top of all of this</P></LI></UL>
<P class=docText>The CLI also bridges the managed and unmanaged worlds. The CLI describes how, in the same program, managed modules can be run with unmanaged modules compiled in native code (machine code, specific to a given system). This interoperation is also crucial to describing how modules can communicate though the VES with the underlying operating systems.<BR><BR>come from 《<STRONG>Common Language Infrastructure Annotated Standard</STRONG>》</P></TD></TR></TBODY></TABLE></FONT></P><img src ="http://www.cnblogs.com/zhangzheny/aggbug/1080816.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42132/" target="_blank">[新闻]Google 10周岁生日</a>]]></description></item><item><title>大全</title><link>http://www.cnblogs.com/zhangzheny/archive/2008/02/25/1080681.html</link><dc:creator>黑星</dc:creator><author>黑星</author><pubDate>Mon, 25 Feb 2008 06:29:00 GMT</pubDate><guid>http://www.cnblogs.com/zhangzheny/archive/2008/02/25/1080681.html</guid><wfw:comment>http://www.cnblogs.com/zhangzheny/comments/1080681.html</wfw:comment><comments>http://www.cnblogs.com/zhangzheny/archive/2008/02/25/1080681.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zhangzheny/comments/commentRss/1080681.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zhangzheny/services/trackbacks/1080681.html</trackback:ping><description><![CDATA[1 (1)面向对象的语言具有__继承性_性、_封装性_性、_多态性 性。 <BR>(2)能用foreach遍历访问的对象需要实现 _ IEnumerable 接口或声明_ GetEnumerator 方法的类型。1.c#中的三元运算符是__?:__ <BR>2.当整数a赋值给一个object对象时，整数a将会被__装箱___? <BR>3.类成员有__3__种可访问形式？ <BR>4.public static const int A=1;这段代码有错误么？是什么？ const成员都是static所以应该去掉static <BR>5.float f=-123.567F; <BR>int i=(int)f; <BR>i的值现在是_-123____? <BR>6.利用operator声明且仅声明了==，有什么错误么? 要同时修改Equale和GetHash() ? 重载了"==" 就必须重载 "!=" <BR>7.委托声明的关键字是___ delegate ___? <BR>8.用sealed修饰的类有什么特点？不可被继承 <BR>9.在Asp.net中所有的自定义用户控件都必须继承自_ System.Web.UI.UserControl _______? <BR>10.在.Net中所有可序列化的类都被标记为__[serializable]___? <BR>11.在.Net托管代码中我们不用担心内存漏洞，这是因为有了_ gC __? <BR>12.下面的代码中有什么错误吗？_ abstract override 是不可以一起修饰______ <BR>using System; <BR>class A <BR>{ <BR>public virtual void F(){ <BR>Console.WriteLine("A.F"); <BR>} <BR>} <BR>abstract class B:A <BR>{ <BR>public abstract override void F(); <BR>} <BR>13.当类T只声明了私有实例构造函数时，则在T的程序文本外部，_不可以_（可以 or 不可以）从T派生出新的类，_不可以_（可以 or 不可以）直接创建T的任何实例。 <BR>14.下面这段代码有错误么？case():不行 default; <BR>switch (i){ <BR>case(): <BR>CaseZero(); <BR>break; <BR>case 1: <BR>CaseOne(); <BR>break; <BR>case 2: <BR>dufault; <BR>CaseTwo(); <BR>break; <BR>} <BR>15.在.Net中，类System.Web.UI.Page 可以被继承么？可以 <BR>2. 不定项选择： <BR>(1) 以下叙述正确的是： B C <BR>A. 接口中可以有虚方法。B. 一个类可以实现多个接口。 C. 接口不能被实例化。 D. 接口中可以包含已实现的方法。 <BR>(2) 从数据库读取记录，你可能用到的方法有：B C D <BR>A. ExecuteNonQuery B. ExecuteScalar C. Fill D. ExecuteReader <BR>2.对于一个实现了IDisposable接口的类，以下哪些项可以执行与释放或重置非托管资源相关的应用程序定义的任务？(多选) ( ABC ) <BR>A.Close B.Dispose C.Finalize <BR>D.using E.Quit <BR>3.以下关于ref和out的描述哪些项是正确的？(多选) ( ACD ) <BR>A.使用ref参数，传递到ref参数的参数必须最先初始化。 <BR>B.使用out参数，传递到out参数的参数必须最先初始化。 <BR>C.使用ref参数，必须将参数作为ref参数显式传递到方法。 <BR>D.使用out参数，必须将参数作为out参数显式传递到方法。 <BR>1.在对SQL Server 数据库操作时应选用（A）。 <BR>a)SQL Server .NET Framework 数据提供程序； <BR>b)OLE DB .NET Framework 数据提供程序； <BR>c)ODBC .NET Framework 数据提供程序； <BR>d)Oracle .NET Framework数据提供程序； <BR>2.下列选项中，（C）是引用类型。 <BR>a)enum类型 b)struct类型 c)string类型 d)int类型 <BR>3.关于ASP.NET中的代码隐藏文件的描述正确的是（C） <BR>a)Web窗体页的程序的逻辑由代码组成，这些代码的创建用于与窗体交互。编程逻辑唯一与用户界面不同的文件中。该文件称作为“代码隐藏”文件，如果用C＃创建，该文件将具有“.ascx.cs”扩展名。 <BR>b)项目中所有Web窗体页的代码隐藏文件都被编译成.EXE文件。 <BR>c)项目中所有的Web窗体页的代码隐藏文件都被编译成项目动态链接库（.dll）文件。 <BR>d)以上都不正确。 <BR>4.以下描述错误的是（A） <BR>a)在C++中支持抽象类而在C#中不支持抽象类。 <BR>b)C++中可在头文件中声明类的成员而在CPP文件中定义类的成员，在C#中没有头文件并且在同一处声明和定义类的成员。 <BR>c)在C#中可使用 new 修饰符显式隐藏从基类继承的成员。 <BR>d)在C#中要在派生类中重新定义基类的虚函数必须在前面加Override。 <BR>5.C#的数据类型有（B） <BR>a)值类型和调用类型； b)值类型和引用类型；c)引用类型和关系类型；d)关系类型和调用类型； <BR>6.下列描述错误的是（D） <BR>a)类不可以多重继承而接口可以； <BR>b)抽象类自身可以定义成员而接口不可以； <BR>c)抽象类和接口都不能被实例化； <BR>d)一个类可以有多个基类和多个基接口； <BR>7.在DOM中，装载一个XML文档的方法（D） <BR>a)save方法 b)load方法 c)loadXML方法 d)send方法 <BR>8.下列关于构造函数的描述正确的是（C） <BR>a)构造函数可以声明返回类型。 <BR>b)构造函数不可以用private修饰 <BR>c)构造函数必须与类名相同 <BR>d)构造函数不能带参数 <BR>9.以下是一些C#中的枚举型的定义，其中错误的用法有（） <BR>a)public enum var1{ Mike = 100, Nike = 102, Jike } <BR>b)public enum var1{ Mike = 100, Nike, Jike } <BR>c)public enum var1{ Mike=-1 , Nike, Jike } <BR>d)public enum var1{ Mike , Nike , Jike } <BR>10.int[][] myArray3=new int[3][]{new int[3]{5,6,2},new int[5]{6,9,7,8,3},new int[2]{3,2}}; myArray3[2][2]的值是（D）。 <BR>a)9 b)2 c)6 d)越界 <BR>11.接口是一种引用类型，在接口中可以声明（A），但不可以声明公有的域或私有的成员变量。 <BR>a)方法、属性、索引器和事件； b)方法、属性信息、属性； c)索引器和字段； d)事件和字段； <BR>12.ASP.NET框架中，服务器控件是为配合Web表单工作而专门设计的。服务器控件有两种类型，它们是(A ) <BR>a)HTML控件和Web控件 b)HTML控件和XML控件 c)XML控件和Web控件 d)HTML控件和IIS控件 <BR>13.ASP.NET中，在Web窗体页上注册一个用户控件，指定该控件的名称为”Mike”，正确的注册指令为( D) <BR>a)<%&#64;Register TagPrefix = “Mike” TagName = “Space2” Src = “myX.ascx”%> <BR>b)<%&#64;Register TagPrefix = “Space2” TagName = “Mike” Src = “myX.ascx”%> <BR>c)<%&#64;Register TagPrefix = “SpaceX” TagName = “Space2” Src = “Mike”%> <BR>d)以上皆非 <BR>14.在ADO.NET中，对于Command对象的ExecuteNonQuery()方法和ExecuteReader()方法，下面叙述错误的是（C）。 <BR>a)insert、update、delete等操作的Sql语句主要用ExecuteNonQuery()方法来执行； <BR>b)ExecuteNonQuery()方法返回执行Sql语句所影响的行数。 <BR>c)Select操作的Sql语句只能由ExecuteReader()方法来执行； <BR>d)ExecuteReader()方法返回一个DataReder对象； <BR>15.下列ASP.NET语句（b）正确地创建了一个与SQL Server 2000数据库的连接。 <BR>a)SqlConnection con1 = new Connection(“Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB”); <BR>b)SqlConnection con1 = new SqlConnection(“Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB”); <BR>c)SqlConnection con1 = new SqlConnection(Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB); <BR>d)SqlConnection con1 = new OleDbConnection(“Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB”); <BR>16.Winform中，关于ToolBar控件的属性和事件的描述不正确的是(D)。 <BR>a)Buttons属性表示ToolBar控件的所有工具栏按钮 <BR>b)ButtonSize属性表示ToolBar控件上的工具栏按钮的大小，如高度和宽度 <BR>c)DropDownArrows属性表明工具栏按钮（该按钮有一列值需要以下拉方式显示）旁边是否显示下箭头键 <BR>d)ButtonClick事件在用户单击工具栏任何地方时都会触发 <BR>17.在ADO.NET中执行一个存储过程时，如果要设置输出参数则必须同时设置参数的方向和（B ），必要时还要设置参数尺寸。 <BR>a)大小； b)上限； c)初始值； d)类型； <BR>18.如果将窗体的FormBoderStyle设置为None，则( B)。 <BR>a)窗体没有边框并不能调整大小； b)窗体没有边框但能调整大小； <BR>c)窗体有边框但不能调整大小； d)窗体是透明的； <BR>19.如果要将窗体设置为透明的，则( B) <BR>a)要将FormBoderStyle属性设置为None； b)要将Opacity属性设置为小于100%得值； <BR>c)要将locked 属性设置为True； d)要将 Enabled属性设置为True； <BR>20.下列关于C#中索引器理解正确的是(B/C ) <BR>a)索引器的参数必须是两个或两个以上 b)索引器的参数类型必须是整数型 <BR>c)索引器没有名字 d)以上皆非 <BR>21.下面描述错误的是( C/D)。 <BR>a)窗体也是控件； b)窗体也是类； c)控件是从窗体继承来的； d)窗体的父类是控件类； <BR>22.要对注册表进行操作则必须包含( D)。 <BR>a)System.ComponentModel命名空间； b)System.Collections命名空间； <BR>c)System.Threading命名空间； d)Microsoft.Win32命名空间； <BR>23.要创建多文档应用程序，需要将窗体的(D )属性设为true。 <BR>a)DrawGrid； b)ShowInTaskbar； c)Enabled； d)IsMdiContainer； <BR>24.如果设treeView1=new TreeView()，则treeView1.Nodes.Add("根节点")返回的是一个 ()类型的值。 <BR>a)TreeNode； <BR>b)int； <BR>c)string； <BR>d)TreeView； <BR>25.下面关于XML的描述错误的是（D）。 <BR>a)XML提供一种描述结构化数据的方法； <BR>b)XML 是一种简单、与平台无关并被广泛采用的标准； <BR>c)XML文档可承载各种信息； <BR>d)XML只是为了生成结构化文档； <BR>1.装箱、拆箱操作发生在: ( C ) <BR>A.类与对象之间 B.对象与对象之间 <BR>C.引用类型与值类型之间 D.引用类型与引用类型之间 <BR>2.用户类若想支持Foreach语句需要实现的接口是: ( A ) <BR>A.IEnumerableB.IEnumerator <BR>C.ICollectionD.ICollectData <BR>3..Net Framework通过什么与COM组件进行交互操作？( C ) <BR>A.Side By SideB.Web Service <BR>C.InteropD.PInvoke <BR>4..Net依靠以下哪一项技术解决COM存在的Dll Hell问题的？( A ) <BR>A.Side By SideB.Interop <BR>C.PInvokeD.COM+ <BR>5.装箱与拆箱操作是否是互逆的操作？( B ) <BR>A.是B.否 <BR>6.以下哪个是可以变长的数组？( D ) <BR>A.Array B.string[] <BR>C.string[N] D.ArrayList <BR>7.用户自定义异常类需要从以下哪个类继承：( A ) <BR>A.Exception B.CustomException <BR>C.ApplicationException D.BaseException <BR>8.以下代码段中能否编译通过？请给出理由。 <BR>try <BR>{ <BR>} <BR>catch(FileNotFoundException e1) <BR>{ <BR>} <BR>catch(Exception e2) <BR>{ <BR>} <BR>catch(IOException e3) <BR>{ <BR>} <BR>catch <BR>{ <BR>} <BR>9.对于一个实现了IDisposable接口的类，以下哪些项可以执行与释放或重置非托管资源相关的应用程序定义的任务？(多选) ( ABC ) <BR>A.Close B.DisposeC.Finalize <BR>D.using E.Quit <BR>10.Net依赖以下哪项技术实现跨语言互用性？( C ) <BR>A.CLR B.CTS C.CLS D.CTT <BR>11.请问: String类与StringBuilder类有什么区别？为什么在.Net类库中要同时存在这2个类？(简答) <BR>如果要操作一个不断增长的字符串，尽量不用String类,改用StringBuilder类。两个类的工作原理不同:String类是一种传统的修改字符串的方式，它确实可以完成把一个字符串添加到另一个字符串上的工作没错,但是在.NET框架下，这个操作实在是划不来。因为系统先是把两个字符串写入内存，接着删除原来的String对象，然后创建一个String对象，并读取内存中的数据赋给该对象。这一来二去的，耗了不少时间。而使用System.Text命名空间下面的StringBuilder类就不是这样了，它提供的Append方法，能够在已有对象的原地进行字符串的修改，简单而且直接。当然，一般情况下觉察不到这二者效率的差异，但如果你要对某个字符串进行大量的添加操作，那么StringBuilder类所耗费的时间和String类简直不是一个数量级的。 <BR>12.以下哪个类是int的基类？( ) <BR>A.Int32 B.Object C.ValueType D.Int16 <BR>二、C# 部分* <BR>13.以下哪些可以作为接口成员？(多选) ( ABDE ) <BR>A.方法B.属性C.字段D.事件E.索引器 <BR>F.构造函数G.析构函数 <BR>14.以下关于ref和out的描述哪些项是正确的？(多选) ( ACD ) <BR>A.使用ref参数，传递到ref参数的参数必须最先初始化。 <BR>B.使用out参数，传递到out参数的参数必须最先初始化。 <BR>C.使用ref参数，必须将参数作为ref参数显式传递到方法。 <BR>D.使用out参数，必须将参数作为out参数显式传递到方法。 <BR>15.“访问范围限定于此程序或那些由它所属的类派生的类型”是对以下哪个成员可访问性含义的正确描述？( B ) <BR>A.public B.protected C.internal D.protected internal <BR>16.class Class1 <BR>{ <BR>private static int count = 0; <BR>static Class1() <BR>{ <BR>count++; <BR>} <BR>public Class1() <BR>{ <BR>count++; <BR>} <BR>} <BR>Class1 o1 = new Class1(); <BR>Class1 o2 = new Class1(); <BR>请问，o1.Count的值是多少？( C ) <BR>A.1 B.2 C.3 D.4 <BR>17.abstract class BaseClass <BR>{ <BR>public virtual void MethodA() <BR>{ <BR>} <BR>public virtual void MethodB() <BR>{ <BR>} <BR>} <BR>class Class1: BaseClass <BR>{ <BR>public void MethodA(string arg) <BR>{ <BR>} <BR>public override void MethodB() <BR>{ <BR>} <BR>} <BR>class Class2: Class1 <BR>{ <BR>new public void MethodB() <BR>{ <BR>} <BR>} <BR>class MainClass <BR>{ <BR>public static void Main(string[] args) <BR>{ <BR>Class2 o = new Class2(); <BR>Console.WriteLine(o.MethodA()); <BR>} <BR>} <BR>请问，o.MethodA调用的是: ( A ) <BR>A.BaseClass.MethodAB.Class2.MethodA <BR>C.Class1.MethodAD.都不是 <BR>18.请叙述属性与索引器的区别。 <BR>属性 索引器 <BR>通过名称标识。 通过签名标识。 <BR>通过简单名称或成员访问来访问。 通过元素访问来访问。 <BR>可以为静态成员或实例成员。 必须为实例成员。 <BR>属性的 get 访问器没有参数。 索引器的 get 访问器具有与索引器相同的形参表。 <BR>属性的 set 访问器包含隐式 value 参数。 除了 value 参数外，索引器的 set 访问器还具有与索引器相同的形参表。 <BR>19.请叙述const与readonly的区别。 <BR>每一个class至多只可以定义一个static构造函数，并且不允许增加访问级别关键字，参数列必须为空。 <BR>为了不违背编码规则，通常把static数据成员声明为private，然后通过statci property提供读写访问。 <BR>const 关键字用于修改字段或局部变量的声明。它指定字段或局部变量的值不能被修改。常数声明引入给定类型的一个或多个常数。 <BR>const数据成员的声明式必须包含初值，且初值必须是一个常量表达式。因为它是在编译时就需要完全评估。 <BR>const成员可以使用另一个const成员来初始化，前提是两者之间没有循环依赖。 <BR>readonly在运行期评估赋值，使我们得以在确保“只读访问”的前提下，把object的初始化动作推迟到运行期进行。 <BR>readonly 关键字与 const 关键字不同：　const 字段只能在该字段的声明中初始化。readonly 字段可以在声明或构造函数中初始化。因此，根据所使用的构造函数，readonly 字段可能具有不同的值。另外，const 字段是编译时常数，而 readonly 字段可用于运行时常数。 <BR>　　readonly 只能在声明时或者构造函数里面初始化，并且不能在 static 修饰的构造函数里面。 <BR>21.您需要创建一个ASP.NET应用程序，公司考虑使用Windows身份认证。 <BR>　　所有的用户都存在于AllWin这个域中。您想要使用下列认证规则来配置这个应用程序： <BR>　　　　a、 匿名用户不允许访问这个应用程序。 <BR>　　　　b、 所有雇员除了Tess和King都允许访问这个应用程序。 <BR>　　请问您应该使用以下哪一个代码段来配置这个应用程序？( A ) <BR>A. <AUTHORIZATION><BR>　　　<DENY users="”allwin\tess," allwin\king”> <BR>　　　<ALLOW users="”*”"> <BR>　　　<DENY users="”?”"> <BR>　</AUTHORIZATION> <BR>B. <AUTHORIZATION><BR>　　　<ALLOW users="”*”"> <BR>　　　<DENY users="”allwin\tess," allwin\king”> <BR>　　　<DENY users="”?”"> <BR>　</AUTHORIZATION> <BR>C. <AUTHORIZATION><BR>　　　<DENY users="”allwin\tess," allwin\king”> <BR>　　　<DENY users="”?”"> <BR>　　　<ALLOW users="”*”"> <BR>　</AUTHORIZATION> <BR>D. <AUTHORIZATION><BR>　　　<ALLOW users="”allwin\tess," allwin\king”> <BR>　　　<ALLOW users="”*”"> <BR>　</AUTHORIZATION> <BR>E.<AUTHORIZATION> <BR>　　　<ALLOW users="”*”"> <BR>　　　<DENY users="”allwin\tess," allwin\king”> <BR>　</AUTHORIZATION> <BR>22.您要创建一个显示公司员工列表的应用程序。您使用一个DataGrid控件显示员工的列表。您打算修改这个控件以便在这个Grid的Footer显示员工合计数。请问您应该怎么做？( C? ) <BR>　　A.重写OnPreRender事件，当Grid的Footer行被创建时显示合计数。 <BR>　　B.重写OnItemCreated事件，当Grid的Footer行被创建时显示合计数。 <BR>　　C.重写OnItemDataBound事件，当Grid的Footer行被创建时显示合计数。 <BR>　　D. 重写OnLayout事件，当Grid的Footer行被创建时显示合计数。 <BR>23.您要创建ASP.NET应用程序用于运行AllWin公司内部的Web站点，这个应用程序包含了50个页面。您想要配置这个应用程序以便当发生一个HTTP代码错误时它可以显示一个自定义的错误页面给用户。您想要花最小的代价完成这些目标，您应该怎么做？(多选)( CD ) <BR>　　A.在这个应用程序的Global.asax文件中创建一个Application_Error过程去处理ASP.NET代码错误。 <BR>　　B.在这个应用程序的Web.config文件中创建一个applicationError节去处理ASP.NET代码错误。 <BR>　　C.在这个应用程序的Global.asax文件中创建一个CustomErrors事件去处理HTTP错误。 <BR>　　D.在这个应用程序的Web.config文件中创建一个CustomErrors节去处理HTTP错误。 <BR>　　E.在这个应用程序的每一页中添加一个Page指示符去处理ASP.NET 代码错误。 <BR>　　F. 在这个应用程序的每一页中添加一个Page指示符去处理ASP.NET HTTP错误。 <BR>24.您的公司有一个DB Server，名为AllWin，其上装了MS SQLSERVER 2000。现在需要您写一个数据库连接字符串，用以连接AllWin上SQL SERVER中的一个名为PubBase实例的Test库。请问，应该选择下面哪一个字符串？( B ) <BR>　　A. “Server=AllWin;Data Source=PubBase;Initial Catalog=Test;Integrated Security=SSPI” <BR>　　B. “Server= AllWin;Data Source=PubBase;Database=Test;Integrated Security= SSPI” <BR>　　C. “Data Source= AllWin \PubBase;Initial Category=PubBase;Integrated Security= SSPI” <BR>　　D. “Data Source= AllWin \ PubBase;Database=Test;Integrated Security= SSPI” <BR>25.您为AllWin公司创建了一个ASP.NET应用程序。这个应用程序调用一个 Xml Web Service。这个 Xml Web Service 将返回一个包含了公司雇员列表的DataSet对象。请问您该如何在这个程序中使用这个 Xml Web Service？( ? ) <BR>　　A.在“引用”对话框的.Net标签中选择 System.Web.Services.dll。 <BR>　　B.在“Web引用”对话框中输入这个 XML Web service 的地址。 <BR>　　C.在您的 Global.asax.cs 中添加一条 using 语句并指定这个 XML Web service 的地址。 <BR>　　D.在您的 Global.asax.cs 中写一个事件处理器导入这个 Xml Web Service 相应的 .wsdl 和 .disco 文件。 <BR>26.您要创建一个ASP.NET应用程序在DataGrid控件中显示一个经过排序的列表。产品数据被存放于一个名为PubBase的Microsoft SQL Server 数据库。每个产品的主键是ProductID，Numeric型并且每个产品有一个字母描述字段，名为ProductName。您使用一个SqlDataAdapter对象和一个SqlCommand对象通过调用一个存储过程从数据库中获取产品数据。您将SqlCommand对象的CommandType属性设置为CommandType.StoredProcedure，并将它的CommandText属性设置为procProductList。您成功的获取了一个DataTable对象，其中是已经按ProductID降序排列的产品列表。您打算显示以相反的字母顺序排列的ProductName，请问该怎么做？ ( B ) <BR>　　A. 将SqlCommand对象的CommandType属性修改为CommandType.Text，将CommandText属性修改为”SELECT * FROM procProductList ORDER BY ProductName DESC”。然后将这个DataTable对象绑定到DataGrid控件。 <BR>　　B. 创建一个基于这个DataTable对象的新的DataView并将这个DataView的Sort属性设置为“ProductName DESC”。然后将这个DataView对象绑定到DataGrid控件。 <BR>　　C. 将DataGrid控件的AllowSorting属性设置为True，并将DataGridColumn的SortExpression属性设置为 “ProductName DESC”.以显示ProductName。然后将这个DataTable对象绑定到DataGrid控件。 <BR>　　D. 将DataTable对象的DisplayExpression属性设置为 “ORDER BY ProductName DESC”.。然后将这个DataTable对象绑定到DataGrid控件。 <BR>76.C#代码实现，确保windows程序只有一个实例（instance） <BR><BR>///<SUMMARY> <BR>///应用程序的主入口点。 <BR>///</SUMMARY> <BR>[STAThread] <BR>staticvoid Main() <BR>{ <BR>//防止程序多次运行 <BR>if(!OneInstance.IsFirst("GetPayInfo")) <BR>{ <BR>MessageBox.Show ("警告:程序正在运行中! 请不要重复打开程序!可在右下角系统栏找到!","程序错误提示:",MessageBoxButtons.OK,MessageBoxIcon.Stop); <BR>return; <BR>} <BR>Application.Run(new Form1()); <BR>} <BR>// ******************* 防止程序多次执行 ************************** <BR>publicabstractclass OneInstance <BR>{ <BR>///<SUMMARY> <BR>///判断程序是否正在运行 <BR>///</SUMMARY> <BR>///<PARAM name="appId">程序名称</PARAM> <BR>///<RETURNS>如果程序是第一次运行返回True,否则返回False</RETURNS> <BR>publicstaticbool IsFirst(string appId) <BR>{ <BR>bool ret=false; <BR>if(OpenMutex(0x1F0001,0,appId)==IntPtr.Zero) <BR>{ <BR>CreateMutex(IntPtr.Zero,0,appId); <BR>ret=true; <BR>} <BR>return ret; <BR>} <BR>[DllImport("Kernel32.dll",CharSet=CharSet.Auto)] <BR>privatestaticextern IntPtr OpenMutex( <BR>uint dwDesiredAccess, // access <BR>int bInheritHandle, // inheritance option <BR>string lpName // object name <BR>); <BR><BR>[DllImport("Kernel32.dll",CharSet=CharSet.Auto)] <BR>privatestaticextern IntPtr CreateMutex( <BR>IntPtr lpMutexAttributes, // SD <BR>int bInitialOwner, // initial owner <BR>string lpName // object name <BR>); <BR>} <BR>3. 简述 private、 protected、 public、 internal 修饰符的访问权限。 <BR>private : 私有成员, 在类的内部才可以访问。protected : 保护成员，该类内部和继承类中可以访问。public : 公共成员，完全公开，没有访问限制。internal: 在同一命名空间内可以访问。 <BR>4. 写出一条Sql语句： 取出表A中第31到第40记录（SQLServer, 以自动增长的ID作为主键, 注意：ID可能不是连续的。） <BR>select top 10 * from A where id not in (select top 30 id from A) <BR>解2: select top 10 * from A where id &gt; (select max(id) from (select top 30 id from A )as A) <BR>5 .列举ASP.NET 页面之间传递值的几种方式。 <BR>1. 使用QueryString, 如....?id=1; response. Redirect().... <BR>2.使用Session变量 <BR>3.使用Server.Transfer <BR>2。请说明在.net中常用的几种页面间传递参数的方法，并说出他们的优缺点。 <BR>session(viewstate) 简单，但易丢失 <BR>application 全局 <BR>cookie 简单，但可能不支持，可能被伪造 <BR>input ttype="hidden" 简单，可能被伪造 <BR>url参数简单，显示于地址栏，长度有限 <BR>数据库稳定，安全，但性能相对弱 <BR>2．override与重载的区别 <BR>Override用来重写父类的方法，重载使用相同名的方法或操作符拥有不同类型的参数 <BR>3、.net的错误处理机制是什么 <BR>.net错误处理机制采用try-&gt;catch-&gt;finally结构，发生错误时，层层上抛，直到找到匹配的Catch为止。 <BR>4、C＃中接口和类的异同 <BR>接口和类都是类，不同的事，接口只包含方法或属性的声明，不包含具体实现方法的代码，接口可以实现多继承，而类只能是单继承，继承接口的类必须实现接口中声明的方法或属性。接口主要定义一种规范，统一调用方法，在大型项目中接口正发挥日益重要的作用。 <BR>4、DataReader和DataSet的异同 <BR>DataReader和DataSet最大的区别在于,DataReader使用时始终占用SqlConnection,在线操作数据库..任何对SqlConnection的操作都会引发DataReader的异常..因为DataReader每次只在内存中加载一条数据,所以占用的内存是很小的..因为DataReader的特殊性和高性能.所以DataReader是只进的..你读了第一条后就不能再去读取第一条了.. <BR>DataSet则是将数据一次性加载在内存中.抛弃数据库连接..读取完毕即放弃数据库连接..因为DataSet将数据全部加载在内存中.所以比较消耗内存...但是确比DataReader要灵活..可以动态的添加行,列,数据.对数据库进行回传更新操作... <BR>1. 在c#中using和new这两个关键字有什么意义，请写出你所知道的意义？ <BR>Using 引入一个名子空间，或在使用了一个对像后自动调用其IDespose，New 实例化一个对像，或修饰一个方法，表此方法完全重写此方法 <BR>2.在下面的例子里 <BR>using System; <BR>class A <BR>{ <BR>public A(){ <BR>PrintFields(); <BR>} <BR>public virtual void PrintFields(){} <BR>} <BR>class B:A <BR>{ <BR>int x=1; <BR>int y; <BR>public B(){ <BR>y=-1; <BR>} <BR>public override void PrintFields(){ <BR>Console.WriteLine("x={0},y={1}",x,y); <BR>} <BR>当使用new B()创建B的实例时，产生什么输出？X=1,Y=0 <BR>3.下面的例子中 <BR>using System; <BR>class A <BR>{ <BR>public static int X; <BR>static A(){ <BR>X=B.Y+1; <BR>} <BR>} <BR>class B <BR>{ <BR>public static int Y=A.X+1; <BR>static B(){} <BR>static void Main(){ <BR>Console.WriteLine("X={0},Y={1}",A.X,B.Y); <BR>} <BR>} <BR>产生的输出结果是什么？x=1,y=2 <BR>4.谈谈类和结构的区别？ <BR>最大区别一个是引用类型，一个是值类型 默认成员访问为public是另外一个区别 <BR>1. 在.net（C# or vb.net）中如何获得当前窗体或控件的句柄，特别是控件本身的句柄（请列举）。 <BR>this(C#) Me(vb.net). <BR>2在.net（C# or vb.net）中如何用户自定义消息，并在窗体中处理这些消息。 <BR>在form中重载DefWndProc函数来处理消息: <BR>protected override void DefWndProc ( ref System.WinForms.Message m ) <BR>{ <BR>switch(m.msg) <BR>{ <BR>case WM_Lbutton : <BR>　///string与MFC中的CString的Format函数的使用方法有所不同 <BR>　string message = string.Format("收到消息!参数为:{0},{1}",m.wParam,m.lParam); <BR>　MessageBox.Show(message);///显示一个消息框 <BR>　break; <BR>case USER: <BR>处理的代码 <BR>default: <BR>　base.DefWndProc(ref m);///调用基类函数处理非自定义消息。 <BR>　break; <BR>} <BR>} <BR>3. 在.net（C# or vb.net）如何启动另一个程序。process <BR>4. 在.net（C# or vb.net）中如何取消一个窗体的关闭 <BR>private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) <BR>{ <BR>e.Cancel=true; <BR>} <BR>5. 在.net（C# or vb.net）中，Appplication.Exit 还是 Form.Close有什么不同？ <BR>答案:一个是退出整个应用程序，一个是关闭其中一个form <BR>6. 在C#中有一个double型的变量，比如10321.5，比如122235401.21644，作为货币的值如何按各个不同国家的习惯来输出。比如美国用$10,321.50和$122，235，401.22而在英国则为￡10 321.50和￡122 235 401.22 <BR>答案: <BR>System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-US"); <BR>//System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-GB");为英国货币类型 <BR>decimal y = 9999999999999999999999999999m; <BR>string str = String.Format(MyCulture,"My amount = {0:c}",y); <BR>7. 某一密码仅使用K、L、M、N、O共5个字母，密码中的单词从左向右排列，密码单词必须遵循如下规则： <BR>（1） 密码单词的最小长度是两个字母，可以相同，也可以不同 <BR>（2） K不可能是单词的第一个字母 <BR>（3） 如果L出现，则出现次数不止一次 <BR>（4） M不能使最后一个也不能是倒数第二个字母 <BR>（5） K出现，则N就一定出现 <BR>（6） O如果是最后一个字母，则L一定出现 <BR>问题一：下列哪一个字母可以放在LO中的O后面，形成一个3个字母的密码单词？ <BR>A) K B)L C) M D) N <BR>答案:B <BR>问题二：如果能得到的字母是K、L、M，那么能够形成的两个字母长的密码单词的总数是多少？ <BR>A)1个 B)3个 C)6个 D）9个 <BR>答案:A <BR>问题三：下列哪一个是单词密码？ <BR>A) KLLN B) LOML C) MLLO D)NMKO <BR>答案:C <BR>8. 62-63=1 等式不成立，请移动一个数字（不可以移动减号和等于号），使得等式成立，如何移动？ <BR>答案:62移动成2的6次方 <BR>new有几种用法 <BR>第一种:new Class(); <BR>第二种:覆盖方法 <BR>public new XXXX(){} <BR>第三种:new 约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。 <BR>2.如何把一个array复制到arrayList里 <BR>foreach( object o in array )arrayList.Add(o); <BR>3.datagrid.datasouse可以连接什么数据源 [dataset,datatable,dataview] <BR>dataset,datatable,dataview , IList <BR>4.概述反射和序列化 <BR>反射:程序集包含模块，而模块包含类型，类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例，将类型绑定到现有对象，或从现有对象中获取类型。然后，可以调用类型的方法或访问其字段和属性 <BR>序列化:序列化是将对象转换为容易传输的格式的过程。例如，可以序列化一个对象，然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象。在另一端，反序列化将从该流重新构造对象。 <BR>5.概述o/r mapping 的原理 <BR>利用反射，配置 将类于数据库表映射 <BR>7.用sealed修饰的类有什么特点 <BR>sealed 修饰符用于防止从所修饰的类派生出其它类。如果一个密封类被指定为其它类的基类，则会发生编译时错误。 <BR>密封类不能同时为抽象类。 <BR>sealed 修饰符主要用于防止非有意的派生，但是它还能促使某些运行时优化。具体说来，由于密封类永远不会有任何派生类，所以对密封类的实例的虚拟函数成员的调用可以转换为非虚拟调用来处理。 <BR>11.详述.NET里class和struct的异同！ <BR>class:放在 ? struct放在？ <BR>struct值传递 <BR>类与结构有很多相似之处：结构可以实现接口，并且可以具有与类相同的成员类型。然而，结构在几个重要方面不同于类：结构为值类型而不是引用类型，并且结构不支持继承。结构的值存储在“在堆栈上”或“内联”。细心的程序员有时可以通过聪明地使用结构来增强性能。 <BR>12.概述.NET里对 remoting 和 webservice 两项技术的理解和实际中的应用。 <BR>远程逻辑调用，remoing接口只能用在.net中 <BR>13.什么是code-behind技术 aspx and cs <BR>14.概述三层结构体系 web/business/dataaccess <BR>15.asp.net如何实现MVC模式，举例说明！ web/business/dataaccess <BR>2.什么是ASP.net中的用户控件 <BR>答:用户控件就是.ascx扩展名的东西喽,可以拖到不同的页面中调用,以节省代码.比如登陆可能在多个页面上有,就可以做成用户控件,但是有一个问题就是用户控件拖到不同级别的目录下后里面的图片等的相对路径会变得不准确,需要自已写方法调整. <BR>3.什么叫应用程序域？什么是受管制的代码？什么是强类型系统？什么是装箱和拆箱？什么是重载？CTS、CLS和CLR分别作何解释？ <BR>答:装箱就是把值类型转成引用类型,从MS IL角度看好像是boxing,没记错的话是把值从堆栈转到堆中.拆箱相反,重载就是指一个方法名同,参数个数不同,返回值可以相同的方法.CLR是通用语言运行时,其它的不清楚. <BR>4.列举一下你所了解的XML技术及其应用 <BR>答:XML可是好东西,保存配置,站与站之间的交流,WEB SERVICE都要用它. <BR>5.值类型和引用类型的区别？写出C#的样例代码。 <BR>答:结构是值类型,类是引用类型,所以传结构就是值类型的应用啦,传对象或类就是引用类型的,这个不用多写了吧. <BR>6.ADO.net中常用的对象有哪些？分别描述一下。 <BR>答:connection command sqladapter dataset datatable dataview等等.写不完了. <BR>7.如何理解委托？ <BR>答:据说相当于函数指针,定义了委托就可以在不调用原方法名称的情况下调用那个方法. <BR>msdn2005中是这样解释的: <BR>委托具有以下特点： <BR>委托类似于 C++ 函数指针，但它是类型安全的。 <BR>委托允许将方法作为参数进行传递。 <BR>委托可用于定义回调方法。 <BR>委托可以链接在一起；例如，可以对一个事件调用多个方法。 <BR>方法不需要与委托签名精确匹配。有关更多信息，请参见协变和逆变。 <BR>C# 2.0 版引入了匿名方法的概念，此类方法允许将代码块作为参数传递，以代替单独定义的方法。 <BR>8.C#中的接口和类有什么异同。 <BR>答:接口是负责功能的定义，项目中通过接口来规范类，操作类以及抽象类的概念！ <BR>而类是负责功能的具体实现！ <BR>在类中也有抽象类的定义，抽象类与接口的区别在于： <BR>抽象类是一个不完全的类，类里面有抽象的方法，属性，也可以有具体的方法和属性，需要进一步的专业化。 <BR>但接口是一个行为的规范，里面的所有东西都是抽象的！ <BR>一个类只可以继承一个基类也就是父类，但可以实现多个接口 <BR>9.。net中读写数据库需要用到哪些类？他们的作用 <BR>答:这个类自已可以写的啊,你是指基类吗?那configuration,sqlconnection,sqlcommand等都要用到. <BR>10.UDP连接和TCP连接的异同。 <BR>答:前者只管传,不管数据到不到,无须建立连接.后者保证传输的数据准确,须要连结. <BR>11.ASP.net的身份验证方式有哪些？分别是什么原理？ <BR>答:form认证,windows集成认证等,原理不清楚. <BR>13.什么是code-Behind技术。 <BR>答:代码分离,这是个明智的东西,像ASP这样混成一堆很不爽.或者可以理解成HTML代码写在前台,C#代码写在后台.当然前台也有脚本,类的调用等,其实写在一起也是可以的. <BR>15..net中读写XML的类都归属于哪些命名空间？ <BR>答:System.Xml <BR>16.解释一下UDDI、WSDL的意义及其作用。 <BR>答: <BR>17.什么是SOAP,有哪些应用。 <BR>答:SOAP（Simple Object Access Protocol ）简单对象访问协议是在分散或分布式的环境中交换信息并执行远程过程调用的协议，是一个基于XML的协议。使用SOAP，不用考虑任何特定的传输协议（最常用的还是HTTP协议），可以允许任何类型的对象或代码，在任何平台上，以任何一直语言相互通信。这种相互通信采用的是XML格式的消息,具体请看:http://playist.blogchina.com/2521621.html <BR>20.常用的调用webservice方法有哪些？ <BR>答: <BR>可以从浏览器、ASP页或其他WEB服务调用可以使用HTTP-GET HTTP-POST访问WEB服务也可以从ASP页或其他WEB服务向其他WEB服务发出SOAP请求HTTP-GET HTTP-POST SOAP 使用WEB服务代理 <BR>6． 私有程序集与共享程序集有什么区别？ <BR>一个私有程序集通常为单个应用程序所使用，并且存储于这个应用程序所在的目录之中，或此目录下面的一个子目录中。共享程序集通常存储在全局程序集缓存（Global Assembly Cache）之中，这是一个由.NET运行时所维护的程序集仓库。共享程序集通常是对许多应用程序都有用的代码库，比如.NET Framework类。 <BR>7． 请解释进程与线程的区别？进程与程序的区别? <BR>一般，一个应用程序对应于一个或多个进程，可以把进程看作是该应用程序在*作系统中的标识；而一个进程通常由多个线程组成，而线程是*作系统为该应用程序分配处理时间的最小单元。 <BR>8． CLR与IL分别是什么含义？ <BR>CLR:公共语言运行时，类似于Java中的JVM，Java虚拟机；在.Net环境下，各种编程语言使用一种共同的基础资源环境，这就是CLR，CLR将直接与*作系统进行通信，而编程语言如C#.NET将尽量避免直接与*作系统直接通信，加强了程序代码的执行安全性，可以这样看：CLR就是具体的编程语言如：C#.NET与*作系统之间的翻译，同时它为具体的编程语言提供了许多资源： <BR>IL，中间语言，也称MSIL，微软中间语言，或CIL，通用中间语言；所有.NET源代码（不管用哪种语言编写）在进行编译时都被编译成IL。在应用程序运行时被即时（Just-In-Time，JIT）编译器处理成为机器码，被解释及执行。 <BR>10 .请解释ASP。NET中以什么方式进行数据验证 <BR>Aps.net 中有非空验证，比较验证，取值范围验证，正则表达式验证及客户自定义验证五大控件，另还有一个集中验证信息处理控件 <BR>11． WEB控件可以激发服务端事件，请谈谈服务端事件是怎么发生并解释其原理？自动传回是什么？为什么要使用自动传回。 <BR>在web控件发生事件时，客户端采用提交的形式将数据交回服务端，服务端先调用Page_Load事件,然后根据传回的状态信息自动调用服务端事件自动传回是当我们在点击客户端控件时，采用提交表单的形式将数据直接传回到务端 <BR>只有通过自动传回才能实现服务端事件的机制，如果没有自动回传机制就只能调用客户端事件，而不能调用服务端事件 <BR>12． WEB控件及HTML服务端控件能否调用客户端方法？如果能，请解释如何调用？ <BR>可以调用 <BR>例如:<?xml:namespace prefix = asp /><asp:TextBox id=TextBox1 onclick=clientfunction(); runat="server"> <BR></asp:TextBox><BR><INPUT id=Button2 value=Button name=Button2 <br>runat="server" onclick="clientfunction();"&gt; <BR>13． 请解释web.config文件中的重要节点 <BR>appSettings包含自定义应用程序设置。 <BR>system.web 系统配置 <BR>compilation动态调试编译设置 <BR>customErrors自定义错误信息设置 <BR>authentication身份验证,此节设置应用程序的身份验证策略。 <BR>authorization授权, 此节设置应用程序的授权策略. <BR>14． 请解释ASP。NET中的web页面与其隐藏类之间的关系？ <BR>一个ASP.NET页面一般都对应一个隐藏类,一般都在ASP.NET页面的声明中指定了隐藏类例如一个页面Tst1.aspx的页面声明如下 <BR><%&#64; Page language="c#" Codebehind="Tst1.aspx.cs" AutoEventWireup="false" Inherits="T1.Tst1" %><BR>Codebehind="Tst1.aspx.cs" 表明经编译此页面时使用哪一个代码文件 <BR>Inherits="T1.Tst1" 表用运行时使用哪一个隐藏类 <BR>15． 什么是viewstate，能否禁用？是否所用控件都可以禁用? <BR>Viewstate是保存状态的一种机制，EnableViewState属性设置为false即可禁用 <BR>16． 当发现不能读取页面上的输入的数据时很有可能是什么原因造成的？怎么解决 <BR>很有可能是在Page_Load中数据处理时没有进行Page的IsPostBack属性判断 <BR>17． 请解释什么是上下文对象，在什么情况下要使用上下文对象 <BR>上下文对象是指HttpContext类的Current 属性，当我们在一个普通类中要访问内置对象(Response,Request,Session,Server,Appliction等)时就要以使用此对象 <BR>18． 请解释转发与跳转的区别？ <BR>转发就是服务端的跳转A页面提交数据到B页面,B页面进行处理然后从服务端跳转到其它页面 <BR>跳转就是指客户端的跳转 <BR>1.请简述一下用Socket进行同步通讯编程的详细步骤 <BR>1、在应用程序和远程设备中使用协议和网络地址初始化套接字 <BR>2、在应用程序中通过指定端口和地址建立监听 <BR>3、远程设备发出连接请求 <BR>4、应用程序接受连接产生通信scoket <BR>5、应用程序和远程设备开始通讯（在通讯中应用程序将挂起直到通讯结束） <BR>6、通讯结束，关闭应用程序和远程设备的Socket回收资源 <BR>1、在C＃中，string str = null 与 string str = “” 请尽量使用文字或图象说明其中的区别。 <BR>string str = null 是不给他分配内存空间,而string str = “”给它分配长度为空字符窜的内存空间. <BR>２、请详述在dotnet中类(class)与结构(struct)的异同：(10分) <BR>Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的. <BR>3、根据委托(delegate)的知识，请完成以下用户控件中代码片段的填写：(10) <BR>namespace test <BR>{ <BR>public delegate void OnDBOperate(); <BR>public class UserControlBase : System.Windows.Forms.UserControl <BR>{ <BR>public event OnDBOperate OnNew; <BR>privatevoidtoolBar_ButtonClick(objectsender,System.Windows.Forms.ToolBarButtonClickEventArgs e) <BR>{ <BR>if(e.Button.Equals(BtnNew)) <BR>{ <BR>//请在以下补齐代码用来调用OnDBOperate委托签名的OnNew事件。 <BR>} <BR>} <BR>} <BR>} <BR>____________________________________________________________________ <BR>if( OnNew != null ) <BR>OnNew( this, e ); <BR>4、分析以下代码，完成填空(10分) <BR>string strTmp = "abcdefg某某某"; <BR>int i= System.Text.Encoding.Default.GetBytes(strTmp).Length; <BR>int j= strTmp.Length; <BR>以上代码执行完后，i= j= i还真的不知道, j=10 <BR>5、SQLSERVER服务器中，给定表 table1 中有两个字段 ID、LastUpdateDate，ID表示更新的事务号， LastUpdateDate表示更新时的服务器时间，请使用一句SQL语句获得最后更新的事务号。(10) <BR>select top ID from table1 order by LastUpdateData desc <BR>8、简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。(10) <BR>remoting是.net 中用来跨越machine, process, appdomain 进行方法调用的技术,对于三成结构的程序，就可以使用remoting技术来构建．它是分布应用的基础技术.相当于以前的DCOM Web Service是一种构建应用程序的普通模型，并能在所有支持internet网通讯的操作系统上实施。Web Service令基于组件的开发和web的结合达到最佳，基于组件的对象模型 <BR>9.什么叫做SQL注入，如何防止？请举例说明。 <BR>利用sql关键字对网站进行攻击。过滤关键字??等 <BR>所谓SQL注入（SQL Injection），就是利用程序员对用户输入数据的合法性检测不严或不检测的特点，故意从客户端提交特殊的代码，从而收集程序及服务器的信息，从而获取想得到的资料。 <BR>http://localhost/lawjia/show.asp?ID=444 and user&gt;0，这时，服务器运行Select * from 表名 where 字段=444 and user&gt;0这样的查询，当然，这个语句是运行不下去的，肯定出错，错误信息如下： <BR>　　·错误类型： <BR>Microsoft OLE DB Provider for ODBC Drivers (0x80040E07) <BR>[Microsoft][ODBC SQL Server Driver][SQL Server]将 nvarchar 值 ??sonybb?? 转换为数据类型为 int 的列时发生语法错误。 <BR>a 产生一个int数组，长度为100，并向其中随机插入1-100，并且不能重复。 <BR>int[] intArr=new int[100]; <BR>ArrayList myList=new ArrayList(); <BR>Random rnd=new Random(); <BR>while(myList.Count&lt;100) <BR>{ <BR>int num=rnd.Next(1,101); <BR>if(!myList.Contains(num)) <BR>myList.Add(num); <BR>} <BR>for(int i=0;i&lt;100;i++) <BR>intArr[i]=(int)myList[i]; <BR>20.请叙述类与结构的区别。 <BR>　　1)、结构是值类型； <BR>　　2)、结构不支持继承； <BR>　　3)、结构不能定义默认的构造函数； <BR>　　4)、结构不能定义析构函数； <BR>　　5)、结构不能使用初始值设置域值。<img src ="http://www.cnblogs.com/zhangzheny/aggbug/1080681.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42132/" target="_blank">[新闻]Google 10周岁生日</a>]]></description></item><item><title>Convert Datetime to String in Sql Server</title><link>http://www.cnblogs.com/zhangzheny/archive/2008/02/23/1078452.html</link><dc:creator>黑星</dc:creator><author>黑星</author><pubDate>Sat, 23 Feb 2008 01:34:00 GMT</pubDate><guid>http://www.cnblogs.com/zhangzheny/archive/2008/02/23/1078452.html</guid><wfw:comment>http://www.cnblogs.com/zhangzheny/comments/1078452.html</wfw:comment><comments>http://www.cnblogs.com/zhangzheny/archive/2008/02/23/1078452.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zhangzheny/comments/commentRss/1078452.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zhangzheny/services/trackbacks/1078452.html</trackback:ping><description><![CDATA[<A class=TitleLinkStyle href="http://qinyy.com/PermaLink,guid,66285fd6-b4b0-4821-8227-c212b07d5cdc.aspx"><STRONG>Convert Datetime to String in Sql Server</STRONG></A><BR>
<P>
<TABLE borderColor=#cccccc cellSpacing=0 cellPadding=5 border=1>
<TBODY>
<TR>
<TD>0 
<TD>Feb 22 2006 4:26PM 
<TD>CONVERT(CHAR(19), CURRENT_TIMESTAMP, 0)</TD>
<TR>
<TD>1 
<TD>02/22/06 
<TD>CONVERT(CHAR(8), CURRENT_TIMESTAMP, 1)</TD>
<TR>
<TD>2 
<TD>06.02.22 
<TD>CONVERT(CHAR(8), CURRENT_TIMESTAMP, 2)</TD>
<TR>
<TD>3 
<TD>22/02/06 
<TD>CONVERT(CHAR(8), CURRENT_TIMESTAMP, 3)</TD>
<TR>
<TD>4 
<TD>22.02.06 
<TD>CONVERT(CHAR(8), CURRENT_TIMESTAMP, 4)</TD>
<TR>
<TD>5 
<TD>22-02-06 
<TD>CONVERT(CHAR(8), CURRENT_TIMESTAMP, 5)</TD>
<TR>
<TD>6 
<TD>22 Feb 06 
<TD>CONVERT(CHAR(9), CURRENT_TIMESTAMP, 6)</TD>
<TR>
<TD>7 
<TD>Feb 22, 06 
<TD>CONVERT(CHAR(10), CURRENT_TIMESTAMP, 7)</TD>
<TR>
<TD>8 
<TD>16:26:08 
<TD>CONVERT(CHAR(8), CURRENT_TIMESTAMP, 8)</TD>
<TR>
<TD>9 
<TD>Feb 22 2006 4:26:08:020PM 
<TD>CONVERT(CHAR(26), CURRENT_TIMESTAMP, 9)</TD>
<TR>
<TD>10 
<TD>02-22-06 
<TD>CONVERT(CHAR(8), CURRENT_TIMESTAMP, 10)</TD>
<TR>
<TD>11 
<TD>06/02/22 
<TD>CONVERT(CHAR(8), CURRENT_TIMESTAMP, 11)</TD>
<TR>
<TD>12 
<TD>060222 
<TD>CONVERT(CHAR(6), CURRENT_TIMESTAMP, 12)</TD>
<TR>
<TD>13 
<TD>22 Feb 2006 16:26:08:020 
<TD>CONVERT(CHAR(24), CURRENT_TIMESTAMP, 13)</TD>
<TR>
<TD>14 
<TD>16:26:08:037 
<TD>CONVERT(CHAR(12), CURRENT_TIMESTAMP, 14)</TD>
<TR>
<TD>20 
<TD>2006-02-22 16:26:08 
<TD>CONVERT(CHAR(19), CURRENT_TIMESTAMP, 20)</TD>
<TR>
<TD>21 
<TD>2006-02-22 16:26:08.037 
<TD>CONVERT(CHAR(23), CURRENT_TIMESTAMP, 21)</TD>
<TR>
<TD>22 
<TD>02/22/06 4:26:08 PM 
<TD>CONVERT(CHAR(20), CURRENT_TIMESTAMP, 22)</TD>
<TR>
<TD>23 
<TD>2006-02-22 
<TD>CONVERT(CHAR(10), CURRENT_TIMESTAMP, 23)</TD>
<TR>
<TD>24 
<TD>16:26:08 
<TD>CONVERT(CHAR(8), CURRENT_TIMESTAMP, 24)</TD>
<TR>
<TD>25 
<TD>2006-02-22 16:26:08.037 
<TD>CONVERT(CHAR(23), CURRENT_TIMESTAMP, 25)</TD>
<TR>
<TD>100 
<TD>Feb 22 2006 4:26PM 
<TD>CONVERT(CHAR(19), CURRENT_TIMESTAMP, 100)</TD>
<TR>
<TD>101 
<TD>02/22/2006 
<TD>CONVERT(CHAR(10), CURRENT_TIMESTAMP, 101)</TD>
<TR>
<TD>102 
<TD>2006.02.22 
<TD>CONVERT(CHAR(10), CURRENT_TIMESTAMP, 102)</TD>
<TR>
<TD>103 
<TD>22/02/2006 
<TD>CONVERT(CHAR(10), CURRENT_TIMESTAMP, 103)</TD>
<TR>
<TD>104 
<TD>22.02.2006 
<TD>CONVERT(CHAR(10), CURRENT_TIMESTAMP, 104)</TD>
<TR>
<TD>105 
<TD>22-02-2006 
<TD>CONVERT(CHAR(10), CURRENT_TIMESTAMP, 105)</TD>
<TR>
<TD>106 
<TD>22 Feb 2006 
<TD>CONVERT(CHAR(11), CURRENT_TIMESTAMP, 106)</TD>
<TR>
<TD>107 
<TD>Feb 22, 2006 
<TD>CONVERT(CHAR(12), CURRENT_TIMESTAMP, 107)</TD>
<TR>
<TD>108 
<TD>16:26:08 
<TD>CONVERT(CHAR(8), CURRENT_TIMESTAMP, 108)</TD>
<TR>
<TD>109 
<TD>Feb 22 2006 4:26:08:067PM 
<TD>CONVERT(CHAR(26), CURRENT_TIMESTAMP, 109)</TD>
<TR>
<TD>110 
<TD>02-22-2006 
<TD>CONVERT(CHAR(10), CURRENT_TIMESTAMP, 110)</TD>
<TR>
<TD>111 
<TD>2006/02/22 
<TD>CONVERT(CHAR(10), CURRENT_TIMESTAMP, 111)</TD>
<TR>
<TD>112 
<TD>20060222 
<TD>CONVERT(CHAR(8), CURRENT_TIMESTAMP, 112)</TD>
<TR>
<TD>113 
<TD>22 Feb 2006 16:26:08:067 
<TD>CONVERT(CHAR(24), CURRENT_TIMESTAMP, 113)</TD>
<TR>
<TD>114 
<TD>16:26:08:067 
<TD>CONVERT(CHAR(12), CURRENT_TIMESTAMP, 114)</TD>
<TR>
<TD>120 
<TD>2006-02-22 16:26:08 
<TD>CONVERT(CHAR(19), CURRENT_TIMESTAMP, 120)</TD>
<TR>
<TD>121 
<TD>2006-02-22 16:26:08.080 
<TD>CONVERT(CHAR(23), CURRENT_TIMESTAMP, 121)</TD>
<TR>
<TD>126 
<TD>2006-02-22T16:26:08.080 
<TD>CONVERT(CHAR(23), CURRENT_TIMESTAMP, 126)</TD>
<TR>
<TD>127 
<TD>2006-02-22T16:26:08.080 
<TD>CONVERT(CHAR(23), CURRENT_TIMESTAMP, 127)</TD>
<TR>
<TD>130 
<TD>24 ???? 1427 4:26:08:080PM 
<TD>CONVERT(CHAR(32), CURRENT_TIMESTAMP, 130)</TD>
<TR>
<TD>131 
<TD>24/01/1427 4:26:08:080PM 
<TD>CONVERT(CHAR(25), CURRENT_TIMESTAMP, 131)</TD></TR></TBODY></TABLE></P><BR><img src ="http://www.cnblogs.com/zhangzheny/aggbug/1078452.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42131/" target="_blank">[新闻]祝Google 10周岁生日快乐</a>]]></description></item><item><title>SQL中CONVERT转化函数的用法▲</title><link>http://www.cnblogs.com/zhangzheny/archive/2008/02/22/1077805.html</link><dc:creator>黑星</dc:creator><author>黑星</author><pubDate>Fri, 22 Feb 2008 08:09:00 GMT</pubDate><guid>http://www.cnblogs.com/zhangzheny/archive/2008/02/22/1077805.html</guid><wfw:comment>http://www.cnblogs.com/zhangzheny/comments/1077805.html</wfw:comment><comments>http://www.cnblogs.com/zhangzheny/archive/2008/02/22/1077805.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/zhangzheny/comments/commentRss/1077805.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/zhangzheny/services/trackbacks/1077805.html</trackback:ping><description><![CDATA[<DIV class=date>&nbsp;</DIV>
<TABLE style="TABLE-LAYOUT: fixed">
<TBODY>
<TR>
<TD>
<DIV class=cnt>
<DIV class=tit><B style="COLOR: black; BACKGROUND-COLOR: #ffff66">SQL</B>中CONVERT<B style="COLOR: black; BACKGROUND-COLOR: #ff9999">转化</B>函数的用法▲</DIV>
<DIV class=date></DIV>
<TABLE class=FCK__ShowTableBorders style="TABLE-LAYOUT: fixed">
<TBODY>
<TR>
<TD>
<DIV class=cnt>
<DIV class=tit></DIV>
<TABLE class=FCK__ShowTableBorders style="TABLE-LAYOUT: fixed">
<TBODY>
<TR>
<TD>
<DIV class=cnt>
<P><FONT color=#003366><FONT size=3><FONT face="Times New Roman"><FONT color=#ff0000><STRONG>格式:</STRONG><BR></FONT><STRONG>CONVERT(data_type,expression[,style])</STRONG></FONT></FONT></FONT></P>
<P><FONT color=#003366><FONT size=3><FONT face="Times New Roman"><FONT color=#ff0000><STRONG>说明:</STRONG></FONT><BR><U><FONT color=#0000ff>此样式一般在时间类型(<A name=baidusnap4></A><B style="COLOR: black; BACKGROUND-COLOR: #ff66ff">datetime</B>,smalldatetime)与<A name=baidusnap1></A><B style="COLOR: black; BACKGROUND-COLOR: #a0ffff">字符串</B>类型</FONT></U></FONT></FONT></FONT><FONT face="Times New Roman" color=#0000ff size=3><U>(nchar,nvarchar,char,varchar)<BR>相互转换的时候才用到.</U></FONT></P>
<P><FONT color=#003366><FONT size=3><FONT face="Times New Roman"><STRONG><FONT color=#ff0000>例子:<BR></FONT>SELECT CONVERT(varchar(30),getdate(),101) now</STRONG><BR></FONT></FONT></FONT><FONT color=#003366><FONT size=3><FONT face="Times New Roman"><FONT color=#ff0000><STRONG>结果为:<BR></STRONG></FONT>now<BR>---------------------------------------<BR>|09/15/2001</FONT></FONT></FONT></P>
<P><FONT face="Times New Roman" color=#003366 size=3>===================================================================</FONT></P>
<P><FONT face="Times New Roman" color=#ff0000 size=3><STRONG>style数字在转换时间时的含义如下:</STRONG></FONT></P>
<P><FONT face="Times New Roman" color=#003366 size=3>------------------------------------------------------------------------------------------------------------<BR>Style(2位表示年份)&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; Style(4位表示年份)&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 输入输出格式&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>------------------------------------------------------------------------------------------------------------<BR>0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | 100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; mon dd yyyy hh:miAM(或PM)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>------------------------------------------------------------------------------------------------------------<BR>1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; 101&nbsp;&nbsp;&nbsp; 美国&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; mm/dd/yy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>------------------------------------------------------------------------------------------------------------<BR><FONT style="BACKGROUND-COLOR: #c0c0c0" color=#000080><STRONG>2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; 102&nbsp;&nbsp;&nbsp;&nbsp; ANSI&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; yy-mm-dd</STRONG></FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>------------------------------------------------------------------------------------------------------------<BR>3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; 103&nbsp;&nbsp;&nbsp;&nbsp; 英法&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; dd/mm/yy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>------------------------------------------------------------------------------------------------------------<BR>4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; 104&nbsp;&nbsp;&nbsp;&nbsp; 德国&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; dd.mm.yy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>------------------------------------------------------------------------------------------------------------<BR><FONT style="BACKGROUND-COLOR: #c0c0c0" color=#000080><STRONG>5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n