您好,欢迎访问三七文档
当前位置:首页 > 财经/贸易 > 资产评估/会计 > ADONET基础知识(二)
基础知识(二)我们知道ADO.NET的两大核心组件分别是DataProvider和DataSet。如果说DataSet是ADO.NET的心脏,那么DataProvider绝对是ADO.NET的左臂右膀。DataProvider提供了访问外部数据数据源的可能性,而且外部的数据源是多样的。本文将详细说明.NET数据提供程序的作用以及如何访问不同的数据源。1.什么是.NET数据提供程序?.NETFramework数据提供程序用于连接数据库、执行命令和检索结果。这些结果将被直接处理,放置在DataSet中以便根据需要向用户公开、与多个源中的数据组合,或在层之间进行远程处理。.NETFramework数据提供程序是轻量的,它在数据源和代码之间创建最小的分层,并在不降低功能性的情况下提高性能。下表列出了.NETFramework中所包含的数据提供程序。1.png(25.58KB,下载次数:0)下载附件保存到相册1分钟前上传2..NET数据提供程序的核心对象在上一篇文章中,我们知道Connection对象、Command对象、DataReader对象以及DataAdapter对象构成了.NET数据提供程序的骨架。这四个对象非常重要,在后续的文章中,我将详细的讲解。如果需要了解这些对象的作用,可以参考上一篇文章《你必须知道的(一)初识ADO.NET》。3.其他重要的对象如果说上述四大对象构成了.NET数据提供程序的骨架,那么下面我要说的这些对象可以说是.NET数据提供程序的血肉了。这些对象虽然没有四大核心对象那么的光鲜耀眼,但却也是“八仙过海,各显神通”。3.1Parameter对象说对Parameter对象,也许大部分人会说:“哦,原来是它啊”。尽管大部分人已经很熟悉了,我还是要在这里唠叨几句。我需要强调是,这一系列的文章主要写给对ADO.NET还不熟悉,或者刚入门的读者,旨在讲解ADO.NET最最基础却又非常重要的内容。简单的讲,Parameter对象定义了命令和存储过程的输入、输出和返回值参数。哦!看起来,好像并不是那么强大,那么Parameter对象到底有什么本领呢?先看这样一段代码,也许很多人曾经都写过,包括我自己:strSQL=SELECT*FROMusersWHERE(name='+userName+')and(pw='+passWord+');只要懂一点SQL语法的童鞋都知道,这不就是一个简单的登陆查询验证代码吗?好,先别急,你知道的,说不定别人还不知道。试想一下,如果用户(一般是那些技术高超,自称为“黑客”的高级用户)填入strSQL=SELECT*FROMusersWHERE(name='+userName+')and(pw='+passWord+');只要懂一点SQL语法的童鞋都知道,这不就是一个简单的登陆查询验证代码吗?好,先别急,你知道的,说不定别人还不知道。试想一下,如果用户(一般是那些技术高超,自称为“黑客”的高级用户)填入userName='OR'1'='1;与passWord='OR'1'='1;接下来,将见证奇迹的时刻:该用户竟然成功登陆网站了。哇!看起来这一切似乎多么的魔幻和神奇,其实我们稍作分析发现这也不过是一些雕虫小计。我们将userName和passWord变量带入strSQL变量后,将得到这样的一条SQL语句:strSQL=SELECT*FROMusersWHERE(name=''OR'1'='1')and(pw=''OR'1'='1');也就是实际上运行的SQL命令会变成下面这样的strSQL=SELECT*FROMusers;到这一步,我想也不需要我多说了吧,你懂的!上面的情况,用专业术语来说就是一个简单的SQL注入(SQLinjection)。记得上政治课的时候,我印象最深的一句话是,“万物都是矛盾统一的”。这句话经典而又真实,以至于时刻在我的脑海里浮现。有SQL注入的出现,因此就有参数化查询(ParameterizedQuery)的出现。参数化查询是指在设计与数据库连结并存取资料时,在需要填入数值或资料的地方,使用参数(Parameter)来给值,这个方法目前已被视为最有效可预防SQL注入(SQLInjection)的攻击手法的防御方式。在使用参数化查询的情况下,数据库服务器不会将参数的内容视为SQL指令的一部份来处理,而是在数据库完成SQL指令的编译后,才套用参数执行,因此就算参数中含有具破坏性的指令,也不会被数据库所执行。说了这么多,无非是想说明Parameter对象的重要性。黄婆卖瓜,也得自卖自夸一下吧!Parameter对象有两个非常重要的属性:DBType和Value。DBType用来设置或获取参数的类型,Value则用来设置或获取参数的值。好了,现在我们用Parameter对象来改写简单的登陆验证代码:1strSQL=SELECT*FROMusersWHEREName=@NameandPassword=@Password;2SqlParamter[]paras=newSqlParamter[]{//参数数组3newSqlParamter(@Name,SqlDBType.Varchar,50)4newSqlParamter(@Password,SqlDBType.Varchar,50)};5paras[0].value=userName;//绑定用户名6paras[1].value=password;//绑定用户密码3.2两大得力助手:ConnectionStringBuilder和CommandBuilderConnectionStringBuilder:它提供一种用于创建和管理由Connection对象使用的连接字符串的内容的简单方法。所有ConnectionStringBuilder对象的基类均为DbConnectionStringBuilder类。CommandBuilder:它自动生成DataAdapter的命令属性或从存储过程中派生参数信息,并填充Command对象的Parameters集合。所有CommandBuilder对象的基类均为DbCommandBuilder类。4.理解.NET数据提供程序4.1用于SQLServer的.NETFramework数据提供程序(SqlClient)用于SQLServer的.NETFramework数据提供程序(SqlClient)使用自己的协议与SQLServer进行通信。它是轻量的且性能良好,因为它进行了优化,可直接访问SQLServer,而无需添加OLEDB或开放式数据库连接(ODBC)层。下图4.1.1将用于SQLServer的.NETFramework数据提供程序与用于OLEDB的.NETFramework数据提供程序进行对比。用于OLEDB的.NETFramework数据提供程序通过OLEDB服务组件(它提供连接池和事务服务)和用于数据源的OLEDB访问接口与OLEDB数据源进行通信。若要使用用于SQLServer的.NETFramework数据提供程序,您必须具有对SQL或更高版本的访问权限。用于SQLServer类的.NETFramework数据提供程序位于System.Data.SqlClient命名空间中。对于早期版本的SQLServer,请将用于OLEDB的.NETFramework数据提供程序与SQLServerOLEDB访问接口System.Data.OleDb一起使用。用于SQLServer的.NETFramework数据提供程序支持本地事务和分布式事务。对于分布式事务,默认情况下,用于SQLServer的.NETFramework数据提供程序会自动登记在事务中,并自动从Windows组件服务或System.Transactions获取事务详细信息。如果你使用SQLServer数据提供程序需要引入:usingSystem.Data.SqlClient;4.2用于OLEDB的.NETFramework数据提供程序用于OLEDB的.NETFramework数据提供程序(OleDb)通过COM互操作使用本机OLEDB来启用数据访问。用于OLEDB的.NETFramework数据提供程序支持本地事务和分布式事务。对于分布式事务,默认情况下,用于OLEDB的.NETFramework数据提供程序会自动登记在事务中,并自动从Windows2000组件服务获取事务详细信息。用于OLEDB类的.NETFramework数据提供程序位于System.Data.OleDb命名空间中。如果你使用OLEDB数据提供程序需要引入:usingSystem.Data.OleDb;4.3用于ODBC的.NETFramework数据提供程序用于ODBC的.NETFramework数据提供程序(Odbc)使用本机ODBC驱动程序管理器(DM)来启用数据访问。ODBC数据提供程序支持本地事务和分布式事务两者。对于分布式事务,默认情况下,ODBC数据提供程序会自动登记在事务中,并自动从Windows2000组件服务获取事务详细信息。用于ODBC类的.NETFramework数据提供程序位于System.Data.Odbc命名空间中。如果你使用ODBC数据提供程序需要引入:usingSystem.Data.Odbc;4.4用于Oracle的.NETFramework数据提供程序用于Oracle的.NETFramework数据提供程序(OracleClient)通过Oracle客户端连接软件启用对Oracle数据源的数据访问。该数据提供程序支持Oracle客户端软件8.1.7版或更高版本。该数据提供程序支持本地事务和分布式事务两者。用于Oracle的.NETFramework数据提供程序要求系统上安装有Oracle客户端软件(8.1.7版或更高版本),才能连接到Oracle数据源。用于Oracle类的.NETFramework数据提供程序位于System.Data.OracleClient命名空间中,并包含在System.Data.OracleClient.dll程序集中。当编译使用该数据提供程序的应用程序时,必须同时引用System.Data.dll和System.Data.OracleClient.dll。如果你使用Oracle数据提供程序需要引入:选择合适的.NET数据提供程序应用程序或者数据源不同,我们就需要选择不同的.NET数据提供程序。在此,微软官方已经给了我们很好的建议,如下表:
本文标题:ADONET基础知识(二)
链接地址:https://www.777doc.com/doc-2900637 .html