|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
2003年中微软发布最新版本的ASP.netWebMatrix,对于我们喜欢用Asp.net来编程的朋友实在是个好消息,我也实实在在的将Asp.net更深入的研究了一下,以方便我以后更好的运用它,同时我也讲讲使用它的感受。会见|数据|系统ADO.NET引进的次要变更之一是用DataTable、DataSet、DataAdapter和DataReader工具的组合代替了ADORecordset工具。DataTable暗示单个表中行的汇合,在这一方面相似于Recordset。DataSet暗示DataTable工具的汇合,同时包含将各类表绑定在一同的干系和束缚。实践上,DataSet是带有内置XML撑持的、内存中的干系布局。
DataSet的次要特征之一是它不懂得大概用来添补它的基本数据源。它是一个不一连的、自力的实体,用于暗示数据汇合,而且能够经由过程多层使用程序的分歧层在组件之间传送。它还能够作为XML数据流举行序列化,这使其十分合适于在分歧品种的平台之间举行数据传输。ADO.NET利用DataAdapter工具将数据传送到DataSet和基本数据源,大概从数据源传出。DataAdapter工具还供应之前与Recordset联系关系的加强的批量更新功效。
ADO.NET依附于.NET数据供应程序的服务。这些供应程序供应对基本数据源的会见,而且包含四个次要工具(Connection、Command、DataReader和DataAdapter)。
今朝,ADO.NET随附了两类供应程序:Bridge供应程序和Native供应程序。经由过程Bridge供应程序(如那些为OLEDB和ODBC供应的供应程序),可使用为之前的数据会见手艺计划的数据库。Native供应程序(如SQLServer和Oracle供应程序)一般可以供应功能方面的改良,部分缘故原由在于少了一个笼统层。
定名空间构造布局
与各个.NET数据供应程序相干联的范例(类、布局、列举等)位于其各自的定名空间中:
•System.Data.SqlClient。包括SQLServer.NET数据供应程序范例。
•System.Data.OracleClient。包括Oracle.NET数据供应程序。
•System.Data.OleDb。包括OLEDB.NET数据供应程序范例。
•System.Data.Odbc。包括ODBC.NET数据供应程序范例。
•System.Data。包括自力于供应程序的范例,如DataSet和DataTable。
在各自的联系关系定名空间内,每一个供应程序都供应了对Connection、Command、DataReader和DataAdapter工具的完成。SqlClient完成的前缀为“Sql”,而OleDb完成的前缀为“OleDb”。比方,Connection工具的SqlClient完成是SqlConnection,而OleDb完成则为OleDbConnection。一样,DataAdapter工具的两个完成分离为SqlDataAdapter和OleDbDataAdapter。
存储历程与间接SQL
本文档中显现的年夜多半代码片断利用SqlCommand工具来挪用存储历程,以实行数据库操纵。在某些情形下,您将不会看到SqlCommand工具,由于存储历程名被间接传送给SqlDataAdapter工具。在外部,这仍旧会招致创立SqlCommand工具。
您应当利用存储历程而不是嵌进的SQL语句,缘故原由以下:
•存储历程一般能够改良功能,由于数据库可以优化存储历程利用的数据会见企图,而且可以缓存该企图以供未来重用。
•能够在数据库内分离设置各个存储历程的平安回护。客户端不用对基本表具有会见权限,就能够取得实行存储历程的权限。
•存储历程能够简化保护事情,由于修正存储历程一般要比变动已部署组件中的硬编码SQL语句简单。
•存储历程为基本数据库架构增添了分外的笼统级别。存储历程的客户端与存储历程的完成细节是相互断绝的,与基本架构也是相互断绝的。
•存储历程能够削减收集流量,由于能够批量实行SQL语句,而不是从客户端发送多个哀求。
SQLServer联机文档激烈倡议您不要利用“sp_”作为称号前缀来创立任何存储历程,由于此类称号已被指定给体系存储历程。SQLServer一直按以下按次来查找以sp_开首的存储历程:
1.
在主数据库中查找存储历程。
2.
基于所供应的任何限制符(数据库名或一切者)来查找存储历程。
3.
利用dbo作为一切者来查找存储历程(假如未指定一切者)。
属性与机关函数参数
能够经由过程机关函数参数来设置ADO.NET工具的特定属性值,也能够间接设置属性值。比方,上面的代码片断在功效上是等效的。- //UseconstructorargumentstoconfigurecommandobjectSqlCommandcmd=newSqlCommand("SELECT*FROMPRODUCTS",conn);//Theabovelineisfunctionallyequivalenttothefollowing//threelineswhichsetpropertiesexplicitlysqlCommandcmd=newSqlCommand();cmd.Connection=conn;cmd.CommandText="SELECT*FROMPRODUCTS";
复制代码 从功能角度看,这两种办法之间的差别是微乎其微的,由于针对.NET工具设置和猎取属性要比针对COM工具实行相似操纵更加高效。
选择哪一种办法取决于团体喜欢和编码作风。不外,对属性举行明白设置的确可以使代码更容易了解(特别是当您不熟习ADO.NET工具模子时)和调试。
办理数据库毗连
数据库毗连代表一种关头的、高贵的和无限的资本,特别是在多层Web使用程序中。准确地办理毗连是非常需要的,由于您接纳的办法大概明显影呼应用程序的整体可伸缩性。同时,还要仔细思索在那边存储毗连字符串。必要利用可设置的且平安的地位。
在办理数据库毗连和毗连字符串时,应当勉力做到:
•经由过程在多个客户端中多路复用数据库毗连池,匡助完成使用程序的可伸缩性。
•接纳可设置的、高功能的毗连池战略。
•在会见SQL?Server时利用Windows身份考证。
•在两头层制止摹拟。
•平安地存储毗连字符串。
•只管晚地翻开数据库毗连,只管早地将其封闭。
本节会商毗连池,而且匡助您选择得当的毗连池战略。本节还将思索应当怎样办理、存储和利用数据库毗连字符串。最初,本节将给出两种编码形式,可用来匡助确保毗连被牢靠地封闭,并被前往到毗连池。
SQLServer.NET数据供应程序的池机制
假如您利用的是SQLServer.NET数据供应程序,请利用该供应程序供应的毗连池撑持。这是一种由该供应程序在外部完成的撑持事件处置而且十分高效的机制,它存在于托管代码中。池是以每一个使用程序的域为基本创立的,而且在使用程序域卸载之前不会烧毁。
能够通明地利用这类情势的毗连池,但应当晓得池的办理体例和可用来微调毗连池的各类设置选项。
在很多情形下,关于您的使用程序而言,SQLServer.NET数据供应程序的默许毗连池设置大概已充足了。在开辟和测试基于.NET的使用程序的过程当中,倡议您对计划通讯形式举行摹拟,以断定是不是必要修正毗连池巨细。
必要天生可伸缩的高功能使用程序的开辟职员应当最年夜限制地削减利用毗连的工夫,只在检索或更新数据时才使毗连坚持翻开形态。毗连封闭时,将被前往到毗连池,并可供重用。在此情形下,到数据库的实践毗连不会被割断;不外,假如毗连池被禁用,则到数据库的实践毗连将被封闭。
开辟职员应当非常当心,不要依附渣滓接纳器来开释毗连,由于当援用分开感化局限时,毗连一定可以封闭。这是毗连泄露的一种罕见本源,当哀求新毗连时,这会招致毗连非常。
设置SQLServer.NET数据供应程序毗连池
可使用一组称号-值对(经由过程毗连字符串供应)来设置毗连池。比方,能够设置是不是启用毗连池(默许情形下启用)、池的最年夜容量和最小容量,和要翻开毗连的列队哀求能够堵塞的工夫长度。上面是一个示例毗连字符串,用于设置池的最年夜容量和最小容量。- "Server=(local);IntegratedSecurity=SSPI;Database=Northwind;MaxPoolSize=75;MinPoolSize=5"
复制代码 翻开毗连并创立池今后,会将多个毗连增加到池中,以便将毗连数目进步到所设置的最小数目。随后,能够持续向该池中增加毗连,直至到达所设置的最年夜池数目。当到达最年夜数目时,要翻开毗连的新哀求将列队守候一段可设置的工夫。
更多信息
当利用SQLServer.NET数据供应程序毗连池时,请注重以下几个方面:
•毗连是经由过程毗连字符串上的完整婚配算法举行池化的。池机制乃至对称号-值对之间的空格也敏感。比方,上面的两个毗连字符串将招致两个自力的池,由于第二个毗连字符串包括分外的空格字符。- SqlConnectionconn=newSqlConnection("IntegratedSecurity=SSPI;Database=Northwind");conn.Open();//PoolAiscreatedSqlConmectionconn=newSqlConnection("IntegratedSecurity=SSPI;Database=Northwind");conn.Open();//PoolBiscreated(extraspacesinstring)
复制代码 •毗连池被分别为多个事件专有池和一个与以后还没有在事件中挂号的毗连对应的池。关于与特定事件高低文联系关系的线程,会前往响应池(该池包括在该事件中挂号的毗连)的毗连。这就使得利用已挂号的毗连成为一个通明的历程。
OLEDB.NET数据供应程序的池机制
OLEDB.NET数据供应程序经由过程利用基本OLEDB资本池来池化毗连。有多个用于设置资本池的选择:
•可使用毗连字符串来设置、启用或禁用资本池。
•可使用注册表。
•能够用编程体例设置资本池。
为制止呈现与注册表相干的部署成绩,请不要利用注册表来设置OLEDB资本池。
监控毗连池
要对使用程序利用毗连池的情形举行监控,可使用SQLServer随附的事务探查器工具,大概利用MicrosoftWindows?2000操纵体系随附的功能监督器工具。
利用SQLServer事务探查器监控毗连池
1.
单击Start,指向Programs,指向MicrosoftSQLServer,然后单击Profiler以启动事务探查器。
2.
在File菜单上,指向New,然后单击Trace。
3.
供应毗连具体信息,然后单击OK。
4.
在TraceProperties对话框中,单击Events选项卡。
5.
在Selectedeventclasses列表中,确保AuditLogin和AuditLogout事务显现在SecurityAudit上面。要使跟踪变得更加明晰,请从该列表中删除一切其他事务。
6.
单击Run以启动跟踪。当毗连创建时,您将看到AuditLogin事务;当毗连封闭时,您将看到AuditLogout事务。
利用功能监督器监控毗连池
1.
单击Start,指向Programs,指向AdministrativeTools,然后单击Performance以启动功能监督器。
2.
右键单击图形背景,然后单击AddCounters。
3.
在Performanceobject下拉列表中,单击SQLServer:GeneralStatistics。
4.
在显现的列表中,单击UserConnections。
5.
单击Add,然后单击Close。
办理平安性
只管数据库毗连池进步了使用程序的整体可伸缩性,但这意味着您不再可以在数据库级别办理平安性。这是由于,要撑持毗连池,毗连字符串必需完整不异。假如您必要跟踪每一个用户的数据库操纵,请思索增加一个参数,以便可以传送用户标识并在数据库中手动纪录用户操纵。您必要将该参数增加到每一个操纵中。
利用Windows身份考证
在毗连到SQLServer时,应当利用Windows身份考证,由于它供应了很多优点:
1.
平安性更容易于办理,由于您利用单一(Windows)平安模子,而不是自力的SQLServer平安模子。
2.
可制止将用户名和暗码嵌进到毗连字符串中。
3.
不会以明文体例经由过程收集传送用户名和暗码。
4.
经由过程接纳暗码到期刻日、最小长度和在屡次有效登录哀求后锁定帐户,改良了登录平安性。
存储毗连字符串
要存储数据库毗连字符串,能够有多种选择,这些选择具有分歧级其余天真性和平安性。只管在源代码中对毗连字符串举行硬编码可供应最好功能,但文件体系缓存可确保在内部将该字符串存储到文件体系中所带来的功能下落是微乎其微的。几近在一切情形下,人们都首选内部毗连字符串所供应的分外的天真性(它撑持办理员设置)。
当您选择毗连字符串存储办法时,必要注重的两个最主要的事项是平安性和设置浅易性,然后紧随着的是功能。
能够选择以下地位来存储数据库毗连字符串:
•在使用程序设置文件中;比方,ASP.NETWeb使用程序的Web.config
•在通用数据链接(UDL)文件中(仅由OLEDB.NET数据供应程序撑持)
•在Windows注册表中
•在自界说文件中
•在COM+目次中,办法是利用构建字符串(仅合用于服务组件)
经由过程利用Windows身份考证来会见SQLServer,能够制止将用户名和暗码存储在毗连字符串中。假如您的平安请求必要接纳更严厉的措施,请思索以加密格局存储毗连字符串。
关于ASP.NETWeb使用程序而言,在Web.config文件内以加密格局存储毗连字符串,代表着一种平安的、可设置的办理计划。
注能够在毗连字符串中将PersistSecurityInfo定名值设置为false,以克制经由过程SqlConnection或OleDbConnection工具的ConnectionString属性前往对平安敏感的细节(如暗码)。
上面几大节会商了怎样利用各类选择来存储毗连字符串,并先容了各类办法的绝对长处和弱点。这些内容有助于您依据本人特定的使用程序计划做出明智的选择。
利用XML使用程序设置文件
可使用<appSettings>元素在使用程序设置文件的自界说设置节中存储数据库毗连字符串。该元素撑持恣意的密钥-值对,如以下代码片断所示:- <configuration><appSettings><addkey="DBConnStr"value="server=(local);IntegratedSecurity=SSPI;database=northwind"/></appSettings></configuration>
复制代码 注<appSettings>元素呈现在<configuration>元素上面,而且不是紧跟在<system.web>的前面。
长处
•易于部署。毗连字符串是经由过程按期.NETxcopy部署与设置文件一同部署的。
•易于以编程体例会见。经由过程ConfigurationSettings类的AppSettings属性,能够在运转时便利地读取已设置的数据库毗连字符串。
•撑持静态更新(仅限于ASP.NET)。假如办理员在Web.config文件中更新毗连字符串,当下一次会见该字符串时(关于无形态组件而言,这多是客户端下一次利用该组件举行数据会见哀求),所做变动将失效。
弱点
•平安性。只管ASP.NETInternet服务器使用程序编程接口(ISAPI)静态链接库(DLL)克制客户端间接会见带有.config文件扩大名的文件,而且可使用NTFS权限进一步限定会见,您大概仍旧但愿制止以明文情势在前端Web服务器上存储这些具体信息。为取得分外的平安性,请以加密格局在设置文件中存储毗连字符串。
可使用System.Configuration.ConfigurationSettings类的静态AppSettings属性来检索自界说使用程序设置。以下代码片断对此举行了申明,该代码片断接纳了后面例举的名为DBConnStr的自界说密钥:- usingSystem.Configuration;privatestringGetDBaseConnectionString(){returnConfigurationSettings.AppSettings["DBConnStr"];
复制代码 无论谁倒了对双方阵营的粉丝们也是有害无益。 |
|