1.aspx文件的名,最好不要与已有的类的名重合,因为,每个aspx文件中,都会创建一个与文件名同名的类。如果重名了,会导致重载。

 

2.有时页面上没有得到预想的输出,可能是由于response.writelabel.text中的HTML语句中标签写的不对,可能是忘了写+=或者,标签没有正确闭合,把要输出的文字含在标签内了。

 

3.有些类是抽象类,无法实例化,只能使用它的静态方法,如File,Directory对象

 

4.在操作cookies时,一定要注意Cookie是否已经建立,也就是说建立cookie的页面一定要先运行,引用cookie的页面后运行。否则在运行时会出现“未将对象引用到实例的错误

 

5.有些名称空间,即使你不显式的imports它,也能使用它的中的对象,System.data,也能编译成功。但是在创建组件类时,一定要把使用了的名称空间显式的写出,否则用VBC.exe编译时,找不到相关类。

 

6.选中一个类名,按ALT+CTRL+J键,就会调出它在对象浏览器中的一个层次位置

 

7.Web.config的有效性,不是取决于它在项目组中的位置,而是取决于实际路径层次

 

8.执行存储过程的返回错误是:查询必须是一个可更新的查询!

              这是因为权限不同,因为调用程序不是以管理员身份访问数据库的,只要把数据库的everyone权限改为可写入既可

 

9.在把底版本的asp.net程序向高版本移值时,

       出现这样的错误:无法打开错误,可能少web组件,请得新安装组件。

       这可能是文件版本号不对,打开.sln.vbproj文件,修改版本号参数为高版本的版号。

       还可以修改.sln文件中的路径

posted @ 1:36 PM | Feedback (0)

我学习ASP.NET时的笔记(十二)

《ASP.NET从入门到精通》一年前 FrameV1.0

第十二章 配置和部署ASP.NET应用程序

1.Asp.Net应用程序的定义:

       Web应用程序服务器中某个虚拟目录下可运行或调用的全部文件、页面、事件处理程序、模块以及可执行代码。

2.GloBal.asax文件

       本质是一个XML文档,Asp.Net用它来控制应用程序在不同时间点的行为。

n         在应用程序启动时,会实例化一个HttpApplication对象。GloBal.asax文件就是用于控制该对象的。它通过不同的事件进行时间点行为的控制。在运行时,GloBal.axax文件被编译成一个从HttpApplication派生来的动态类型

n         它要位于项目的根目录下。

n         以任何方式修改Global.asax文件都将重新启动应用程序

3.Weg.Config文件配置Asp.Net应用程序

       Asp.Net采用层次式的配置系统,是根据WEB站点的虚拟目录路径结构使用应用程序配置信息。子目录可以继承或覆盖父目录的配置选项,这意味着子目录可以有自己的Web.Config文件。该文件修改后,系统将自动发现,并重新启动应用程序

       1Web.Config的结构(本质是一个XML文档)

l         配置段处理程序元素<configSections />

声明了Web.config中配置数据类型。通常由系统设置,用户不用自已处理,在文件中也看不到。

l         配置段设置元素

n         <system.net />

用于配置.Net运行阶段本身。通常由系统设置,用户不用自已处理,在文件中也看不到。

n         <system.web />

用户在此写用于控制应用程序的“关键字/值对”

l         <appSettings />

让用户定义自定义属性。

n         语法<add key=”” value=””>

n         使用:ConfigruationgSettings.Appsettings(key)

l         <location />

这不是默认存在的标签,这个标签的设置只针对特定文件或目录有效。path指定了这个路径,如果是目录,由于web.Config是层次式的,那么它的子目录和子文件也会采用这种设置。必须包括<system.web>子元素

 

       2<system.web />

l         <customErrors />

自定义错误的显示方式和自定义错误显示页面。如

              <customErrors mode="On" defaultRedirect="app\err.aspx" >

              <error statusCode="404" redirect="app\404err.aspx"></error></customErrors>

l         <page />

这个标签用于设置每个页面的通用编译信息

l         <sessionState        />

会话状态设置,关于属性的说明P470

       3) 所有有效设置参见P46618.2
       4)
Web.Config中使用自定义标签和返回非默认数据类型

a)         添加新项/.” 并编译到\bin目录

该类用处理Web.Config中的自定义标签。格式参照app\CustomWebConfig.aspx

b)        Web.Config的配置段处理程序元素<configSections />中添加新段组,声明新标签,及其返回的数据类型和引用的dll文件。格式参照app\Web.config

c)        Web.Config<system.web />中添加新标签。格式参照app\Web.config

d)        aspx文件中,用ConfigruationgSettings.Appsettings(标签层次)返回非默认数据类型的值。参照app\CustomWebConfig.aspx

4.Camel Casting

       Web.Config Global.asax文件中,元素和属性的书写是有规范的,区分大小写。在由多个单词组成的元素中,第一个单词的首字母是小写的,而其它单词的首字母。

 

 

P478 问与答

       P478 18814

              18815

18816

18817

5.页面输出的编码技术(encoding)

l         在页面编译指令中指定

<%@ Page ResponseEncoding=”UFT-8” %>

l         Weg.Config中指定

<system.web>

<globalization fifleEncoding=”utf-8” />

                     </system.web>

6.资源文件和应用程序的本地化

1)确定客户浏览器所用的语言

    strRequest.Language(Index)

2) CultureInfo对象

    设置和取得程序的语言文化信息。

    常用语言及其缩写P49519.1

    CultureInfo对象的属性P49619.2

    设置文化,注意文化名区分大小写:

l         < %@ page Culture=”de” %>

l         System.Threading.CurrentThread.CurrentCulture=objCulture

不能用CultureInfo.CurrentCulture属性进行设置,虽然它是System.Threading.CurrentThread.CurrentCulture=objCulture的缩写,因为这个属性是只读的

       3RegionInfo对象

设置和取得该地区诸如货币符号以及是否使用公制等信息,但它不使用语言来描述定制信息,而使用国家名缩写来描述

                     RegionInfo对象的属性。P49919.3

       4) 资源文件

资源文件用于存储应用程序数据,使之与应用程序本身分开。对于同一个资源文件,可以有多个版本,这样Asp.net页面便可以显示不同的信息,而无需修改代码。以本地化为例,可以有多个资源文件:每个文件对应一种文化。每个文件都包含相同的信息,但这些信息被翻译为不同的语言

在一个文本文件中输入关键词对,注意关键词在引用时区分大小写,然后用CLRresgen.exe把该文件打包成.resource文件。如,resgen data.en-us.txt

可以用vbc编译资源文件,或与其它文件一起编译。被编译后可以这样加载资源文件:

dim objRm as new ResourceManager(“前缀” & Request.userLanguage(0),System.Reflection.Assebmly.GetExecutingAssembly(),Nothing)

       5) RescourceManager对象装载资源文件。

要使Asp.net从不同的资源文件中检索资源,先把System.Threading.CurrentThread.CurrentCulture对象设置为新的文化对象,然后把System.Threading.CurrentThread.CurrentUICulture对象设置为新的文化对象

为了让文化信息在整个应用程序中一致,因此可以考虑在global.asax文件的Application_BeginRequest方法中设置文化,这样每当服务器收到新请求时,文化都将被自动、正确的设置

可以在Application_onStart事件中将其保存为一个应用程序级的变量,以免每收到一个请求时都重新创建它。

P507 19.7.1.70

7.调试程序

       1 web.config中打开调试。在发布程序时,要把调试关闭。

                  <compilation defaultLanguage="vb" debug="true" />

    2)try  - catch finally结构化异常处理语句

        一个结构中可以有多个catch语句,异常从底层到高层捕捉

        访问Asp.net环境之外的系统时(如访问数据库或文件)一定要使用try

       

    3)用Throw关键字抛出异常

l         抛出自定义异常

Throw new Exception(Im taking exception to that!)

l         抛出预定义异常

Throw new ExceptionType

    4) 注释

    5)Response.Write()

    6)跟踪

l         页面级跟踪

<%@ Page Trace=”true” TraceMode=”SortByTimeSortByCategory”>

l         应用程序级跟踪

Web.Config中配置

<system.web>

<trace enabled="false" requestLimit="10" pageOutput="true" traceMode="SortByTime" localOnly="true" />

       </system.web>

l         向跟踪写入信息

n         Trace.Warn方法

n         Trace.Write方法

当不需要显示跟踪时,不用注释这两个方法,只需要把跟踪关闭即可。

n         Trace.IsEnabled属性

可检查该属性来写一些只在跟踪打开时才能运行的代码段。

l         Trace.axd

当应用程序级跟踪打开时,可以用trace.axd查看跟踪信息。方法是浏览以下地址http://localhost/leilei/trace.axd

       7CLR调试器

要使用调试器要先在Web.Config中打开调试。这会产生一个以项目名命名的符号文件.pdb,放在\bin目录下。这个文件告诉调试器如何将必须解释的机器指令映射到源文件中的代码。这让您能通过查看源代码而不是晦涩的机器代码来跟踪程序的执行情况。

8.Asp.Net的安全性

       1Web安全处理机制

l         认证

l         授权

l         摸拟

2)实现安全性的途径

l         通过服务器的IIS

特点是编码量少、认证控制能力小

l         与数据源中的权限进行比较

这些数据源包括数据库、web.config、代码写明等等。

特点是编码量大、灵活性较大。

       3)认证

认证是通过认证提供程序(Authentication Provider--------包含对来自Web客户的请求进行认证的代码的模块实现的。这些提供程序是通过Web.config文件的<authertication>标签进行控制的。该标签的Mode属性指定了认证的途径。

l         Windows认证

通过IIS验证。

打开IIS,在要进行认证的目录上点右键选择属性。选择目录安全性选项卡。在匿名访问和验证控制组中按编辑钮。在出现的窗口中,勾掉匿名访问复选框。下面的三个复选框,由上到下分别对应

n         Basic认证,认证信息被明文发送给服务器

n         Digest认证

n         NTLMWindows集成认证)

浏览器自动把用户登录客户机时的密码和用户名发到服务器进行验证。

l         Forms认证

围绕客户机上的一个认证cookie。如果客户机没有这个cookie,那么用户会被重定向到web.config中指定的一个登录页面上。登录成功后,在客户机上创建一个认证cookie,以后的的请求都将自动被认证,直到用户关闭浏览器或会话结束。除非你把此cookie指定为永不过期。如

    <authentication mode="Forms" >

                   <forms name="name" loginUrl="app\formlogin.aspx">

                            <!-- 可以不在这里设置有效用户列表,而是在一个数据库中 -->

                            <credentials passwordFormat="Clear">

                                     <user name="Lin" password="XiaoLei"></user>

                                     <user name="Wang" password="Dan"></user>

                                     <user name="Huang" password="Ling"></user>

                            </credentials>

                   </forms>

         </authentication>

       这种认证方式是通过System.Web.Security.FormsUthentication对象进行的。该对象的

n         .Authenticate方法:进行认证。也可以不用此对象,而自定义其它方法

设置认证Cookie的三种方法

n         .SetAuthCookie只设置cookie

n         . GetRedirectUrl除了设置cookie,还把页面转向到客户原先请求的页面

n         GetAuthCookie允许你在cookie创建后,但在添加到response的cookie集合之前,执行其它对cookie的设置

n         .SignOut注销,删除认证cookie

l         Passport认证

4)授权

l         文件授权

操作系统根据用户的权限和服务器操作系统的访问控制列表(ACL)来控制用户对资源的访问

l         URL授权

通过Web.config文件的<authorization>标签进行控制的

n         Allow子标签指定允许访问的用户

n         Deny子标签指定拒绝访问的用户

n         两个子标签的verb属性指定访问文件的方式,值可是GETPOST

n         两个子标签的user属性指定允许的用户列表,?号表示所有匿名用户,*表示所有用户,默认是*

n         两个子标签的user属性指定允许的role角色列表

如果想只针对某个目录,可以把这个标签包在<location>标签。参照P548清单21.4

子目录中的web.config的设置可以覆盖上级目录中的设置

       5) 摸拟

Asp.Net根据用户的权限运行程序,就像用户是以一定账户亲自登录本机,而操作系统使用ACL来限制其对资源的访问。但即使启用模拟后,asp.net 仍以正常身份来访问配置信息。默认是不启用摸拟的。

如果不想花时间来编写代码,则使用模拟,只需采用Window认证和管理ACL;否则自已创建认证系统,不使用摸拟。

启用摸拟的方法

<!-- 如果要启用摸拟把impersonate属性设为true,如果指定了usernamepassword属性,那么,应用程序总只摸拟同一个用户 -->

         <identity impersonate="false"></identity>

