mikebai.com

  • Home
  • dev
  • DotNET
  • M365
  • 搞笑
  • 杂七杂八
  • FocusDict
DotNET
DotNET

sql存储过程教程

sql存储过程教程 目录1.sql存储过程概述2.SQL存储过程创建3.sql存储过程及应用4.各种存储过程使用指南5.ASP中存储过程调用的两种方式及比较6.SQL存储过程在.NET数据库中的应用 7.使用SQL存储过程要特别注意的问题1.sql存储过程概述在大型数据库系统中,存储过程和触发器具有很重要的作用。无论是存储过程还是触发器,都是SQL 语句和流程控制语句的集合。就本质而言,触发器也是一种存储过程。存储过程在运算时生成执行方式,所以,以后对其再运行时其执行速度很快。SQL Server 2000 不仅提供了用户自定义存储过程的功能,而且也提供了许多可作为工具使用的系统存储过程。存储过程的概念存储过程(Stored Procedure)是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库。中用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。在SQL Server 的系列版本中存储过程分为两类:系统提供的存储过程和用户自定义存储过程。系统过程主要存储在master 数据库中并以sp_为前缀,并且系统存储过程主要是从系统表中获取信息,从而为系统管理员管理SQL Server 提供支持。通过系统存储过程,MS SQL Server 中的许多管理性或信息性的活动(如了解数据库对象、数据库信息)都可以被顺利有效地完成。尽管这些系统存储过程被放在master 数据库中,但是仍可以在其它数据库中对其进行调用,在调用时不必在存储过程名前加上数据库名。而且当创建一个新数据库时,一些系统存储过程会在新数据库中被自动创建。用户自定义存储过程是由用户创建并能完成某一特定功能(如查询用户所需数据信息)的存储过程。在本章中所涉及到的存储过程主要是指用户自定义存储过程。存储过程的优点当利用MS SQL Server 创建一个应用程序时,Transaction-SQL 是一种主要的编程语言。若运用Transaction-SQL 来进行编程,有两种方法。其一是,在本地存储Transaction- SQL 程序,并创建应用程序向SQL Server 发送命令来对结果进行处理。其二是,可以把部分用Transaction-SQL 编写的程序作为存储过程存储在SQL Server 中,并创建应用程序来调用存储过程,对数据结果进行处理存储过程能够通过接收参数向调用者返回结果集,结果集的格式由调用者确定;返回状态值给调用者,指明调用是成功或是失败;包括针对数据库的操作语句,并且可以在一个存储过程中调用另一存储过程。 我们通常更偏爱于使用第二种方法,即在SQL Server 中使用存储过程而不是在客户计算机上调用Transaction-SQL 编写的一段程序,原因在于存储过程具有以下优点:(1) 存储过程允许标准组件式编程存储过程在被创建以后可以在程序中被多次调用,而不必重新编写该存储过程的SQL 语句。而且数据库专业人员可随时对存储过程进行修改,但对应用程序源代码毫无影响(因为应用程序源代码只包含存储过程的调用语句),从而极大地提高了程序的可移植性。(2) 存储过程能够实现较快的执行速度如果某一操作包含大量的Transaction-SQL 代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进行分析、优化,并给出最终被存在系统表中的执行计划。而批处理的Transaction- SQL 语句在每次运行时都要进行编译和优化,因此速度相对要慢一些。(3) 存储过程能够减少网络流量对于同一个针对数据数据库对象的操作(如查询、修改),如果这一操作所涉及到的 Transaction-SQL 语句被组织成一存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,否则将是多条SQL 语句,从而大大增加了网络流量,降低网络负载。(4) 存储过程可被作为一种安全机制来充分利用系统管理员通过对执行某一存储过程的权限进行限制,从而能够实现对相应的数据访问权限的限制,避免非授权用户对数据的访问,保证数据的安全。(我们将在14 章“SQLServer 的用户和安全性管理”中对存储过程的这一应用作更为清晰的介绍)注意:存储过程虽然既有参数又有返回值,但是它与函数不同。存储过程的返回值只是指明执行是否成功,并且它不能像函数那样被直接调用,也就是在调用存储过程时,在存储过程名字前一定要有EXEC保留字。 2.SQL存储过程创建创建存储过程,存储过程是保存起来的可以接受和返回用户提供的参数的 Transact-SQL 语句的集合。      可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过程),或在所有会话中临时使用(全局临时过程)。      也可以创建在 Microsoft? SQL Server? 启动时自动运行的存储过程。      语法   CREATE PROC [ EDURE ] procedure_name [ ; number ]     [ { @parameter data_type }       [ VARYING ] [ = default ] [ OUTPUT ]     ] [ ,...n ]       [ WITH     { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]       [ FOR REPLICATION ]       AS sql_statement [ ...n ] 参数   procedure_name      新存储过程的名称。过程名必须符合标识符规则,且对于数据库及其所有者必须唯一。   要创建局部临时过程,可以在 procedure_name 前面加一个编号符 (#procedure_name),要创建全局临时过程,可以在 procedure_name 前面加两个编号符 (##procedure_name)。完整的名称(包括 # 或 ##)不能超过 128 个字符。指定过程所有者的名称是可选的。      ;number      是可选的整数,用来对同名的过程分组,以便用一条 DROP PROCEDURE 语句即可将同组的过程一起除去。例如,名为 orders 的应用程序使用的过程可以命名为 orderproc;1、orderproc;2 等。DROP PROCEDURE orderproc 语句将除去整个组。如果名称中包含定界标识符,则数字不应包含在标识符中,只应在 procedure_name 前后使用适当的定界符。      @parameter      过程中的参数。在 CREATE PROCEDURE 语句中可以声明一个或多个参数。用户必须在执行过程时提供每个所声明参数的值(除非定义了该参数的默认值)。存储过程最多可以有 2.100 个参数。      使用 @ 符号作为第一个字符来指定参数名称。参数名称必须符合标识符的规则。每个过程的参数仅用于该过程本身;相同的参数名称可以用在其它过程中。默认情况下,参数只能代替常量,而不能用于代替表名、列名或其它数据库对象的名称。   data_type      参数的数据类型。所有数据类型(包括 text、ntext 和 image)均可以用作存储过程的参数。不过,cursor 数据类型只能用于 OUTPUT 参数。如果指定的数据类型为 cursor,也必须同时指定 VARYING 和 OUTPUT 关键字。   说明 对于可以是 cursor 数据类型的输出参数,没有最大数目的限制。         VARYING      指定作为输出参数支持的结果集(由存储过程动态构造,内容可以变化)。仅适用于游标参数。      default      参数的默认值。如果定义了默认值,不必指定该参数的值即可执行过程。默认值必须是常量或 NULL。如果过程将对该参数使用 LIKE 关键字,那么默认值中可以包含通配符(%、_、[] 和 [^])。      OUTPUT      表明参数是返回参数。该选项的值可以返回给 EXEC[UTE]。使用 OUTPUT 参数可将信息返回给调用过程。Text、ntext 和 image 参数可用作 OUTPUT 参数。使用 OUTPUT 关键字的输出参数可以是游标占位符。      n      表示最多可以指定 2.100 个参数的占位符。      {RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}     

2009-11-11 0comments 96hotness 0likes mikebai Read all
DotNET

存储过程入门与提高

存储过程入门与提高 什么是存储过程呢? 定义:       将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。 讲到这里,可能有人要问:这么说存储过程就是一堆SQL语句而已啊? Microsoft公司为什么还要添加这个技术呢? 那么存储过程与一般的SQL语句有什么区别呢? 存储过程的优点: 1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。 2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。 3.存储过程可以重复使用,可减少数据库开发人员的工作量 4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权 存储过程的种类: 1.系统存储过程:以sp_开头,用来进行系统的各项设定.取得信息.相关管理工作, 如 sp_help就是取得指定对象的相关信息 2.扩展存储过程   以XP_开头,用来调用操作系统提供的功能 exec master..xp_cmdshell 'ping 10.8.16.1' 3.用户自定义的存储过程,这是我们所指的存储过程    常用格式    Create procedure procedue_name    [@parameter data_type][output]    [with]{recompile|encryption}    as         sql_statement 解释:  output:表示此参数是可传回的 with {recompile|encryption} recompile:表示每次执行此存储过程时都重新编译一次 encryption:所创建的存储过程的内容会被加密 如:    表book的内容如下    编号    书名                        价格    001      C语言入门                   $30    002      PowerBuilder报表开发        $52  实例1:查询表Book的内容的存储过程    create proc query_book       as       select * from book    go    exec query_book  实例2:加入一笔记录到表book,并查询此表中所有书籍的总金额    Create proc insert_book    @param1 char(10),@param2 varchar(20),@param3 money,@param4 money output    with encryption  ---------加密    as    insert book(编号,书名,价格) Values(@param1,@param2,@param3)   select @param4=sum(价格) from book  go   执行例子:   declare @total_price money   exec insert_book '003','Delphi 控件开发指南',$100,@total_price  print '总金额为'+convert(varchar,@total_price)  go存储过程的3种传回值:   1.以Return传回整数   2.以output格式传回参数   3.Recordset传回值的区别:       output和return都可在批次程式中用变量接收,而recordset则传回到执行批次的客户端中  实例3:设有两个表为Product,Order,其表内容如下:      Product           产品编号       产品名称    客户订数                 001             钢笔         30                     002             毛笔         50                     003             铅笔         100              Order             产品编号         客户名     客户订金        &nbs

2009-11-11 0comments 94hotness 0likes mikebai Read all
DotNET

jQuery的html()等方法介绍

本来是看到一篇文章,写研究的,想COPY过来就完事了。该来来自于cssRain,但是在看的过程中,发现内容和标准偏差很多,于是就贴上它的链接,然后自己谈谈理解吧。 CSSRAIN的链接为:http://www.cssrain.cn/article.asp?id=1176 在jQuery里面对于一些HTML的元素操作都是很简化的,这也是很多人选择使用jQuery的原因。 对于获取某一个元素的值,如input框,我们往往是用$('#test').val(); $('#test')这个我就不多说了,反正就是获取ID为test的这个元素。 $('#test').val(),也就是获取它的值,一般来说,凡是能够用在FORM里的元素,都可以用.val()来进行值的获取,如input,textarea,select等,都可以用.val()来获取它们的当前值 而.val('aa');则是设置该元素的值,$('#test').val('aa'),也就是相当于设置test元素的值为aa。 类似这样的用法还有两种:.html(),.text(),这两种用法往往用在div和span元素上,一般是为这两种元素进行赋值和取值。 .html()替代了以前的 .innerHTML , .html('test') ,则是替代了 .innerHTML = 'test'; 这些类似的简化写法让我们在实际的操作中感觉得更加流畅。 这些方法都是直接在方法名里加参数来进行赋值和取值的。还有一些是通过第二个参数进行取值的(说的不太清楚。。。),比如$('#test').attr('name'),那么,返回的值就是它的attribute中的name了,如果$('#test').attr('id','test2'),则是相当于把这个test元素的name设为test2,再进行取值的时候,name就是test2了。

2009-11-10 0comments 95hotness 0likes mikebai Read all
DotNET

JQuery之CascadingSelect和FillOptions插件试用小结

今天因为要做一个通过下拉菜单选择目标教师的管理面板,需要用的了选择框的联动。 其实这个功能以前也做过,不过都需要大量的代码,麻烦,所以想试试用Ajax实现,所以开始了痛苦的一天了…… 通过百度,选定了使用JQuery的插件CascadingSelect和FillOptions 下载了示例,发现是aspx的文件……可是我用的是asp啊……于是再找,最后找到了一个asp版的json类,所以尝试自己改动一下去实现了 调试了半天,问题一大堆……例如提示什么“null为空不是对象”等等…… 又弄了半天…… 原来,$() 冲突了……另一个Js函数了声明了一个$(),幸好JQuery早就提供了解决方法;原来,json格式不对……找到的json类生成的json格式不适合JQuery的插件使用……FillOptions插件使用的格式是:["name1":"value1","name2":"value2",…] 这样的格式,改正……原来,JQuery的Ajax中文乱码……好像是UTF-8编码过的,需要Ajax的页面声明一下编码:Response.Charset="gb2312" 终于好了 附上CascadingSelect和FillOptions插件点击下载此文件 Asp.Net版的实例点击下载此文件 Asp版的json类(我修改过了)复制内容到剪贴板程序代码'--------------------------------------- ' JSONClass类 ' 将Select语句的执行结果转换成JSON '------------------------------------------ Class JSONClass ' 定义类属性,默认为Private Dim SqlString ' 用于设置Select Dim JSON ' 返回的JSON对象的名称 Dim DBConnection ' 连接到数据库的Connection对象 ' 可以外部调用的公共方法 Public Function GetJSON () dim JSONClassRs dim returnStr dim i dim oneRecord ' 获取数据 Set JSONClassRs= Server.CreateObject("ADODB.Recordset") JSONClassRs.open SqlString,DBConnection,1,1 ' 生成JSON字符串 if JSONClassRs.eof=false and JSONClassRs.Bof=false then if len(JSON)>0 then returnStr="{ "& JSON & ":" returnStr=returnStr & "["while JSONClassRs.eof=false ' ------- oneRecord= "{" for i=0 to JSONClassRs.Fields.Count -1 oneRecord=oneRecord & chr(34) &JSONClassRs.Fields(i).Name&chr(34)&":" oneRecord=oneRecord & chr(34) &JSONClassRs.Fields(i).Value&chr(34) &"," Next '去除记录最后一个字段后的"," oneRecord=left(oneRecord,InStrRev(oneRecord,",")-1) oneRecord=oneRecord & "}," '------------ returnStr=returnStr & oneRecord JSONClassRs.MoveNext Wend ' 去除所有记录数组后的"," returnStr=left(returnStr,InStrRev(returnStr,",")-1) returnStr=returnStr & "]" if len(JSON)>0 then returnStr=returnStr & "}" end if JSONClassRs.close set JSONClassRs=Nothing GetJSON=returnStr End Function '私用方法,在类中使用 Private Function check() End Function ' End Class Asp版的json类的调用方法复制内容到剪贴板程序代码dim a,StrTmpset a=new JSONClass a.Sqlstring="select jsid,(zsxm+'('+loginxm+')') as jsname from "&srsdbt(1)&" where Dep_id="&aID&" order by rank_jyk desc" a.dbconnection=conn a.json="" StrTmp = a.GetJSon()Response.Charset="gb2312"Response.write StrTmp CascadingSelect和FillOptions插件的调用方法复制内容到剪贴板程序代码<script src="include/jQuery.js" type="text/javascript"></script><script src="include/jQuery.FillOptions.js" type="text/javascript"></script><script src="include/jQuery.CascadingSelect.js" type="text/javascript"></script><script language="JavaScript">var IsErr=false;JQ("#jsname").AddOption("请先选择院系","0",true,0);JQ("#depid").CascadingSelect(JQ("#jsname"),"SRS_Check.asp?a=getjs",{datatype:"json",textfield:"jsname",valuefiled:"jsid",parameter:"id"},function(){if (IsErr){JQ("#jsname").html("");JQ("#jsname").AddOption("请先选择院系","0",true,0);}else{JQ("#jsname").AddOption("选择专家...","0",true,0);}});</script>

2009-11-10 0comments 99hotness 0likes mikebai Read all
DotNET

介绍 JSON

Arabic Bulgarian Chinese Czech Dutch English French German Greek Hebrew Hungarian Indonesian Italian Japanese Korean Persian Polish Portuguese Russian Slovenian Spanish Turkish Vietnamese object {}{ members } members pairpair , members pair string : value array [][ elements ] elements value value , elements value stringnumberobjectarraytruefalsenull string """ chars " chars charchar chars char any-Unicode-character-    except-"-or-\-or-    control-character\"\\\/\b\f\n\r\t\u four-hex-digits number intint fracint expint frac exp int digitdigit1-9 digits - digit- digit1-9 digits frac . digits exp e digits digits digitdigit digits e ee+e-EE+E- JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。 JSON建构于两种结构: “名称/值”对的集合(A collection of name/value pairs)。不同

2009-11-10 0comments 99hotness 0likes mikebai Read all
DotNET

数据类型和Json格式

1. 前几天,我才知道有一种简化的数据交换格式,叫做yaml。 我翻了一遍它的文档,看懂的地方不多,但是有一句话令我茅塞顿开。 它说,从结构上看,所有的数据最终都可以分成三种类型: 第一种类型是scalar(标量),也就是一个单独的string(字符串)或数字(numbers),比如“北京”这个单独的词。 第二种类型是sequence(序列),也就是若干个相关的数据按照一定顺序并列在一起,又叫做array(数组)或List(列表),比如“北京,东京”。 第三种类型是mapping(映射),也就是一个名/值对(Name/value),即数据有一个名称,还有一个与之相对应的值,这又称作hash(散列)或dictionary(字典),比如“首都:北京”。 我恍然大悟,数据构成的最小单位原来如此简单!难怪在编程语言中,只要有了数组(array)和对象(object)就能够储存一切数据了。 2. 我马上想到了json。 21世纪初,Douglas Crockford寻找一种简便的数据交换格式,能够在服务器之间交换数据。这其实需要二步,第一步是将各种数据转化为一个字符串,也就是数据的串行化(serialization),第二步才是交换这个字符串。 当时通用的数据交换语言是XML,但是Douglas Crockford觉得XML的生成和解析都太麻烦,所以他提出了一种简化格式,也就是Json。 Json的规格非常简单,只用一个页面、几百个字就能说清楚,而且Douglas Crockford声称这个规格永远不必升级,因为该规定的都规定了。 1) 并列的数据之间用逗号(“,”)分隔。 2) 映射用冒号(“:”)表示。 3) 并列数据的集合(数组)用方括号("[]")表示。 4) 映射的集合(对象)用大括号(“{}”)表示。 上面四条规则,就是Json格式的所有内容。 比如,下面这句话: “北京市的面积为16800平方公里,常住人口1600万人。上海市的面积为6400平方公里,常住人口1800万。” 写成json格式就是这样: [{"城市":"北京","面积":16800,"人口":1600},{"城市":"上海","面积":6400,"人口":1800}]如果事先知道数据的结构,上面的写法还可以进一步简化: [["北京",16800,1600],["上海",6400,1800]] 由此可以看到,json非常易学易用。所以,在短短几年中,它就取代xml,成为了互联网上最受欢迎的数据交换格式。 我猜想,Douglas Crockford一定事先就知道,数据结构可以简化成三种形式,否则怎么可能将json定义得如此精炼呢! 3. 我还记得,在学习javascript的时候,我一度搞不清楚“数组”(array)和“对象”(object)的根本区别在哪里,两者都可以用来表示数据的集合。 比如有一个数组a=[1,2,3,4],还有一个对象a={0:1,1:2,2:3,3:4},然后你运行alert(a[1]),两种情况下的运行结果是相同的!这就是说,数据集合既可以用数组表示,也可以用对象表示,那么我到底该用哪一种呢? 我后来才知道,数组表示有序数据的集合,而对象表示无序数据的集合。如果数据的顺序很重要,就用数组,否则就用对象。 4. 当然,数组和对象的另一个区别是,数组中的数据没有“名称”(name),对象中的数据有“名称”(name)。 但是问题是,很多编程语言中,都有一种叫做“关联数组”(associative array)的东西。这种数组中的数据是有名称的。 比如在javascript中,可以这样定义一个对象: var a={"城市":"北京","面积":16800,"人口":1600}; 但是,也可以定义成一个关联数组: a["城市"]="北京";a["面积"]=16800;a["人口"]=1600; 这起初也加剧了我对数组和对象的混淆,后来才明白,在Javascript语言中,关联数组就是对象,对象就是关联数组。这一点与php语言完全不同,在php中,关联数组也是数组。 比如运行下面这段javascript: var a=[1,2,3,4]; a['foo']='Hello World'; alert(a.length); 最后的结果是4,也就是说,数组a的元素个数是4个。 但是,运行同样内容的php代码就不一样了: $a=array(1,2,3,4); $a["foo"]="Hello world"; echo count($a); 最后的结果是5,也就是说,数组a的元素个数是5个。

2009-11-10 0comments 95hotness 0likes mikebai Read all
DotNET

ashx是什么文件,如何创建

.ashx 文件用于写web handler的。其实就是带HTML和C#的混合文件。当然你完全可以用.aspx 的文件后缀。使用.ashx 可以让你专注于编程而不用管相关的WEB技术。.ashx必须包含IsReusable. 如下例所示<% @ webhandler language="C#" class="AverageHandler" %> using System; using System.Web; public class AverageHandler : IHttpHandler { public bool IsReusable { get { return true; } } public void ProcessRequest(HttpContext ctx) { ctx.Response.Write("hello"); } } .ashx比.aspx的好处在与不用多一个html   注意了VS2005中Web应用程序项目模板里的Generic Handler 项,发现它是一个.ashx文件,实际上它是一个HttpHandler。后来查了一下.Net SDK文档,发现Asp.Net1.1也支持.ashx,但是没有给出详细内容。 我们都知道,HttpHandler是一个彻底自定义Http请求的方法,它通过web.config来定义Asp.Net运行时来过滤出要自定义的Http请求,发送到定义在web.config的指定类中。 利用.ashx文件是一个更好的方法,这个文件类似于.aspx文件,可以通过它来调用HttpHandler类,从而免去了普通.aspx页面的控件解析以及页面处理的过程。这个文件特别适合于生成动态图片,生成动态文本等内容。 建立方法如下: 首先打开一个Web项目,然后在任意目录下使用VS2003解决方案资源管理器的“添加”-->“添加新项”,在对话框中选择“文本文件”,然后在文件名处输入“TextBuilder.ashx”。 然后在同目录下,使用解决方案资源管理器,使用“添加”-->“添加类”,在类文件名处输入“TextBuilder.ashx.cs”。可以看出,它的文件命名规律与.aspx文件相同。 然后在.cs文件处输入以下代码(名称空间略): using System.Web public sealed class TextBuilder : IHttpHandler {     public void ProcessRequest(HttpContext context)

2009-11-10 0comments 96hotness 0likes mikebai Read all
DotNET

ashx+jQuery,一个轻量级的asp.net ajax解决方案

跟shotdog老师研究探讨了下asp.net里,除官方庞大asp.net ajax之外的ajax解决方案。我们想法是以不同的服务器端方式输出,然后在页面使用jQuery的ajax实现调用服务器端几个解决方案: 使用一般的webform,在页面用jQuery ajax调用,再从取得的html数据中取得<body>内的内容,写入DOM优点:不用改变现有的asp.net开发模式,可以使用现成的页面;ajax取得的内容是html文本,直接写入DOM即可缺点:内容浪费,<body>之外的内容都不是必要的,而且如果使用了MasterPage那就。。。使用一般的webform,但是用Response.Write()控制输出html,在页面用jQuery ajax调用,将获取的内容写入DOM优点:内容干净,不浪费;ajax取得的内容是html文本,可以直接写入DOM缺点:需要在服务器端以字符串形式构造html文本,编程不方便,不容易调试和维护使用一般的webform,用Response.Write()控制输出json数据,在页面用jQuery ajax调用,将json数据在客户端加工成html后写入DOM优点:仅仅交换json数据,极干净,符合高效的web设计理念缺点:需要在客户端加工json数据,并且对DOM造成入侵使用asmx,封装成web service,用jQuery ajax调用asmx的内容,将json或者xml数据在客户端加工成html后写入DOM优点:仅仅交换json或/xml数据,非常干净;web service易于跨平台缺点:需要在客户端加工json数据,并且对DOM造成入侵使用自定义控件ascx,然后使用专门的webform页面做wrapper(包装)在页面用jQuery ajax调用wrapper webform,将html数据写入DOM优点:webform仅仅用作wrapper,根据不同的请求参数可以在wrapper中动态使用自定义控件;自定义控件输出的是html文本,可以直接写入DOM;编程方便,有VS2008代码感知支持,易于调试和维护缺点:跟传统的webform编程理念不一样,弱化了webform的作用以上就是讨论的几种可行的方案——不管是asp.net webform方式还是asp.net MVC方式,都是可行的。 昨天晚上又发现一种方案:使用ashx+jQuery .ashx是一个专门的用于处理HttpHandler的文件类型,用来处理自定义Http请求,可以在web.config定义运行时针对ashx的Http请求处理方式。 <add verb="*" path="*.ashx" type="System.Web.UI.SimpleHandlerFactory" validate="false" />这样我们就可以用SimpleHandlerFactory来处理ashx的http请求了。在ashx的类中实现IRequiresSessionState接口,using下System.Web.SessionState就可以使用Session了,很方便 using System.Web.SessionState;     public class checkCookie : IHttpHandler ,IRequiresSessionState{  ...  // todo somthing}实例:使用ashx+jQuery实现Email存在的验证 .ashx文件 <%@ WebHandler Language="C#" Class="CheckUser" %> using System;using System.Web;  public class CheckUser : IHttpHandler {     public void ProcessRequest (HttpContext context) {        context.Response.ContentType = "text/plain";        context.Response.Write(UserRule.GetInstance().IsUserExist(context.Request["Email"]));    }     public bool IsReusable {        get {            return false;        }    }}html:    <input type="text" id="email" />   <input type="button" value="test" onclick="check_email()" />js: function check_email() {    var email = $("#email").attr("value");    $.get("../ajax/checkuser.ashx",    { Email: email },    function(data) {        window.alert(data);    });}simple的,显然效率会比较高。不过simple的就只能够做点simple的事情。如果要输出html,还是不太方便。如果要输出html的话,我还是比较倾向于用ascx处理内容,webform做包装所以ashx+jQuery应该算是是一个asp.net里轻量级的解决方案

2009-11-10 0comments 96hotness 0likes mikebai Read all
DotNET

jQuery 入门

昨天收到了cssrain的赠书《锋利的jQuery》,看了一个章节,非常不错,这里先推荐一下! 今天开始我将博客的重点放在jQuery上了,重新开始学习jQuery,并将重新学到的东西和大家分享,有不对或不妥的地方希望大家能毫无保留的留言指出,大家一起学习,一起进步。 至于什么是jQuery,jQuery的优缺点,jQuery和其他javascript库的对比我就不说了,网上已经有很多了,我这里只说一些可能更关心的一些东西。 我没JS基础,能学jQuery吗? 能!很多人说jQuery非常容易上手,不懂JS也能学的很好,是的,但是我相信如果你懂得JS能更好的学习jQuery。 有没有支持jQuery语法和语法提示的编辑器或工具呢? 有,而且很多。这里推荐最常用的几款: 1.aptana 官方下载:http://www.aptana.com/ aptana最强大的就是支持js及各个有名的js框架的语法提示,当然包括jQuery,看一些关于aptana的使用, Aptana使用入门一(中文) web开发利器Aptana studio 1.2(下载,破解,汉化) aptana要支持jQuery语法提示只要在References窗口下的Global References下勾选jQuery就可以了,如图: 2.Dreamweaver cs4 cssrain开发了支持jQuery语法提示的插件,DW cs4的jQuery语法提示插件,安装这个插件需要Adobe Extension Manager扩展器 3.VS2008 Jeff King发布了一个jQuery智能提示Visual Studio 2008 SP1 补丁,安装这个补丁后,Visual Studio 2008可以自动找到vsdoc.js文件。 http://code.msdn.microsoft.com/KB958502/Release/ProjectReleases.aspx?ReleaseId=1736 怎么配置jQuery? 先到jQuery官方网站(http://jquery.com/)下载jQuery库,目前最新版本是1.3.2,选择一个下载版本(开发版本和压缩版)如图: 开发版本和压缩版比较: 开发版:jquery-1.3.2.js,主要用于学习测试, 压缩版:jquery-1.3.2.min.js,主要用于项目开发, 下载好后引用这个jQuery库就可以了我们的jQuery开发了,在页面的<head></head>区插入<script type="text/javascript" src="jquery-1.3.2/jquery-1.3.2.min.js"></script>就可以了。 我们的第一个jQuery程序 我们写一个弹出Hello jQuery!的程序: < !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>我们的第一个jQuery程序</title><script type="text/javascript" src="http://www.css88.com/jquery-1.3.2/jquery-1.3.2.min.js"></script><script type="text/javascript">$(document).ready(fun

2009-11-09 0comments 119hotness 0likes mikebai Read all
DotNET

jQuery是什么

|seektanjQuery是最近比较火的一个JavaScript库,从del.icio.us/上相关的收藏可见一斑。 到目前为之jQuery已经发布到1.2.1版本,而在这之前的一个星期他们刚发布1.2版本,看看他的各个版本的 发布时间 ,不难发现他的飞速发展,每个月都在更新版本;而且不断有人开发出新的 jQuery插件 ,最近又推出了 jQuery UI 库jQuery于2006年一月十四号在BarCamp NYC (New York City)面世。主将 John Resig ,写有《Pro JavaScript Techniques》一书,因为效力于mozolla,据说firefox 3将包含Jquery,现在的 Jquery团队 有主要开发人员,推广人员,UI,插件开发,网站设计维护,其中3个主要开发人员分别是:两个美国人John Resig/Brandon Aaron,一个德国人Jorn Zaefferer) 下面简单介绍一下jQuery的一些特性和用法: 1、精准简单的选择对象(dom): 以下为引用的内容:$('#element');// 相当于document.getElementById("element") $('.element');//Class$('p');//html标签$("form > input");//子对象$("div,span,p.myClass");//同时选择多种对象$("tr:odd").css("background-color", "#bbbbff");//表格的隔行背景$(":input");//表单对象$("input[name='newsletter']");//特定的表单对象 2、对象函数的应用简单和不限制: element.function(par); $(”p.surprise”).addClass(”ohmy”).show(”slow”)... 3、对已选择对象的操作(包括样式): 以下为引用的内容:$("#element").addClass("selected");//给对象添加样式$('#element').css({ "background-color":"yellow", "font-weight":"bolder" });//改变对象样式$("p").text("Some new text.");//改变对象文本$("img").attr({ src: "test.jpg", alt: "Test Image" });//改变对象文本$("p").add("span");//给对象增加标签$("p").find("span");//查找对象内部的对应元素$("p").parent();//对象的父级元素$("p").append("<b>Hello</b>");//给对象添加内容 4、支持aJax,支持文件格式:xml/html/script/json/jsonp   以下为引用的内容:$("#feeds").load("feeds.html");//相应区域导入静态页内容$("#feeds").load("feeds.php", {limit: 25}, function(){alert("The last 25 entries in the feed have been loaded");});//导入动态内容 4、对事件的支持: 以下为引用的内容:$("p").hover(function () {      $(this).addClass("hilite");//鼠标放上去时    }, function () {      $(this).removeClass("hilite");//移开鼠标    });//鼠标放上去和移开的不同效果(自动循环所有p对象) 5、动画: 以下为引用的内容:$("p").show("slow");//隐藏对象(慢速渐变)$("#go").click(function(){$("#block").animate({  &

2009-11-09 0comments 95hotness 0likes mikebai Read all
1…910111213…16

Recent Posts

  • c# winform适配高dpi
  • com.microsoft.sqlserver.jdbc.SQLServerException “trustServerCertificate”属性设置为“false”,但驱动程序无法使用安全套接字层 (SSL) 加密与 SQL Server建立安全连接
  • java -cp 用法介绍
  • HTML 容器元素
  • MVC的cshtml的介绍

Recent Comments

No comments to show.

COPYRIGHT © 2025 mikebai.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang