仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 650|回复: 7
打印 上一主题 下一主题

[学习教程] ASP.NET编程:.NET数据库使用程序中存储历程的使用

[复制链接]
不帅 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:48:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
那做企业软件是不是最好用J2EE?程序|存储历程|数据|数据库<Pstyle="TEXT-INDENT:2em">一.媒介:<Pstyle="TEXT-INDENT:2em">存储历程(StoredProcedure)是一组为了完成特定功效的SQL语句集,经编译后存储在数据库中。用户经由过程指定存储历程的名字并给出参数(假如该存储历程带有参数)来实行它。存储历程是数据库中的一个主要工具,任何一个计划优秀的数据库使用程序都应当用到存储历程。总的来讲,存储历程具有以下一些长处:<Pstyle="TEXT-INDENT:2em">◆存储历程同意尺度组件式编程。<Pstyle="TEXT-INDENT:2em">◆存储历程可以完成较快的实行速率。<Pstyle="TEXT-INDENT:2em">◆存储历程可以削减收集流量。<Pstyle="TEXT-INDENT:2em">◆存储历程可被作为一种平安机制来充实使用。<Pstyle="TEXT-INDENT:2em">本文作者将向人人先容.NET数据库使用程序中存储历程的使用,和怎样将它与ADO.NET中的SqlDataAdapter工具、DataSet工具等分离利用以进步.NET数据库使用程序的整体功能。<Pstyle="TEXT-INDENT:2em">二.体系请求:<Pstyle="TEXT-INDENT:2em">开辟工具:VisualStudio.NET<Pstyle="TEXT-INDENT:2em">数据库办理体系:SQLServer2000(个中包括了示例程序所用到的Pubs数据库)<Pstyle="TEXT-INDENT:2em">三.创立一个复杂的存储历程:<Pstyle="TEXT-INDENT:2em">这里我将向人人先容怎样使用VisualStudio.NETIDE来创立存储历程。使用VisualStudio.NETIDE创立存储历程长短常简单和直不雅的,你只需在服务器资本办理器中导向到Pubs数据库并睁开节点,就会发明包含存储历程在内的各类数据库工具。<Pstyle="TEXT-INDENT:2em">在存储历程节点上点击右键即可弹出一个菜单,个中包括了“新建存储历程”的命令。新建一个存储历程后,IDE中的代码编纂窗口便呈现以下所示的代码模板:<Pstyle="TEXT-INDENT:2em">
  1. CREATEPROCEDUREdbo.StoredProcedure1/*(@parameter1datatype=defaultvalue,@parameter2datatypeOUTPUT)*/AS/*SETNOCOUNTON*/RETURN下面的代码模板切合简化的创立存储历程的语律例则,完全的语律例则以下:CREATEPROC[EDURE]procedure_name[;number][{@parameterdata_type}[VARYING][=default][OUTPUT]][,...n][WITH{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}][FORREPLICATION]ASsql_statement[...n]
复制代码
<Pstyle="TEXT-INDENT:2em">限于篇幅,各个参数的寄义在此就未几作先容了,有乐趣的读者能够参考有关SQLServer2000数据库办理体系的材料。<Pstyle="TEXT-INDENT:2em">上面我对该代码模板中的各个语法成份略作先容。CREATEPROCEDURE声明创立一个存储历程,前面随着该存储历程的称号。“/*……*/”中的成份是该存储历程的参数,可包含输出参数和输入参数。AS关头字前面的内容是该存储历程的主体部分,个中是任何数目和范例的包括在存储过程当中的SQL语句。RETURN关头字标明存储历程停止并能前往整型形态值给挪用者。上面我们就来创立一个复杂的不带参数的存储历程并使用之:<Pstyle="TEXT-INDENT:2em">
  1. CREATEPROCEDUREdbo.up_GetPublisherInfoASSELECTpub_id,pub_name,city,state,countryFROMpublishersRETURN
复制代码
<Pstyle="TEXT-INDENT:2em">创立以上存储历程后,保留之。保留终了,与该存储历程绝对应的节点就会呈现在服务器资本办理器中。同时请注重代码编纂窗口中的CREATE关头字变成ALTER关头字了,该关头字是用于变动任何现有的存储历程的。要运转上述存储历程,只需点击其节点并在右键弹出菜单当选择“运转存储历程”。<Pstyle="TEXT-INDENT:2em">四.创立一个带参数的存储历程:<Pstyle="TEXT-INDENT:2em">以上我们创立了一个复杂的不带参数的存储历程,而在实践的使用中常常会用到良多带有参数的存储历程。带有参数的存储历程通常为用于更新数据或是拔出数据的。上面我们能够使用一样的操纵办法创立一个带参数的存储历程:<Pstyle="TEXT-INDENT:2em">
  1. CREATEPROCEDUREdbo.up_UpdatePublisherInfo(@pub_idchar(4),@pub_namevarchar(40),@cityvarchar(20),@statechar(2),@countryvarchar(30))ASUPDATEpublishersSETpub_name=@pub_name,city=@city,state=@state, country=@countryWHERE(pub_id=@pub_id)RETURN
复制代码
<Pstyle="TEXT-INDENT:2em">在下面的创立存储历程的代码中,我们经由过程在称号前增加一个“@”标记来声明存储历程的部分变量-参数,同时还声了然各个参数的范例,断定了各个参数的偏向值,也即标明该参数是输出型的仍是输入型的大概是输出输入型的大概是前往值型的。用户经由过程响应的存储历程称号和准确无效的参数即可挪用该存储历程了。另有,你能够经由过程使用OUTPUT关头字在参数中增加输入型的参数,详细办法请参考下面的语律例则。输入型的参数能前往给挪用者相干的信息。下面的存储历程能更新publishers表中响应出书商的信息。你能够经由过程点击该存储历程的节点,在右键弹出菜单当选择“运转存储历程”来实行它。一旦实行,IDE中便弹出一个输出出书商信息的对话框。在该对话框中填进准确无效的更新信息,注重pub_id的值在本来的表中必需存在,然后点击“断定”按钮即可更新数据了。
<Pstyle="TEXT-INDENT:2em">五.创立复杂存储历程的数据库使用程序:<Pstyle="TEXT-INDENT:2em">上面我们就使用上述的不带参数的存储历程来一个数据库使用程序,个中还用到了ADO.NET中的SqlDataAdapter工具和DataSet工具。个中的SqlDataAdapter工具作为SQLServer数据库和DataSet工具的桥梁将二者接洽在一同。SqlDataAdapter工具包括了两个经常使用的办法:Fill()办法和Update()办法。个中的Fill()办法能从数据库中猎取响应数据并添补到DataSet工具中,而Update()办法望文生义就是更新数据集的意义了。在挪用Fill()办法之前,我们必需设置好SqlDataAdapter工具的SelectCommand属性,该属性实际上是一个SqlCommand工具。SelectCommand属性中包括无效的SQL语句,并能据此从数据库中猎取响应数据并添补到DataSet工具中。<Pstyle="TEXT-INDENT:2em">起首,我们创立一个WindowsForms使用程序,编程言语为C#。在VisualStudio.NET中创立一个新的项目后,给该项目增加一个新的类-Publishers类,该类封装了毗连到背景数据库并猎取数据集工具的营业逻辑。步骤以下:<Pstyle="TEXT-INDENT:2em">1.增加需要的定名空间援用:usingSystem.Data.SqlClient;<Pstyle="TEXT-INDENT:2em">2.给该类增加以下一些需要的变量:<Pstyle="TEXT-INDENT:2em">
  1. privateSqlConnectioncnPubs;privateSqlCommandcmdPubs;privateSqlDataAdapterdaPubs;privateDataSetdsPubs;