P552问与答

         P552 21813`    

posted @ 1:35 PM | Feedback (0)

我学习ASP.NET时的笔记(十一)

《ASP.NET从入门到精通》一年前 FrameV1.0

第十一章 移动WEB

1.移动表单

       供手机、PDA等移动设置访问网络资源。

       Asp.Net内置了一组专供移动移动设置使用的Web服务器控件。这些控件可以在任何移动设备上提供丰富的显示功能,并能自动根据设备进行调整。由这些控件构件成页面可以在任何设备上访问和使用应用程序。对于大多数手机,生成的是WML(Wireless Modeling Language),无线建模语言。

       对于.Net Frame1.0系列,须安装Mobile Internet Tookit 工具包。对于.Net Frame1.1则内置了针对移动开发的类。

       与普通的Asp.Net程序不同。移动表单页面可以包含任意个服务器端表单Form,而普通的Asp.net页面只能有一个。这最大程度的降低了装载新页面的次数。单个页面可以回送自己,并根据条件显示不同的表单。

       移动表单支持数据绑定和分页

2.开发移动页面

       安装了Mobile Internet Tookit 工具包后,在工具箱中会多出一个移动Web服务器控件分组。在建立新项中会多出一些关于移动开发的对象。

3.针对不同的设备设计不同的输出

       Weg.config中添加<deviceFilters>标签(置于system.web标签中)。在它的子标签<filter 中有以下重要属性:

l         Compare

l         Name

l         Argument

然后在,asp.net页面中添加<DeviceSpecific>标签,在的它多个<Choice>标签中指定不同的输出,可以在choice 标签的value 属性直接指定要输出的内容或资源。也可使用模板提供更细致的页面输出。

4.检查移动设备支持的功能

P637  问与答 3

posted @ 1:34 PM | Feedback (0)

我学习ASP.NET时的笔记(十)

《ASP.NET从入门到精通》一年前 FrameV1.0

第十章 WEB服务

1.Web服务概述

       Web服务是一种新的部署应用程序的方式。使用XML和其它标准技术,Web服务使用得应用程序和组件能够和其他应用程序通信,而不管这些应用程序在什么位置------无论是在同一台计算机,还是位于地球的另一端。

       Asp.Net或其它本地应用程序与对象的交互方式在底层是请求/应答模式,而Web访问的模式在底层也是请求/应答模式(尽管在顶层是事件响应模式)。把应用程序与对象的交互扩展在WEB上,即实现应用程序与远程计算机上的对象(组件)的交互,就是实现Web服务的目的。

       Web服务在.Net框架中是以一种可编程对象实现的,提供了大量让远程应用程序通过Internet访问本地系统中的组件的方法。Web服务基于这样的事实:即任何系统或应用程序都可以使用HTTP,并可以使用和转换XMLHTTP是通信的协议,XML是传输数据的标准。

       总之:WEB服务提供了一种新的计算方式。开发人员可以把不同主机的WEB服务组装成应用程序。这样,完全不以的平台可以轻松的进行通信,将世界各地不同的系统连接在一起。

2.Web服务的编程模型

       1发现Discovery

供用户搜索WEB服务。这个过程可以禁用。

2服务描述Service Description:。

这是使用一种叫做服务描述语言的、基于XML标准提供的。它告诉用户可以远程使用哪些方法以及服务期望和返回的数据类型。

3命令通信

在用户和服务之间来回地发送XML格式的消息。发送给服务的消息中包括命令,而发送给客户的信息则包括数据

3.用于访问WEB服务的协议

l         Http-Get

n         请求的所有参数都是通过URL后面的查询字符串进行传递的。

n         这种访问WEB服务的方式是不基于XML消息的.

n         只能发送名称/值对。

n         基于请求/应答模型

l         Http-Post

n         请求的所有参数都是通过HTTP请求消息传递的。

n         这种访问WEB服务的方式是不基于XML消息的.

n         只能发送名称/值对。

n         基于请求/应答模型

l         SOAPSimple Object Access Protocol)协议

n         依赖XML传递消息。

n         不但能发送名称/值对,还能发送更为复杂的对象,如各处复杂的数据类型、类、对象及其它消息

n         不限于请求/应答模型,可以用于发送任何类型的信息,而不管客户是否进行了信息的请求

4.Web服务的优点

l         组件共享,代码重用

l         易于部署

l         易于维护

l         易于实现

5.创建WEB服务

       1)创建WEB服务文件

“添加新项/Web服务”将创建一个WEB服务文件。后缀名为asmx。这是一个可像aspx文件一样在浏览器中浏览的文件。

在浏览该文件时,页面有作为服务的对象的使用说明,其中有个“服务说明”链接。查看它的属性,它的URL最后四个字符为WSDL。这四个字符告诉ASP.Net您想查看XML格式的服务说明,这个服务说明是用服务描述语言(Service Description Language , SDL)的标准格式形成的。

l         asmx页本身就包含作为服务的类

a)         “添加新项/Web服务”

b)        修改类名前的<WebService()>标签的NameSpace属性。这里的NameSpace指的是做为服务提供的一个名称空间,与类所属的本地名称空间不同,可以在类名前加上名称空间语句。注意这个标签是修饰类的声明语句的。

c)        创建类和方法。要做为服务的方法前加<WebMethod()>标签。它的书写格式与<WebService()>相似,它可用的属性,参见P42516.1。这个标签由WebMethodAttribute类描述的。带此标签的方法把所用的调用者都看作是本地的。

d)        关闭文件,再用文本编辑器打开,修改编译命令<%@ WebService %>。它的Class属性指明了文件中哪些类可做为WEB服务。文件中可包含不做为WEB服务的类。

e)         在浏览器里浏览一遍

f)         asmx文件不需要用VBC编译

l         使用已有的业务对象(组件类)创建Web服务

a)         如果想保留原先源文件的话,就新建一个组件类,现有组件的源代码复制过去,然后把类名改成和文件名一样(不是必须这样做,建议这样做)

b)        导入名称空间:System.Web.Services

c)        在作为服务的类名前加<WebService()>标签

d)        把要做为服务的类名原先继承的组件基类去掉,改为继承WebService。这一步不是必须的。可有可无。有了这一步,组件文件将变成普通的.vb文件(图标变化)

e)         要暴露的方法前加<WebMethod()>标签

f)         最好将代码中不能通过XML进行传输的对象,都用可进行XML传输的类似对象替换

g)        关闭文件,再用文本编辑器打开,修改编译命令<%@ WebService %>,修改Class属性为组件类名(包括名称空间名)

h)        在浏览器里浏览一遍

i)          如果要编译改装后的组件类。Vbc命令中加上名称空间

       2)启用发现功能

l         通过.disco.vsdiso文件实现的。本质上是一种XML文件。

l         “添加新项/发现文件,有静态和动态两种。

l         发现文件不是必需的,如果用户知道正确的URL,便可访问服务描述。发现文件只是帮助匿名用户找到您想供公众使用的Web服务而已。

3)部署WEB服务

a) .asmx .disco .vfdisco文件和自定义的业务对象复制到合适的虚拟目录

              b) 创建一个安全文件web.Config

6.Web服务支持的数据类型

l         接受的数据类型

n         SOAPP42916.2中所有

n         HTTP-GETHTTP-POST:只有原语类型的子集及数组

l         返回的数据类型:P42916.2中所有

7.使用Web服务

1)发现

如果Web服务有.disco发现文件,那么Web服务客户就可以使用CLRdisco.exe,来搜索到该服务的服务描述。这一步不是必须的,如你知道服务描述的地址的话。

2)创建代理类并编译

l         服务代理是一个位于客户计算机上的类,它封装了与服务通信所需的所有复杂的功能,让客户能像与其它任何对象交互一样与服务进行交互。事实上,代理包含与服务提供的方法和属性对应的方法和属性,而且名称相同。

l         创建代理类用的是CLRwsdl.exe,语法:

服务类生成后,即asmx文件生成后,必须浏览一遍,以保证WSDL描述文档的存在。

wsdl /l:语言(vbC# /namespace:自定义的名称空间名型/protocol:所依据的协议默认是SOAP /out:输出 服务描述的URL

:wsdl /l:vb /namespace:DBServiceWSDL /out:DBServiceWSDL.vb Http://localhost/leilei/WebService/DoDBService.asmx?WSDL

这是产生了一个依据SOAP协议的代理类。

l         代理生成后,要用vbc工具进行编译wsdl产生的.vb文件

注意:当服务类是引用现有组件类时,当被引用的组件类的源代码更改后,须重新编译服务,同时代理也要重新生成和编译。

l         服务类中声明为public的类也会被代理,但是不会做为服务使用。这种类好像是被完全本地化。

       3)通过代理调用WEB服务

              引用该类

              如:dim a as new DBServiceWSDL.DBService

       注意:服务代理类的共用变量型属性,不会被纳入到服务描述中(这是我自已实践感受的)

8.Web服务有效性和安全性验证

可以通过SOAP报头传输基于system.web.services.protocols.SoapHeader类的属性对。可以在发送前进行加密,在服务中预先提供解密的方法。

 

 

P454 问与答 2

              作业17.8.1.6

参见webservice下所有文件

 

 

posted @ 1:32 PM | Feedback (0)

我学习ASP.NET时的笔记(九)

《ASP.NET从入门到精通》一年前 FrameV1.0

第九章 组件类(业务对象)

1.组件的概念

组件是可以在不同应用程序中重复使用的对象,是可重用的被封装的代码块的它们通常具备真实世界中对象的特征用户控件、自定义控件、WEB控件、Code-behind表单都可以看成是组件

2.业务对象Business Object

       1) 用于提供非UI功能的代码被称为业务逻辑Business Logic业务规则Business rule

       2) 实现了业务逻辑的组件被称为业务对象

       3)业务对象通常通过组件类实现

3.组件的优势

       1)三层结构:

l         UI或表示层

l         业务对象层

l         数据层

2)优点

更好的定义和分离程序

l         有利模块化

l         代码重用性提高

l         容易使用

l         维护容易

4.组合体仓库(Assembly Cache

       项目目录下\bin目录,用于存储编译后的dll文件。 Asp.Net应用程序启动时,自动装载其中所有dll文件中的所有对象

5.创建业务对象

       1)创建并编码组件类(添加新项/组件类).

可以重载它的New方法,不用加任何关键词。只要从组件设计器生成的代码”中复制new 方法,并改变参数列表即可。其它方法的重载,好像也不用加关键词

2) 可以不编译成dll文件,直接使用。但为了在其它程序中使用,可以用VBC.exe编译成Dll文件,并存在\bin目录下。

              编译的语法是:在组件类目录下

vbc /t:library /out:目标目录(\bin目录)\目标文件名.dll  /t:名称空间.dll 组件类源码.vb

可以多个组件类编译在一个dll文件中 只要在编译命令后并列写上源文件名即可,如果目录下全是组件类,则可以用*.vb代表源码即可。

              如果源码中使用了其它组件类,在指定名称空间时,也要加上它们的dll文件。如

/r:myComponent.dll

6.使用业务对象

       可以直接在组件类所在项目或项目组中使用,如果要在其它程序中使用,要把它复制到目标项目的\bin目录下。然后引用它。注意它的名称空间。

7.开发业务对象的一些原则

l         把数据连接字串放到Web.Config中,然后在组件类中用HttpContext.Getconfig方法引用。

l         把所有用到的SQL语句定义成存储过程

l         尽可能把逻辑与功能分开。

l         不要在一个对象中实现过多的功能,这样会增加使用的复杂性,可以分成向相互依赖的对象

8.使用非.Net组件(COM组件)

       1CLR不会自动管理并装载这些对象,因为它们没有元数据。是非托管代码

2)用Server.CreateObject(ProgID)创建并使用它们。但是.net开发环境,不能在编译时检查操纵它们的代码是否正确。

3整理Marshalling:在COM.Net间进行数据类型转换的操作

4tlbimp.exe(类型库导入器Type Library Importer .):

       CLR的该工具把现有的COM对象进行打包,生成必要的元数据,避免了整理的开销,并可以在设计时利用开发环境的便利性,对代码的安全性做检查。

       语法:tlbimp Com对象所在dll  /out:目标文件.dll

              然后按.Net方式引用目标文件即可。

              但是不能完全支持所有的COM对象

5.Net IDE自带的OLE/Com查看器工具(在工具菜单下)可以用来查看COM组件的ProgID

 

P413 问与答 1 3

P414 15.9.1.4

 

参见component文件下所有文件

 

posted @ 1:31 PM | Feedback (0)

我学习ASP.NET时的笔记(八)

《ASP.NET从入门到精通》一年前 FrameV1.0

 

第八章 Asp.Net的缓存功能

1.缓存技术

       缓存技术是计算机快速再次取得数据的方式。其原理是将经常被访问的数据(甚至那些不那么经常访问的数据)存储到计算机可以更快、更容易地读取的位置,如内存、硬盘。

被缓存的数据,可以在一定时限内或一定条件下被删除,也可不删除,永远存在。

可以从硬盘缓存到内存,也可以从网站服务器上缓存到客户的硬盘上,等等。缓存在内存上的信息,当内存不足时自动被删除

缓存最重要的目的是:

l         快速存取

l         存取通常情况下无法存取的数据

注意,不要与缓冲弄混。缓冲是使用缓冲区暂时存储执行过程中的产生的数据,执行结束缓冲区会被清空

2.Asp.Net的缓存机制

       1)服务器端缓存

l         页面缓存

在用户首次请求页面时,页面被编译,并缓存到服务器中。如果用户再次请求该页面时,请求指令没有变化,则从缓存中读取数据,不再编译;如果有变化,则重新编译页面,并作废原先缓存的信息而把新的编译后的页面进行缓存。监视请求指令是否变化的是由CLR完成的。

l         页面输出缓存

在指定计算机的硬盘上缓存所有由动态页生成的内容,如计算结果、甚至DataGrid。这种缓存不会自动进行。不占内存空间

l         配置缓存

在应用程序第一次启动时,将缓存配置文件(如Web.config)文件的设置。

l         数据缓存

可把任何类型的数据存储在高速缓存中。它类似于页面输出缓存,但可缓存的内容不仅仅是页面产生的数据

2)客户端缓存

3.Asp.Net实现缓存的方法

       1)启用页面输入缓存

              a) 语法

HTML视图下,加入以下编译指令

<%@ OutputCache  Duration=”时间以秒计  Location=”位置  VarybyParams VarybyHeaderVarybyCustom%>

              b) 参数说明

n         Location可选参数,指定缓存的使用的计算机位置,参见P358

n         VarybyParams可选参数 。仅当URL查询字串参数中VarybyParams指定的参数发生变化时,才缓存新的条目。如果省略VarybyParams,则默认为根据提供的URL查询字符串缓存页面。

n         VaryByHeader评估HTTP报头,以确定是否创建新的缓存

n         VaryByCustom自定义缓存创建评估机制

c) 可以只在用户控件启用只针对它的部分缓存

只需在用户控件的HTML源码中。加入上述页面输出缓存声明。但当用户控件被缓存后,对它的任何修改都是无效的。

       2)数据缓存

                     Page对象的Cache集合对象

              a) 把数据或对象插入缓存

n         Page.cache(“缓存段的名”)=数据或对象

n         Page.chche.Add(“缓存段的名Key” , ”数据或对象Value” , ” 缓存依赖类Denpendencies” , ”缓存作废时间AbsoluteExpiration”, ”缓存推迟作废时间SlideExpiration” , ”优先级Priority” , ”优先级衰退方式PriorityDecay” , ”对象被从缓存中删除时调用的方法OnRemoveCallBack”)

注意:时间缓存作废时间=缓存作废时间+缓存推迟作废时间

n         Page.chche.Insert()与add方法一样,只是有些参数成为可选参数

b) 得到缓存中的数据或对象

       相应对象变量=Page.cache(“缓存段名”)

              c) 从缓存中删除数据或对象

                     page.chche.remove(“缓存段名”)

              d) 枚举

n         CacheItemPriorities指定优先级P367

n         CacheItemPriorityDecay指定优先级衰退方式P368

e) 缓存依赖类CacheDependency

       依存关系使得缓存将其内容的有效性建立在其它对象(如文件、目录或缓存中其它对象)的基础之上,当基础变了,缓存内容随之刷新。

4.HttpCachePolicy

       该类用HTTP报头来控制页面输出缓存,包含了能控制缓存的高级方法。该类用Response. Cache对象进行访问。可以用它来代替OutputCache编译指令。可与OutputCache编译指令共同起作用,但是编译指令的优先级更高。

5.高效使用缓存的原则

       P37514.4

      

参见Caching文件夹下所有内容

P376问与答2          P376 1481

posted @ 1:30 PM | Feedback (0)

我学习ASP.NET时的笔记(七)

《ASP.NET从入门到精通》一年前 FrameV1.0

第七章 WEB服务器上的文件操作

1.传统的服务器端文件包含

1)原理与作用

在一个文件中引用另一个文件的内容,并把它们合并在一起。这样可实现代码重用或简化页面的编辑。可把常用客户端脚本封装在一个文件中,然后用服务端包含进行引用。如果只想封装UI,可用用户控件,可参见P331的比较表。

可在页面任何位置使用服务器端包含。做为被包含的文件,可封装任何内容,包括<html><body>等标记或Asp.net服务器控件

在默认情况下只有后缀名为.shtml.shtm.asp.asa.sax.aspx的文件才能使用服务端包含。可在IISInternet Services Manager中修改可使用服务器端包含的文件扩展名??

       2)语法

                     在引用页的HTML部分加入

l         <!--#include file=”文件名”--> file指定的是本地目录结构的路径,即实际路径。

l         <!--#include virtual=”文件名”--> virtual是通过虚拟目录指定文件

2.文件访问

       1)名称空间SYSTEM.IO

2

一种访问数据(包括文件)的方式。也可以理解为是实现了这种方式的、提供了访问文件及其它数据存储区域(如内存和网络计算机)的方法的对象。

       3)模型和基类

l         Stream类及其子类

用于以二进制形式访问文件,通常名字内含有stream

l         TextReader类和TextWriter类及它们的子类

用于以Unicode形式访问文件,通常名字内含有ReaderWriter

l         可实现二进制数据和Unicode数据的转换的类

StreamReader,StreamWriter

       4) 访问方式

l         异步(Asynchronous

Stream类可以实现这种方式。即在对文件执行某种操作的同进,还可以执行其它任务。

l         同步(Synchronous

必须当前任务完成后,才能继续执行下一个任务,这可能会降低性能。

3.实现文件访问的类

       1)抽象类FileDirectory

不能实例化。分别代表文件和目录对象。可用它们的一些静态方法进行一些文件和目录的操作。如创建或删除文件和目录、复制或移动文件

       2FileInfoDirectoryInfo

                     可用它们查看文件的信息

       3) StreamReaderStreamWriter

       4FileStream

       5) 文件对象小结P347

       6)枚举

l         FileAttributes枚举和DirectoryAttributes

代表了各种文件和目录的存储信息,如隐藏、归档、只读。与FileInfoDirectoryInfoAttributes属性相结合使用

l         FileMode枚举

声明打开文件的方式,见P34113.3。与文件的打开方法结合使用。

l         FileAccess枚举

声明了文件的使用权限。与文件的打开方法结合使用。

l         FileShare

指定如何处理两个程如何同时访问同一文件的方式。与文件的打开方法结合使用。

4.文件操作

       1)打开文件

l         File.Open

l         File.OpenRead

l         File.OpenText

l         File.OpenWrite

l         FileStream的构造方法

l         StreamWriter的构造方法

l         StreamReader的构造方法

       2)读文件

l         StreamReader.Read

l         StreamReader.ReadToEnd

l         streamReader.ReadLine

3) 写文件

l         StreamWriter.Write

l         StreamWrite.WriteLine

4)缓冲属性方法

l         StreamWriter.AutoFlush

l         StreamWriter.Flush

5)关闭文件

l         StreamReader.close

l         StreamWriter.close

l         FileStream.close

5.隔离存储区(尚待解决)

 

      

 

             

 

posted @ 1:29 PM | Feedback (0)

我学习ASP.NET时的笔记(六)

《ASP.NET从入门到精通》一年前 FrameV1.0

第六章  ASP.Net中使用XML

1. XML概述

l         可扩展的

l         基于纯文本的

l         使用标记来描述数据

l         可以穿越任何防火墙,可在任何地方使用

2. 成型的XML文档

l         XML数据描述标准

n         模式(Schema):一个XML文件,解释另一个XML文件中标签的含义

n         DTDDocument Type Definition

l         成型(well-formed)的XML文档:遵循某种模式(DTD),并能正确的表示其标记(即必须遵守3W联盟制定的标准)的XML文件。创建成型的XML文件目地是确保任何XML顺应程序都能够读取其中的数据。成型的XML文档必须遵循以下原则

n         必须至少包含一个元素

n         必须只包含一个开始和结束标记,开始和结束标记组成根元素,包含整个文档

n         其它所有标记必须包含在开始和结束标记之间,同时不能交叉

l         XMLValidatingReader对象验证XML文档是否成型

n         ValidationType属性:指定根据何种模型验证

n         添加验证处理事件

n         LineNumber,LinePosition属性指明XML文件中发生错误的位置

l         XML架构???????????????

3. 访问XML文件

1)  XMLTextReader对象:(轻量级)

              a) 只能读

              b) Read方法:自动遍历XML文件

              c) Item集合:访问某一元素或属性

              d) NoteType属性:标明信息类型

              e) close方法:释放资源

       2XMLTextWriter对象(轻量级)

              XML文件中写入信息

4.XML DOM规范

1) XML DOM(Document Object Model)XML 文档对象模型是W3C制定的一种规范,它详细规定了访问XML文件的应用程序的行为,包括:这些应用程序应创建的类、如何读写XML以及类必须具备的特性。使用DOMXML交互时,查看数据的方式与传统数据存储方式相同

2)在ASP.NET中实现DOM的类(重量级)

n         XMLNODE:表示XML文档树的一个结点,可以是一个元素,或者一个属性

从它派生出很多类,如:XMLElementXMLAttribute

n         XMLDocument:表示了XML文件,可以进个修改和浏览XML文件的作用

5.XMLDataSet

       1) DataSet内部,数据被表示为xml,这意味着在计算机内存中,DataSet是以xml格式(而不是一些抽象数据模型)存储的。

       2)查看XML数据的方式:

n         XML.Net类直接查看

n         ADO.Net间接查看

3) XMLDataDocument对象:

n         可以很好的表示关系型数据。

n         XMLDataDocument之于XML,就像DataSet之于ADO.NETXMLDataDocumentDataSet非常相似,可以很容易的相互转换,从某种意义上说:这两个对象是ADO.NETXML.NET之间的桥梁

n         另一方面,XMLDataDocumentXMLDocument也很相似,可以在使用XMLDocument的任何地方使用XMLDataDocument,实际上属性和参数也相同。

n         XML数据被装载到XMLDataDocument中时,.Net自动为您创建一个DataSet对象,可通过DataSet属性来访问它。XML模式文件用于创建Dataset中的字段和数据类型,如果未提供XML模式文件,则ASP.NET将自动推断其结构

6.XPath规范

       1XpathDocument类:

类似于XMLDocument类,但它并不创建节点树,而只是每次查看一个节点。当移到这些节点时,它创建对应的节点-------动态节点。创建该对象的目的是在于快速、便捷的访问XML文件及直接把数据发送给其它对象进行处理。

       2XMLNavigator

提供了大量在XML文件中进行游标式导航的方法。常与XpathDocument对象相结合使用,进行XML文件的遍历。常是先声明一个该类,然后用XpathDocumentCreateNavigator方法进行实例化。

       3Xpath规范

W3C制定的用于从XML文件中查询数据的一种语言规范。它是由关键字组成的字符串,其中的关键字表示XML文件夹的组成部分。用XMLNavigatorSelect方法进行查询。

       4XPathNodeItertor

              该类用于遍历Xpath查询结果。

7.XSLT转换

       1XSLT文件

一种有特殊作用的XML文件。类似于CSS样式表,用于描述如何格式化标准的XML文件。可在“添加新项”中创建

       2XSLTransforms类(XSL转换处理器)

该类依赖于Xpath查询来返回XML文件,再根据XSLT文件格式化XML文件,然后(与XMLReader对象结合)输出到屏幕或(与XMLTextWriter对象结合)其它类型的文件,如HTML文件、XML文件。

       3XML服务器控件

自动实现XSLT转换。只需指定DocumentSouce属性为XML文件名,TransformXSLT文件名。

P301  118.1.1.3

P327 12.6.1.3 ; 12.6.1.4 ; 12.6.1.5 ; 12.6.1.6 ; 12.6.1.7

 

参见 XML/ 文件夹下所有文件

 

posted @ 1:27 PM | Feedback (0)

我学习ASP.NET时的笔记(五)

《ASP.NET从入门到精通》一年前 FrameV1.0

第五章 Asp.Net中使用数据库

1. DataSet

       1)类似于RecordSet,但它可以凭空建立。

       2) 使用DataSet方式

              a) 使用数据源中的数据填充DataSet

              b) 凭空创建一个

       3DataSet的数据模型 P204

       4)凭空创建DataSet方法

              a) 先创建对象,设置好这个对象的属性后,把它加到DataSet

b) 直接在DataSet中创建一个对象,通过DataSet来设置这个对象的属性.

       5) 参见DataBase/BlankDataSet.aspx ; DataBase/FirstSQL2000.aspx

       6)属性和方法说明P245

2.数据绑定

1) 数据绑定归根到底是在HTML代码中实现了这样的一个语法:<%#  %>。它可以被赋给一个对象的text属性,或DataSource属性。DataSource属性要求被赋予一个类或数组。(这个语法在.vb中是无效的?)

2)数据绑定的方式有

       a) 通过页面级变量进行绑定

b) 把一控件绑定到另一控件,注意到要把做数据源的控件的AutoPostBack属性设为True

       c) 把数据源绑定到数据绑定控件

3)启动绑定的语法

       a) [page.]DataBind()

b) 控件名.DataBind()

4)何时绑定,可在page_load事件中绑定,要可以根据需要在事件处理过程中绑定

5) 在使用变量或数组做数据源时,要注意在Page_load事件中检查IspostBack属性。因为,当你使数据源发生变化时,会重新提交表单,并再次引发page_load事件,这可能会重新初始化数据源,使用户的操作无效,导致发生Attempted to dereference a null object的错误

6)好处:使开发人员缩短开发时间、易于使用以及标准化方法等。对用户没有明显的发处。

7)请参见 DataBase/FirstDataBind.aspx    

3.抽象数据绑定控件

       1)作为实际显示数据的控件的容器

       2Repeater服务器控件。

              a) 五种模板

i) ItemTemplateAlternatingItemTemplate:用于显示记录,可以只使用ItemTemplate,但不能只使用AlternatingItemTemplate,否则只会显示隔一条的记录,即只有一半的记录会显示出来。这两个模板的代码几乎一样,只要在AlternatingItemTemplate中更改颜色即可。

ii)  HeaderTemplateFooterTemplate模板:用来显示页眉页脚。其典型用法是使用<table></table>来开始或结果表格。

iii) SeparatorTemplate模板:在记录之间显示分隔标记。

              b) 使用方法

                     i) 从工具箱中拖一个Repeater控件到页目上,

                     ii) 在服务器端脚本中,为Repeater指定数据源

l         Repeater.DataSource=DataSet

Repeater.DataMember=DataSet中的某一表名

l         Repeater1.DataSource = myDataset.Tables("Users").DefaultView

                     iii) 转到HTML脚本视图中,在reapter标签内添加模板

iiii) 添加模板的顺序:HeaderTemplateItemTemplateAlternatingItemTemplateSeparatorTemplateFooterTemplate

iiiii) 绑定数据的语法<%#  Container.DataItem(字段名) %>

              c) 重要的事件

                     i) ItemCreated事件,在条目或模板被创建前引发

iiItemCommand事件,当Repeater控件内包含的服务器控件引发事件时,该事件会被引发。在每一个内含控件中都可以设置CommandName属性(包含一个字符串),该属性将被上传,这样处理程序就可以进行处理。由于内含控件是动态生成的。所以必须以某种方式获知各个控件的名称或通过集合来引用它们。

当然也可以直接响应这些内含控件的事件,但是事先你要知道它的名字。可以参阅Database/UseDataList.aspx中对这个事件的用法。

              d) 参见Database/UseRepeater.aspx

       3) DataList服务器控件

              a) Repeater控件非常相似。只是它具有交互性,允许用户修改数据。

              b) 除了Repeater那五个模板,还具有

                     i) SelectedItemTemplate:用于设置被选中的记录的样式

                     ii) EditItemTemplate:指定处于编辑模式的记录的样式。

c) 内置几个Command类型的事件,分别处理内含控件传来的不同命令。ItemCommand对应“select”CommnadName,其它的各自对应。

d) 参见:Database/UseDataList.aspx

       4) DataGrid服务器控件

a) AutoGenerateColumns=true的话,可以不指定<column>标签,系统会把所有的字段都显示成列 ; 如果而也指定<column>标签了的话,那么显示全部的字段和<column>指定的字段,即会出现重复的段。

b)<Columns />标签。如果自定义要显示的列,请使用它。它包括以下几个重要的列标签,而且可以在列标签里,像用RepeaterDataList那样使用模板标签:

l         绑定列BoundColumn

l         按钮列ButtonColumn

l         编辑命令列EditCommandColumn

l         超链接列HyperLinkColumn

l         模板列 TemplateColumn

c) 不但可以在设计时自定义列,还可以在运行时自定义列

d) 编辑EditCommandColumn列与EditCommand事件相结合。只有BoundColumns会变为可修改的字段。一定要确保您希望用户可以编辑的每个列要么是BoundColumn,要么包含用于编辑的文本框。

e) 排序

l         默认排序方式:AllowSorting=true , AutoGenerateColumn=true,这是标题列会变成LinkButton

l         自定义排序列:AllowSorting=true , AutoGenerateColumn=false ,如果是绑定列,设置SortExpression=”字段名” ; 如果是模板列,设置Command=”sort”在这两种情况中,网格都不排序行。而是通过引发SortCommand事件将排序请求通知给您。您然后在自己的代码中执行排序,方法通常是进行排序然后重新绑定到该数据源。

f) 分页:

l         自动分页

                            i) 设置AllowPaging=true,PageSize=每页显示的记录数。

                            ii) 设置PageStyle属性集

                            iii) PageIndexChanged事件中添加代码

l         手工分页

设置PageStyle-visible=false

              g) 参见:Database/UseDataGrid.aspx Database/ExampleDataGrid.aspx

4. ADO.Net

       1)重要改进

l         ADO是基于连接的,而ADO.Net是依赖于简短的、基于XML的消息与数据源交互。

l         ADO.NET使用离线数据集(DATASET),因此无需长时间连接并锁定数据库。

                                  

2)对象模型

l         DATASET

l         管理提供程序(managed providers)

Ø         SQL管理提供程序(用表格式数据流tabular data stream协议与SQL Server数据库通信,由CLR直接管理,效率高)

Ø         OLE DB管理提供程序

都包含以下组件:

ü         连接、管理数据源以及与DATASET进行交互的接口

ü         用于快速、高效地存取数据的数据流(类似于DATASET,但速度更快,功能更少)

ü         用于连接数据库及执行数据库专用的低层命令对象

3OLEDB系列对象

 

              a) OLEDBConnection

              b) OLEDBCommand用于执行SQL语句

l         ExcuteReader返回一个记录集OLEDBDataReader

l         ExcuteNonQuery语句执行后影响的行数

l         参见:Database/ OleDBCommand.aspx

c) OLEDBDataAdapter

l         主要的作用是:填充DataSet;执行SQL语句

l         Fill方法:填充DataSet

l         四个命令方法:

每个都是一个OleDbCommand

l         Update方法:调用四个命令方法,更新数据库

l         必须在DataSet中对相应的数据进行了更新或插入了新记录,四个命令方法才会有效。不能只执行SQL语句,而不对DataSet中的相应数据做改动。

l         更新数据的步骤:

i.           更新DataSet

ii.         SQL语句更新数据库

l         TableMapping集合

l         OleDbCommandBuilder对象:针对DataSet中的数据变化,自动生成供四个命令方法使用的SQL语句

l         参见:

Database/OleDBDataAdapter.aspx Database/TableMapping.aspx

d) OLEDBDataReader

l         是一个流式的DataSet,类似于一个使用单向游标的RecordSet每次只能将一条记录保存到内存中,该对象按要求依次从数据源取得数据。它是只读的,并且不能查看前面的记录

l         Read方法:自动转向下一个记录,直到最后一个记录,返回一个布尔值

l         Get类方法:取得记录中的数据

l         HasMoreRow方法???

l         不使用时一定要释放资源

4SQL系列对象

       a) SQLConnection  参见:Database/ FirstSQL2000.aspx

       b) SQLCommand          参见:Database/ SQLCommand.aspx

       c) SQLDataAdapter       参见:Database/ SqlDataAdapter.aspx

       d) SQLDataReader

       e) SQLCommandBuilder

5)并发机制P251

l         保守式Pessimistic

l         开放式Optimistic

6) P273 问与答   P273 10.8.1.6

7)参见:Database/ADO_NetExample.aspx

5.DataRow 对象

              1RowState属性:指出了当前记录的各种状态

              2DataRowVesion枚举集合:由DataTable维护的DataRow的各种版本。

              3AcceptChanges方法:执行后,记录的当前版本和源版本会一致

4RejectChanges方法:执行后,上次AcceptChanges方法执行以后的所有操作都无效,记录的当前版本和源版本会一致

5Delete方法:彻底初始化DataRow对象

6Remove方法:从DataTable对象中移除该记录,但该DataRow对象仍是存在的

7rowError属性:可以进行自定义错误设置

8)参见:Database/ DataRowState.aspx

6.DataTable对象

dataTable进行过滤或排序的方法

l         用它的Select方法   参见:Database/ DataTableSelect.aspx

l         为它创建一个DataView对象

7.在内嵌SQL语句中使用参数对象OleDBParameterSQLParameter

       1)声明一个带有@参数的Command系列对象或Adapter系列对象

       2)声明一个参数对象

3)用Command系列对象或Adapter系列对象的Add方法实例化该参数对象,并把它加到Command系列对象或Adapter系列对象的Paramters集合中

4)指明参数对象的方向Direction

l         Input

l         Output 输出参数,在OLEDBDataReader对象关闭前不会被返回

l         InputOutPut

如:Update tblusers Set @First=’a’ where @First=’b’

l         ReturnValue

如:Selcect Count(*) from tblusers.可用参数对象取得返回值

5)指定参数对象的值或引用参数对象的值(如果做传出参数的话)

6)参见:Database/ UsePara.aspx

8.使用存储过程

       1)存储过程的好处

l         经过编译,执行速度快

l         编译时会产生一个执行方案优化存储过程,这也加快执行速度

l         在前端程序和数据之间产生了一个抽象层,实现了模块化。

l         可重用

l         可读性强

l         节省时间

l         容易修改,不用修改前端界面(如果没修改参数的话)

2)如何在ASP.NET中使用

              a) 声明一个查询字串为存储过程名的Command系列对象或Adapter系列对象

              b) 指定它的CommandType属性为CommandType.StoredProcedure

              c) 如果存储过程有参数的话,可用参数对象(OledbParameterSQLParameter)

       d) Command系列对象的ExcuteReader方法,ExceteNoQuery方法执行;或用          Adapter系列对象的相关方法执行

       3)参见:database/ UseStoredProcedure.aspx

9.事务对象 OledbTransactionSQLTransaction

       1) 声明一个事务对象

       2)打开Connection,Connection.BeginTransaction方法实例化事务对象

       3) 把事务对象赋与Command对象或Adapter对象的Transaction属性

4) Command对象或Adapter对象执行完SQL语句后,用事务对象的Commit方法提交事务或用Rollback方法撤消事务

5) 参见:database/ UseTransation.aspx

 

 

posted @ 1:26 PM | Feedback (0)

我学习ASP.NET时的笔记(四)

《ASP.NET从入门到精通》一年前 FrameV1.0

第四章 WEB表单

1WEB表单的优越性

1)  能够控制用户界面的外观,从而实现维护视图状态;

2)  能够控制接收的数据类型;

3)  通过自动生成的客户端脚本响应用户事件;

2WEB表单的编程模型

1)  可视元素UI:即服务器控件

2)  UI逻辑:即控制UI的代码
包含服务器控件UI逻辑ASP.NET页面也就是WEB表单。

3. 服务器控件

1)种类:WEB服务器控件,HTML服务器控件,有效性验证控件,用户控件;

2)事件:

a) 主动事件:用户主动进行的明确操作引发的事件,只有主动事件才会在服务器上被处理。

      b) 被动事件:如mousemove事件,可以通过客户端脚本来处理。

3)向服务器发送事件的方式

      a) 发生时立即发送

      b) 积累一段时间后一起发送。

4下限支持down-level support

当把ASP.NET页面转换成HTML时,会根据客户浏览器的性能,适当降低HTML的输出级别。

       5) Web服务器控件与HTML服务器控件的比较

它们之间的关系类似JAVAAWTSwing之间的差别。只有在不需要编程的时候才用HTML服务器控件,用HTML服务器控件的目的是让程序员可以用编程的方式操纵HTML元素的属性。

HTML服务器控件不支持下限支持。

       6)某些服务器控件有AutoPostBack属性,该属性指定是否立即发送数据。

              属性EnableViewState指定是否启用维护视图状态。

       7) 服务器控件的运行机制

                     P135

4. ViewState状态包集合对象(state bag

              1)这是一个预定义的集合对象,可以直接使用。用法与Session对象相似。

              2)这是一种存储非用户输入的自定义信息的简便方法

3)与视图状态相似,在提交表单时,状态包中的数据也被发送到服务器。在处理完毕后,将它们发回给客户。

       4)保存WEB表单信息主要有:1)视图状态 2)状态包

5)状态包在用户离开页面时会被清空,只有在同一个表单被重复发送时,数据才会被保存。一旦加载新页面,状态包会被丢弃。

5. WEB表单的处理顺序

              P105      

6. 用户控件

       当您想把已有的功能组合在一起时,应使用用户控件。

1)理解:

Asp.Net 中的用户控件指的是封装好的一段界面和代码.可以用来实现做过改进的WEB控件,和PB中的Visual Custom Class类似。用户控件必须与 Web 窗体页位于同一项目中。

       2)创建方法

a) 任何已有的页面都可以被转换为用户控件,只需去掉所有的<html><body><form>标记,将@Page编译指令改为@Control,并把文件扩展名改为ascx即可。

b) VS.Net中“项目\添加WEB用户控件“。

       3)使用方法

a) 从解决方案资源管理器中把用户控件,拖到WEB窗体中。将会自动实现控件注册,和创建一个用户控件的实例。这个过程可以手工完成,注册命令的格式是如下

<%@ Register TagPrefix="myNameSpace" TagName="myUserControl" src="userControl1.ascx" %>
       TagPrefix指定的是用户控件的标签前缀,可任意命名
       TagName指定的是用户件的标签名,可任意命名
       Src指定的是用户控件的文件名
          b) 在WEB窗体的声明区中添加声明
          Protected myControl1 As MyWebUserControl

这样就可以编程的方法显式的访问用户控件的方法或属性(包括自定义属性)。

c) 如果没有b步骤,那么要设置用户控件的属性(包括自定义属性),可以采用以下方式,即在用户控件的创建标签中设定

                    <myNameSpace:myUserControl ID="mnuMain" runat="server" selected="Login" backColor="black" UserName="hehe"/>

       4) 为用户控件添加属性的方法

a) Public型变量, 最好中VS.net的代码页面声明,如果直接在HTML脚本的过程中声明,恐怕会无效。

b) 用属性过程(Public Property pName ()as Type,最好用这种方式,因为这种方式比上一种方式可完成更健壮的功能。

       5)请参见

                            /Web Form/TestUserControl.aspx /Web Form/ UseUserControl.ascx

                            /Web Form/TestUCtrl123.aspx /Web Form/UseUserCtrlP123.ascx

7. 自定义控件

       当现有的功能无法满足要求,或想封装代码,可以使用自定义控件。

       1)创建方法

a) 添加一个<WEB控件库>项目(推荐这样做)

b) 在现有项目中添加一个<WEB自定义控件>

       2)控件个性化设置

a) 更改图标,在WEB控件库中添加一个与控件文件(.vb)名相同的16×16 BMP文件

b) 标签前缀 TagPrefix

通用修改在WEB控件库的Assembly.vb文件中修改;

专用修改可以在页的注册命令中修改

       3)编译方法

a) IDE环境上,在WEB控件库项目名上点右键,选择“生成”或“重新生成“

b) VS.net命令行下,用vbc.exe编译,使用方法,可以参阅P130

       4)把自定义控件加到工具箱

工具箱上点右键,选择“自定义控件箱”,在出现的窗口中,选择“.Net框架组件”标签页,选择浏览,找到控件的dll文件,按确定

       5)使用方法

a) 从工具箱中把自定义控件,拖到WEB窗体中。将会自动实现控件注册,和创建一个用户控件的实例。这个过程可以手工完成,注册命令的格式是如下

<%@ Register TagPrefix="cc1" Namespace="CtmCtrlWrite.LoveStory" Assembly="CtmCtrlWrite" %>

       TagPrefix指定的是用户控件的标签前缀,可任意命名
          b) 在WEB窗体的声明区中添加声明(这个步骤一般可自动完成)
          Protected withevent myControl1 As MyWebUserControl

这样就可以编程的方法显式的访问自定义控件的方法或属性(包括自定义属性)。

c)要设置自定义控件的属性(包括自定义属性)及指定(自定义)事件处理过程,可以采用以下方式,即在自定义控件的创建标签中设定

                    <myNameSpace:myCtmControl ID="mnuMain" runat="server" selected="Login" backColor="black" UserName="hehe"/>

       6) 为自定义控件添加属性的方法

a) Public型变量

b) 用属性过程(Public Property pName ()as Type,最好用这种方式,因为这种方式比上一种方式可完成更健壮的功能。如果要维护视图状态,可以把这个属性值加入状态包ViewState

       7) 自定义事件

              参见项目CtmCtrlWriteLibCtmCtrlWrite.vbP137

       8)请参见

              项目CtmCtrlWriteLib

              项目UseCtmCtrlLib

              项目leilei/Web Form/WebCustomControl1.vb

                     /Web Form/TestCtmCtrlLib.aspx

                     /Web Form/TestCtmCtrlWrite.aspx

/Web Form/TestWebCustomControl1.aspx

8. 运行期间创建控件

              1)对于WEB控件和自定义控件

                     a) 先用New关键字声明一个控件类型的变量

                     b) 设置控件变量的属性,ID属性一定要设置

c)把控件变量加到事先在页面上添加好的Panel上或Page对象的controls集合中。对于WEB控件必须加到Panel上;而自定义控件如果具有类似WEB控件的性质,则也要加到panel上,如果没有,加在PanelPage上都可以。

d) 为运行期间创建的控件添加事件处理过程的方法

l         先用WithEvents关键字声明控件变量;再按标准控件事件处理程序的模式事先写好事件处理过程

l         先用AddHandler函数 ;再事先写好事件处理过程。参数要标准化。

2) 对于用户控件

       a) 注册用户控件

       b) 声明一个用户控件类型的变量,注意,这里不要用New关键字

       c) Page.LoadControl “用户控件源文件名”)实例化

       d) 设置用户控件变量的属性,ID属性一定要设置

       e) 把用户控件变量加到事先在页面上添加好的Panelcontrols集合中。

f) 一般用户控件不需要设置事件处理过程,因为它已包含其组成控件的事件处理过程。但是也可以用AddHandler方法给它指定事件句柄-

              3)请参见: /Web Form/LoadCtmControl.aspx ;

/Web Form/ LoadUserControl.aspx ;

/Web Form/LoadWebControl.aspx

 

P143问与答

 

9. 有效性验证控件Validation系列WEB控件

       1)不能验证所有的WEB服务器控件。

       2Validation控件同时在客户端和服务器端运行。有效性验证是控件在客户端自动完成         的。

       3)仅当浏览器支持DHTMLJavaScript时,才会进行客户端有效性验证。

4)每个Validation控件都有一个IsValid属性指示是否通过有效性验证,如果通过,属性值是True,否则为FalsePage.IsValid指示是否页面中所有的有效性控件都通过了验证。检测IsValid属性是一个服务器端检测。

5)在服务器和客户端发生的有效性验证过程P1547.3

6)重要的通用属性

       a) ControlToValidate 指定要被其验证的服务器控件

       b) ErrorMessage 如果没通过验证时要显示出来的信息

       c) Display当错误信息显示不下的时候时否调整页面以让错误信息完整显示。

7)专有重要属性

       a) CompareValidator 控件

              i) ControlToCompare 要与被其监视的控件做比较的控件。

              ii) ValueToCompare要与被其监视的控件做比较的常量值

              iii) Type 要按何种数据类型进行比较 P158

              iiii) Operator 对比的操作类型 P158

如果选择的Operator值为DataTypeCheck,可以不设置ControlToCompare属性。由于所有的输入都被看作是字符串,因此,这个Operator有时会达不到理想效果

              b) RegularExpressionValidator控件

                     i) ValidationExpression 指定用于验证输入的有效性的正则表达形式

                     ii) 正则表达式P163

              c) RangeValidator控件

              i) Type 要按何种数据类型进行比较 P158

              ii) MinimumValue

              iii) MaximumValue

8) 只有RequiredFieldValidator控件才认为空字段无效,其它所有的有效性控件都接受空字段,即它们的IsValid属性值会是True。所以这些控件要结合的使用。使用两个或更多的Validation控件监视同一个服务器控件时,只有当所有条件都满足时,输入才算有效。

9Validators集合包含对页面中所有的Validation控件的引用,可以声明一个IValidatorr的接口变量来遍历该集合来确定各个控件的有效性。

10) 在不删除Validation控件的情形下禁用有效性验证。

      a) 设置该ValidationEnabled=false

      b) <%@  Page %>页面编译指令中的添加ClientTarget=”downlevel”.(我用了,有效果,但是有效性验证仍是有效,为什么?)

11)用ValidationSummary服务器控件,来集中显示没通过有效性验证的错误信息

      a) 自动收集页面中所有Validation控件的ErrorMessage属性的值,由它的DisplayMode属性指定信息显示的样式。

b) 如果只想在ValidationSummary中显示错误信息,则把相应Validation控件的Display设成none即可。如果想让在ValidationSummaryValidation控件的位置显示的信息不同,则可以另设置Validation控件的隐藏属性text

      c) 如果想要弹出对话框式的摘要,可以把ValidationSummary控件的属性ShowMessageBox设为True,把属性ShowSummery设为False

12)错误信息的显示方式

      a) 嵌入式(in-line) :就是Validation控件在哪儿,就在哪儿显示

      b) 摘要式(Summary):用ValidationSummary显示

      c) 嵌入与摘要式:各自的信息可以不同

d) 定制:在ValidationErrorMessage属性或text属性中使用HTML标记,从而实现用图像来显示错误消息或提供到错误详细描述的链接。

       13CustomValidator控件的使用

              1)服务器端验证

OnServerValidate属性指定一个方法。在其中根据相应条件更改控件的IsValid值。

              2)客户端验证

                     ClientValidationFunction属性指定一个JavaScript函数,这个函数的格式??

              3)它可同时设置服务器端验证和客户端验证。

10. WEB表单中使用Css样式表

1)在WEB窗体的设计视图下,如果TargetSchema属性设置为IE4以上,那么就可以应用CSS样式表

2)点“格式/文档样式”菜单

3)在出现的文档样式窗口中,点链接按钮,选择中想要链接的样式表,当然要创建一个样式文件或添加一个现有的样式表文件到项目中

4)转到HTML视图看Link语句的位置,如果样式无效的话,可以把此语句的位置做一下调整,最好让它在<html>标签前。

5)在属性窗口中或HTML脚本设置想应用样式的对象的class属性或CssClass属性为样式名。

6)可参见例子nav.ascx

7)在编辑.ascx文件时,可能发生“格式/文档样式”菜单为不可用的现象,可以这样做:先打开一个.aspx文件,调出文档窗口,然后再切换到.acx文件进行CSS的操作。或者直接在HTML脚本中添加链接CSS的语句

 

 

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

请参见:项目:LeiLei\Web Form\

              项目:Project

              项目:CtmCtrlWriteLib

              项目:UseCtmCtrlLib

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

 

posted @ 1:25 PM | Feedback (0)

我学习ASP.NET时的笔记(三)

《ASP.NET从入门到精通》一年前 FrameV1.0

第三章 常用Asp.Net内置对象

1.Response对象 (HttpResponse类的一个实例)

       它让服务器能与浏览器进行通信,对于向用户显示信息以及重定向用户很有用。

参见UseResponseBuffer.aspx UseResponseRedirect.aspx webcc.aspx          

2.Request对象 (HttpRequest类的一个实例)

       它让浏览器能与服务器进行通信,让您能获得关于客户的信息。

参见UseCollectionServerVariable.aspx UseCookie.aspx

       Request.QueryString()方法,用于获取Http查询字符串信息集合

3.Session对象(HttpSession类的一个实例)

       以变量的方式,存储了用户的当前会话的信息,

参见UseSession.aspx  ;  testSession.aspx

4.Application对象(HttpApplication类的一个实例)

       代表了Asp.Net程序并可以用于存放应用程序级的变量

参见testApplication.aspx UseApplication.aspx

5.Server对象(HttpServerUtility类的一个实例)

       提供了帮助开发人员处理用户请求的方法。

       参见UseServer.aspx ; UseServerOther.aspx ; UseServerString.aspx

6.Cookie对象(HttpCookie类的一个实例)

        通过ResponseRequest对象进行操作的。

参见UseCookie.aspx

7.Page对象

属性IsPostBack指出表单是否已经发送过,可以检查该属性,以决定是否需要重新填写服务控件             

P94 4.7 问与答

P95 4.8.1.1

       4.8.1.2

      

posted @ 1:23 PM | Feedback (0)

我学习ASP.NET时的笔记(二)

《ASP.NET从入门到精通》一年前 FrameV1.0

第二章 VB.Net

1.原语(primitive)数据类型

       1) 整数型

              a) Byte           1B          也叫System.Int

              b) Short         2B          也叫System.Int16

              c) Integer              4B          也叫System.Int32

              d) Long          8B          也叫System.Int64

       2) 浮点型

              a) Single         4B          也叫System.Single

              b) Double       8B          也叫System.Double

              c) Decimal      12B         也叫System.Decimal

       3) 字符型

              a) Char   一个Unicode字符        也叫System.Char

              b) String 一系列不可变的字符          也叫System.String

       4) 日期型

              DateDateTime以当天的日期和时间表示,也叫System.DateTime

       5) 布尔型

              Boolean ,也叫System.Boolean

       6) Object类型

2.数据类型转换

       1) 强制转换(casting)函数

      

Cbool

Cbyte

CChar

CDate

CDec

CDbl

CInt

CLng

CObj

CShort

CSng

CStr

CType

Asc(String型转换成Integer)

       2) To+目标类型)方法

3.数组

       1)索引从0开始

2)要么只指定长度,不指定初值;要么只指定初值,而不指定长度。如下写法是错误的Dim c(3) as Integer={1,2}

       3) Redim 函数

重定义数组长度。如果想保留原数组中的值,可在Redim后加Preserve关键词。被操纵的数组在声明时可以指定长度,也可以不指定长度

       4Erase函数

              把数组中每个元素的值都设置为Nothing

       5) Array

              正如Java,数组也被看成类,可用Array类的方法来操纵数组

4. 操作符及优先级

              参见P47

5.流程控制语句

       1) if 语句

       2select case语句

              Java , c不同的地方

              a) 可以在一个case分支中指定多值

              b) 只运行符合条件的分支,不运行符合条件的分支以下的分支

              c) 如果分值为字符型 ,则区分大小写

       3)循环语句

              a) While 条件

            code

                End While

              b) Do

                     code

                Loop [While 条件]

              c) Do

                     code

                Loop [Until 条件]

              d) Do While 条件

                     coe

                Loop

              d) For VAR=varBegin to varEnd [Step step-size]

                     code

                Next

              e) For each VAR in Array(or Collection)

                     code

                Next

              f) 退出循环

                     Exit Do

                     Exit For

                     Exit While

6.子程序和函数

       1)子程序

                     Sub name (para)

                            code

                     end sub

       2) 函数

              Function name (para) [as type]

                     [Code]

              End function

              函数可以没有返回值,返回值的方法有

              a) name=value

              b) Return Value

       3Optional关键字与可选参数

如果在参数列表中把Optional关键字放到参数名前,则该参数就成为一个可选参数,而且这个参数之后的参数也必须声明成为可选参数。如果没有为可选参数设默认值,而在函数或过程中却引用到这个参数,那么可能会发生错误。设默认值的方法是:                  Optional VAR as Type=Value

7.

       1) 创建

              Class Name

                     Public VAR (属性)

                     Sub subname Or Function funcname(方法)

              End Class

       2)使用

              New关键字

              a) Dim a as New Class

              b) Dim a as Class=New Class

3) 继承

       Class more_name : Inherits name

    End class

              如果要覆盖父类的方法,只要使用相同的名称提供一个不同的方法即可。

8.常用VB.NET函数

    参见P64

   

                    

posted @ 1:21 PM | Feedback (0)

我学习ASP.NET时的笔记(-)

<ASP.NET从入门到精通> 一年前 FrameV1.0

第一章 Asp.Net 初步

1. Web动态处理模型

采用C/S模型,具体来说

l         请求/应答模型   CGIASP , Jsp , Php

l         事件驱动模型    Asp.net  (在底层仍依赖于请求/应答模型)

2. 客户端脚本和服务器端脚本

3. Asp.net如何将客户机与服务器结合起来

       只有在请求期间,客户才能与服务器通信。每当客户端发生情况时,将执行客户端脚本,并将信息发给服务器。客户端脚本充当了中间者的作用。

4. .Net框架

       微软用于创建应用程序的一组对象和蓝图(blueprint

l         公共语言运行时(也译为:运行阶段通用语言)CLRCommon Language Runtime)。它类似于Java中的JVM,使得程序编译一次即可运行于不同计算机平台上。.Net程序会被编译成MSILMicrosoft Intermediate Language,微软中间语言),并同时产生一些元数据MetaData。然后由CLR中的JIT转换为本机语言,并进行内存类型安全检察。

l         元数据 MetaData 。是关于应用程序的描述性信息,指出程序能做什么,归属于哪里等等。类似于注册表的作用。CLR用元数据来装载和运行应用程序。

l         管理代码(也译为:托管代码)managed code。在CLR中运行的代码。
不可管理的代码(也译为:非托管代码)unmanaged code。不在CLR中运行的代码

l         .Net框架类和名称空间。名称空间类似于Java中的包

Asp.net.Net框架的一个有机组成部分,您所创建的每一个页面都对该框架的扩展。

5. 配置IIS和创建Asp.net WEB应用程序

              1) 创建新Web站点

在计算机名上或现有站点名上点右键,选择“新建\站点”,按出现的向导做。然后点击“文档”选项卡,在“启用默认文档”下边的文本框中,指定首页名

                     *改造现有站点

                            a) 在“默认WEB站点”或其它现有站点上点右键,选择“属性”

b) 点击“主目录”选项卡,在“本地路径”文本框中,输入网站所在文件夹名如c:\interpub\wwwroot\leilei

c) 点击“文档”选项卡,在“启用默认文档”下边的文本框中,指定首页名

              2) 虚拟目录

虚拟目录是本地计算机上的一个文件夹,可以通过默认WEB站点来访问,就像它是位于主目录下一样。

              3) 启动站点,注意在不给网站分配IP时,要为不同的网站分本配不同的端口号,否则,任何时刻只能有一个站点在运行。

                 4) 启动VS.net IDE,新建一个Asp.net Web应用程序 ,把“位置”文本框中的http://localhost/WebApplication1,改为“http://localhost/项目名”,这时VS.net会在站点文件夹下创建一个以项目名命名的文件夹,其中内容即是项目中的内容;同时会在“我的文档\Visual Studio Projects”中创建一个以项目名命名的文件夹,其中存放项目文件。

                        注意:a)项目创建后就不能更改站点的主目录,否则项目会无法打开

                                          b)要打开项目,站点要先运行

6. Asp.net的结构

       Asp.net使开发Web 应用程序的开发方式更类似于传统可视化应用程序的开发方式。代码声明块的作用相当于传统可视化编程的代码区,Html代码块和WEB表单的作用相当于传统可视化编程的窗口界面。

编译指令<%@ Page Language=”vb” %>

代码声明块Code Declaration Block(会被编译成MSIL

Html代码块和WEB表单(可包含代码交付块Code Render Block,即用<% %>括起的代码,它不会被编译,效率底,尽量少用)

7. Asp.Net的工作流程

              -

请求

 

第一次

 

编译

 

 

 

处理文件

 

执行代码

 

转换为HTML

 

显示

 

客户

 

服务器

 

 

8. Asp.net维护视图状态的方式

       1视图状态(ViewState指的是对象在特定时间的外观。

       2维护状态(Maintain State维护视图状态的程序称为维护状态

       当客户提交表单时,描述视图状态的信息也被发送到服务器。在服务器处理完表单形成返回给客户的HTML页面时,视图状态的描述也被以隐藏的HTML标记的方式写入HTML页面,从而实现了视图状态的维护。

       Asp.net的视图状态管理实现方式体现了Asp.Net的这样一个优点:即它致力于使Web更像传统的应用程序环境。

9.Asp.Net通用注释方法和跨越多行的代码

       1html专用注释方法:<!- -注释- ->,可注释多行

       2)服务端注释标记:<%--注释--%>,可注释多行,但只能用在代码交付块中。

       3VB.net中用下划线,但不能在字符串中

10.Asp.net应用程序的其它方面

1)导入名称空间

导入一个名称空间并不能把它所包含的子名称空间导入,只能把它真接包含的类导入。使用名称空间中的类另一方式是不导入名称空间,而使用名称空间的完全层次结构,如System.IO.File.

       2PE文件

              MSIL被存储在可移植的可执行(PE)文件

       3) JIT(Just -In-Time)编译器

              MSIL转换为本机机器语言。它是CLR的一部分。对不同平台有不同的JIT

       4) 应用程序域Application domain

应用程序运行时被划分为应用程序域,而不是进程。应用程序域比进程更小的的处理单元,比进程的容错能力更强。当一个应用程序域出现错误时,会被另一个应用程序域代替。

       5)组合体Assembly

CLR中的基本的共享和重用单元。它的作用类似于dll文件。组合体中包含代表其他常用单元的文件,如Asp.net页面、PE文件、图像或VB.net源文件。组合体使.Net框架可以执行更为严格的安全型和应用程序版本管理。从而使代码更稳定。因此,即使是ASP.Net页面也被放到页面被请求时动态创建的组合体中。

组合体的一个重要特性是:可以在CLR中同时运行同一个组合体的不同版本。(而dll在任一时刻只能运行一个版本)。这是因为每种类型的页面是由不同的IIS ISAPIInternet服务器应用程序编程接口)过滤器处理的。当Web服务器收到HTTP请求时,ISAPI进行响应。

通常组合体是单个DLL文件,也可能包括多个文件(甚至文件的类型也不同)

Asp.net程序通过将组合体放在组合体仓库中使用。

l         全局仓库:默认为\WinNt\Assembly,供全部应用程序使用。可以在命令行下用gacutil.exe进行操作这里的组合体。

l         本地仓库:默认是应用程序根目录下的\bin目录。只供本程序使用。这样可以在一个站点中使用同一组合体的不同版本。

影子组合体:ASP.Net不将实际的组合体装载到内存中,在使用组合体之前,会创建一个影子(shadowed)副本。并将其锁定和装载到内存中。由于实际的文件并没有被锁定,因此开发可自由的替换它们,不再需要重启动。CLR监视并发现对实际文件所做的任何修改。当它发现文件被修改时,便创建新文件的一个影子副本,将其装载到内存中,并逐渐将请求转到新版本。当所有请求引用都是新版本时,旧的版本将被释放。

应用程序的文件被组织成组合体和名称空间

       6)通用语言规范CLS

它是CLR提供的基本特性子集,现代的每一种面向对象编程语言都具备这些特性。CLS确保使用不同语言编写的对象可以彼此进行交互。

       7)一个Asp.net源程序要正确运行至少要保证一下几个条件

              a) IE不能处于脱机状态

              b) 当前运行的站点要正确

P18 1.9.1.1

 

 

posted @ 1:13 PM | Feedback (0)

无比郁闷啊

昨天碰到一个极为奇怪的事,让我郁闷的很啊。

相同的where 条件 ,可以select出数据,却无法删除!

后来发现只在特定表,where条件中有日期时才会出现此现象。

后来请高手一起分析,才发现原来是索引引发的问题

在这几个表中,主键索引字段中都包含一个日期型的字段,且把该字段设为倒序

这样的话,在这样的表上,select一段时间的数据,比如说取3和5号的数据,

写成select * from 表 where 日期>=3号 and 日期<=4号 即可,可以正确的提出数据,但是

如果把select * 换成delete却无论如何也删除不掉这些数据!

可是在where中加入其它非日期比较的条件就可以正确删除了,比如

select * from 表 where 日期>=3号 and 日期<=4号  and id='0042'

后来发现,如果把>和<写反,就可以正确删除了,比如

select * from 表 where 日期<=3号 and 日期>=4号 就可把3号和5号之间的数据删除!

 

由上述现象,得出一个结论,在对建有倒序索引日期型字段、在DELETE语句的WHERE子句进行比较大小时,如果没有其它条件,那么>、>=、<、<= 要写成<、<=,>、>=,与逻辑上的写法相反!

同时between是无效的,可能要写成not between·

 

不知这是不是SQLSERVER的BUG啊!

 

posted @ 11:04 AM | Feedback (0)

PB存储过程

在PB中执行SQL SERVER存储过程时,

要注意在开始执行存储过程前加入以下语句

SQLCA.AUTOCOMMIT=TRUE//不写,存储过程的结果将不能及时提交,可能导致的后果是在企业管理器中不能查看到数据变化

在执行后加

if sqlca.sqlcode<>0 then

end if

CLOSE 存储过程名;//不写,在连续执行存储过程时,可能会出现Attempt to initiate a new SQL Server operation with results pending.的错误

SQLCA.AUTOCOMMIT=false