复制代码
<Pstyle="TEXT-INDENT:2em">3.在该类的机关函数中完成毗连背景数据库,猎取SqlDataAdapter工具等营业逻辑:<Pstyle="TEXT-INDENT:2em">
  1. publicPublishers(){try{//创立一个数据库毗连工具cnPubs=newSqlConnection("server=localhost;integratedsecurity=true;database=pubs");//创立一个SqlCommand工具,并指明其命令范例为存储历程cmdPubs=newSqlCommand();cmdPubs.Connection=cnPubs;cmdPubs.CommandType=CommandType.StoredProcedure;cmdPubs.CommandText="up_GetPublisherInfo";//创立一个SqlDataAdapter工具,设定其SelectCommand属性为下面的SqlCommand工具daPubs=newSqlDataAdapter();daPubs.SelectCommand=cmdPubs;//创立一个DataSet工具dsPubs=newDataSet();}catch(Exception){}}
复制代码
<Pstyle="TEXT-INDENT:2em">4.最初为该类供应一个GetPublisherInfo()办法,该办法用SqlDataAdapter工具添补DataSet工具并前往添补后的DataSet工具,办法以下(值得注重的是:SqlDataAdapter工具会隐式地翻开数据库毗连并在猎取数据后隐式地封闭毗连,这就是说DataSet工具是事情在非毗连形式下的。而当你显式地翻开数据库毗连并猎取数据后,SqlDataAdapter工具其实不会将该毗连封闭):<Pstyle="TEXT-INDENT:2em">
  1. publicDataSetGetPublisherInfo(){//挪用SqlDataAdapter工具的Fill()办法并前往数据集工具daPubs.Fill(dsPubs);returndsPubs;}
复制代码
<Pstyle="TEXT-INDENT:2em">完成Publishers类的计划后,我们给主窗体增加一个DataGrid控件并用它来显现DataSet工具中的数据。起首给主窗体类增加以下成员变量:<Pstyle="TEXT-INDENT:2em">
  1. privatePublisherspubs;privateDataSetds;以后,修正主窗体类的机关函数以下:publicForm1(){////Windows窗体计划器撑持所必须的//InitializeComponent();////TODO:在InitializeComponent挪用后增加任何机关函数代码//pubs=newPublishers();ds=pubs.GetPublisherInfo();dataGrid1.DataSource=ds.Tables[0];}
复制代码
如许该使用程序一启动主窗体的DataGrid控件中便显现了使用上述不带参数的存储历程从Pubs数据库中猎取的响应数据。
<Pstyle="TEXT-INDENT:2em">六.创立带参数的存储历程的数据库使用程序<Pstyle="TEXT-INDENT:2em">下面我们创立了一个不带参数的存储历程的使用程序,上面我们就来创立一个加倍庞大的数据库使用程序。在实践的数据库使用中,我们常常必要猎取数据并更新、拔出或删除数据,这时候我们就必要用到带有参数的存储历程了,同时在使用SqlDataAdapter工具时,我们会挪用它的Update()办法。该Update()办法会主动依据DataSet工具中的DataTable工具内各笔记录的变更情形完成响应操纵。SqlDataAdapter工具还包括了UpdateCommand、InsertCommand、DeleteCommand等属性,这些属性实在都是SqlCommand工具。Update()办法会依据操纵的范例选用响应的属性。<Pstyle="TEXT-INDENT:2em">在使用带有参数的存储历程创建数据库使用程序时,我们一样平常都要用到SqlParameter类,该类封装了各类与Sql参数相干的属性和办法。个中的属性包含了ParameterName,SqlDBType,Direction,Size,Value,SourceColumn和SourceVersion等。个中ParameterName,SqlDBType,Direction,Size等属性是用于婚配存储过程当中界说的参数的。好比上面界说的SqlParameter工具就是用来婚配后面界说的up_UpdatePublisherInfo存储过程当中的“@pub_id”参数的。<Pstyle="TEXT-INDENT:2em">SqlParameterupdParam=newSqlParameter("@pub_id",SqlDbType.Char,4);<Pstyle="TEXT-INDENT:2em">在下面的界说中,固然Direction属性没有明白地给出,可是它的默许值为Input,以是也就满意了我们的必要。而假如一个SqlParameter工具的Direction属性为InputOutput或Output或ReturnValue,那末其Direction属性就必需明白地申明了,好比上面的代码就明白地声了然一个SqlParameter工具的Direction属性为Output。<Pstyle="TEXT-INDENT:2em">oParam.Direction=ParameterDirection.Output;<Pstyle="TEXT-INDENT:2em">个中的SourceColumn属性是用于婚配一个DataTable工具中的DataColumn工具的,这类婚配能在挪用Update()办法更新DataTable工具时隐式地导进所需的SqlParameter工具。假如在界说时没有声明该属性,那末你必需在代码中显式地申明SqlParameter工具的SourceColumn属性。<Pstyle="TEXT-INDENT:2em">个中的SourceVersion属性的默许值是DataRow工具响应字段中确当前值,也就是要更新到数据库中的值。固然,SourceVersion属性也能够指向DataRow工具响应字段中的原始值,也即从数据库中猎取的初始值。在数据库事件处置体系中,数据的同步性成绩十分主要,上面我们来创建一个能检测数据同步性的存储历程。<Pstyle="TEXT-INDENT:2em">
  1. CREATEPROCEDUREdbo.up_UpdatePublisherName(@pub_idchar(4),@pub_namevarchar(40),@Original_pub_namevarchar(40))ASifexists(selectpub_id frompublisherswhere(pub_id=@pub_id)AND(pub_name=@Original_pub_name))Begin UPDATEpublishersSETpub_name=@pub_name WHERE(pub_id=@pub_id)EndRETURN
复制代码
<Pstyle="TEXT-INDENT:2em">接着,我们在下面的使用程序中挪用该存储历程以更新刊行商的称号。起首,在原有使用程序的基本上完美其营业逻辑类-Publishers类:<Pstyle="TEXT-INDENT:2em">1.增加一个新的SqlCommand工具,该工具能作为SqlDataAdapter工具的UpdateCommand属性被利用:<Pstyle="TEXT-INDENT:2em">privateSqlCommandcmdUpdPubs;<Pstyle="TEXT-INDENT:2em">2.更新该类的机关函数Publishers()函数,增加以下内容:<Pstyle="TEXT-INDENT:2em">
  1. //创立另外一个SqlCommand工具,该工具援用更新刊行商称号的存储历程cmdUpdPubs=newSqlCommand();cmdUpdPubs.Connection=cnPubs;cmdUpdPubs.CommandType=CommandType.StoredProcedure;cmdUpdPubs.CommandText="up_UpdatePublisherName";//为下面的SqlCommand工具增加需要的参数cmdUpdPubs.Parameters.Add("@pub_id",SqlDbType.Char,4,"pub_id");cmdUpdPubs.Parameters.Add("@pub_name",SqlDbType.VarChar,40,"pub_name");SqlParameterupdParam=newSqlParameter("@Original_pub_name",SqlDbType.VarChar,40,"pub_name");updParam.SourceVersion=DataRowVersion.Original;cmdUpdPubs.Parameters.Add(updParam);3.指定SqlDataAdapter工具的UpdateCommand属性为下面界说的SqlCommand工具:daPubs.UpdateCommand=cmdUpdPubs;4.增加办法UpdatePublisherName():publicvoidUpdatePublisherName(DataSetdsChanges){//更新一切修改daPubs.Update(dsChanges);}
复制代码
<Pstyle="TEXT-INDENT:2em">使用程序的营业逻辑类完美以后,在主窗体上增加一个名为“更新数据集”的按钮,并增加该按钮的事务呼应函数以下:<Pstyle="TEXT-INDENT:2em">
  1. privatevoidbutton1_Click(objectsender,System.EventArgse){if(ds.HasChanges()){pubs.UpdatePublisherName(ds.GetChanges());ds.Clear();ds=pubs.GetPublisherInfo();}}
复制代码
<Pstyle="TEXT-INDENT:2em">到此为止,使用程序的营业逻辑类和主窗体类都已更新终了,如今的使用程序能依据用户的改用更新数据库中的相干内容了。你在更新了数据后还能够翻开SQLServer中的响应表并考证数占有没有更新乐成。<Pstyle="TEXT-INDENT:2em">七.总结:本文向人人先容了存储历程的基础常识和在.NET数据库使用程序中怎样分离SqlDataAdapter工具、DataSet工具等构建数据驱动的使用程序。在本文中,我们使用到了两类存储历程:一类为复杂的不带参数的存储历程,其使用办法绝对简单;另外一类为带有参数的存储历程,在挪用该类存储历程时还得使用到SqlParameter工具。同时,我们不难发明将数据更新营业逻辑封装在存储过程当中是一种很好的计划办法,它能进步使用程序的可办理性、可扩大性和数据库的平安性。相似的,拔出数据和删除数据的营业逻辑也能够封装在存储过程当中并以类似的办法在使用程序中被使用。最初,但愿本文对人人有很多匡助。
你觉得数据库怎么样?
活着的死人 该用户已被删除
沙发
发表于 2015-1-19 05:12:56 | 只看该作者
目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案.
变相怪杰 该用户已被删除
板凳
发表于 2015-1-24 06:02:53 | 只看该作者
业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。
小妖女 该用户已被删除
地板
发表于 2015-1-31 21:24:17 | 只看该作者
现在的ASP.net分为两个版本:1.1和2.0Asp.net1.1用VS2003(visualstudio2003)编程。Asp.net2.0用VS2005(visualstudio2005)编程。现在一般开发用的是VS2003。
再现理想 该用户已被删除
5#
发表于 2015-2-6 22:59:47 | 只看该作者
当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。
简单生活 该用户已被删除
6#
发表于 2015-2-19 01:08:43 | 只看该作者
业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。
飘飘悠悠 该用户已被删除
7#
发表于 2015-3-13 00:34:59 | 只看该作者
有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。
灵魂腐蚀 该用户已被删除
8#
发表于 2015-3-20 07:13:50 | 只看该作者
是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2025-1-11 06:22

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表