C#编程之ADO.NET入门教程-了解.NET数据提供程序
小标 2019-04-08 来源 : 阅读 727 评论 0

摘要:本文主要向大家介绍了C#编程之ADO.NET入门教程-了解.NET数据提供程序,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。

本文主要向大家介绍了C#编程之ADO.NET入门教程-了解.NET数据提供程序,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。

C#编程之ADO.NET入门教程-了解.NET数据提供程序

1. 什么是.NET数据提供程序?

      .NET Framework数据提供程序用于连接数据库、执行命令和检索结果。<span id=""mt2"" class=""sentence"" data-source=""Those results are either processed directly, placed in a 这些结果将被直接处理,放置在 DataSet 中以便根据需要向用户公开、与多个源中的数据组合,或在层之间进行远程处理。.NET Framework 数据提供程序是轻量的,它在数据源和代码之间创建最小的分层,并在不降低功能性的情况下提高性能。

      下表列出了 .NET Framework 中所包含的数据提供程序。

.NET数据提供程序

说明

用于 SQL Server 的数据提供程序

提供对 Microsoft SQL Server 7.0 或更高版本中数据的访问。<span id=""mt9"" class=""sentence"" data-source=""Uses the 使用 System.Data.SqlClient 命名空间。

用于 OLE DB 的数据提供程序

提供对使用 OLE DB 公开的数据源中数据的访问。<span id=""mt12"" class=""sentence"" data-source=""Uses the 使用 System.Data.OleDb 命名空间。

用于 ODBC 的数据提供程序

提供对使用 ODBC 公开的数据源中数据的访问。<span id=""mt15"" class=""sentence"" data-source=""Uses the 使用 System.Data.Odbc 命名空间。

用于 Oracle 的数据提供程序

适用于 Oracle 数据源。<span id=""mt18"" class=""sentence"" data-source=""The .NET Framework Data Provider for Oracle supports Oracle client software version 8.1.7 and later, and uses the 用于 Oracle 的 .NET Framework 数据提供程序支持 Oracle 客户端软件 8.1.7 和更高版本,并使用 System.Data.OracleClient 命名空间。

EntityClient 提供程序

提供对实体数据模型 (EDM) 应用程序的数据访问。<span id=""mt21"" class=""sentence"" data-source=""Uses the 使用 System.Data.EntityClient 命名空间。

 

2. .NET数据提供程序的核心对象

      在上一篇文章中,我们知道Connection对象、Command对象、DataReader对象以及DataAdapter对象构成了.NET数据提供程序的骨架。这四个对象非常重要,在后续的文章中,我将详细的讲解。如果需要了解这些对象的作用,可以参考上一篇文章《你必须知道的ADO.NET(一) 初识ADO.NET》。

 

3. 其他重要的对象

      如果说上述四大对象构成了.NET数据提供程序的骨架,那么下面我要说的这些对象可以说是.NET数据提供程序的血肉了。这些对象虽然没有四大核心对象那么的光鲜耀眼,但却也是“八仙过海,各显神通”。

3.1 Parameter对象

      说对Parameter对象,也许大部分人会说:“哦,原来是它啊”。尽管大部分人已经很熟悉了,我还是要在这里唠叨几句。我需要强调是,这一系列的文章主要写给对ADO.NET还不熟悉,或者刚入门的读者,旨在讲解ADO.NET最最基础却又非常重要的内容。

      简单的讲,Parameter对象定义了命令和存储过程的输入、输出和返回值参数。哦!看起来,好像并不是那么强大,那么Parameter对象到底有什么本领呢?

先看这样一段代码,也许很多人曾经都写过,包括我自己:

strSQL = ""SELECT * FROM users WHERE (name = '"" + userName + ""') and (pw = '""+ passWord +""');""

只要懂一点SQL语法的童鞋都知道,这不就是一个简单的登陆查询验证代码吗?好,先别急,你知道的,说不定别人还不知道。

试想一下,如果用户(一般是那些技术高超,自称为“黑客”的高级用户)填入

userName = ""' OR '1'='1"";

passWord = ""' OR '1'='1"";

接下来,将见证奇迹的时刻:该用户竟然成功登陆网站了。哇!看起来这一切似乎多么的魔幻和神奇,其实我们稍作分析发现这也不过是一些雕虫小计。

我们将userName和passWord变量带入strSQL变量后,将得到这样的一条SQL语句:

strSQL = ""SELECT * FROM users WHERE (name = '' OR '1'='1') and (pw = '' OR '1'='1');""

也就是实际上运行的SQL命令会变成下面这样的

strSQL = ""SELECT * FROM users;""

到这一步,我想也不需要我多说了吧,你懂的!上面的情况,用专业术语来说就是一个简单的SQL注入(SQL injection)。记得上政治课的时候,我印象最深的一句话是,“万物都是矛盾统一的”。这句话经典而又真实,以至于时刻在我的脑海里浮现。有SQL注入的出现,因此就有参数化查询(Parameterized Query )的出现。

      参数化查询是指在设计与数据库连结并存取资料时,在需要填入数值或资料的地方,使用参数 (Parameter) 来给值,这个方法目前已被视为最有效可预防SQL注入(SQL Injection) 的攻击手法的防御方式。在使用参数化查询的情况下,数据库服务器不会将参数的内容视为SQL指令的一部份来处理,而是在数据库完成 SQL 指令的编译后,才套用参数执行,因此就算参数中含有具破坏性的指令,也不会被数据库所执行。说了这么多,无非是想说明Parameter对象的重要性。黄婆卖瓜,也得自卖自夸一下吧!Parameter对象有两个非常重要的属性:DBType和Value。DBType用来设置或获取参数的类型,Value则用来设置或获取参数的值。

      好了,现在我们用Parameter对象来改写简单的登陆验证代码:

C#编程之ADO.NET入门教程-了解.NET数据提供程序

1 strSQL = ""SELECT * FROM users WHERE Name = @Name and Password = @Password"";
2 SqlParamter[] paras = new SqlParamter[]{//参数数组
3     new SqlParamter(""@Name"",SqlDBType.Varchar,50)
4      new SqlParamter(""@Password"",SqlDBType.Varchar,50)};
5 paras[0].value = userName;//绑定用户名
6 paras[1].value = password;//绑定用户密码

C#编程之ADO.NET入门教程-了解.NET数据提供程序

 

3.2 两大得力助手:ConnectionStringBuilder和CommandBuilder

  • ConnectionStringBuilder:它提供一种用于创建和管理由 Connection 对象使用的连接字符串的内容的简单方法。 <span id=""mt43"" class=""sentence"" data-source=""The base class for all 所有 ConnectionStringBuilder 对象的基类均为 DbConnectionStringBuilder 类。

  • CommandBuilder :它自动生成 DataAdapter 的命令属性或从存储过程中派生参数信息,并填充 Command 对象的 Parameters 集合。 <span id=""mt41"" class=""sentence"" data-source=""The base class for all 所有 CommandBuilder 对象的基类均为 DbCommandBuilder 类。

 

4. 理解.NET数据提供程序

<span class=""sentence"" data-source=""The base class for all 4.1 用于 SQL Server 的 .NET Framework 数据提供程序 (SqlClient)

      用于 SQL Server 的 .NET Framework 数据提供程序 (SqlClient) 使用自己的协议与 SQL Server 进行通信。 它是轻量的且性能良好,因为它进行了优化,可直接访问 SQL Server,而无需添加 OLE DB 或开放式数据库连接 (ODBC) 层。 下图4.1.1将用于 SQL Server 的 .NET Framework 数据提供程序与用于 OLE DB 的 .NET Framework 数据提供程序进行对比。 用于 OLE DB 的 .NET Framework 数据提供程序通过 OLE DB 服务组件(它提供连接池和事务服务)和用于数据源的 OLE DB 访问接口与 OLE DB 数据源进行通信。

C#编程之ADO.NET入门教程-了解.NET数据提供程序

    图4.1.1  SQL Server 与 OLE DB .NET Framework 数据提供程序进行对比

      若要使用用于 SQL Server 的 .NET Framework 数据提供程序,您必须具有对 SQL Server 7.0 或更高版本的访问权限。 <span id=""mt59"" class=""sentence"" data-source=""The .NET Framework Data Provider for SQL Server classes are located in the 用于 SQL Server 类的 .NET Framework 数据提供程序位于 System.Data.SqlClient 命名空间中。 <span id=""mt60"" class=""sentence"" data-source=""For earlier versions of SQL Server, use the .NET Framework Data Provider for OLE DB with the SQL Server OLE DB provider 对于早期版本的 SQL Server,请将用于 OLE DB 的 .NET Framework 数据提供程序与 SQL Server OLE DB 访问接口 System.Data.OleDb 一起使用。

      用于 SQL Server 的 .NET Framework 数据提供程序支持本地事务和分布式事务。 <span id=""mt62"" class=""sentence"" data-source=""For distributed transactions, the .NET Framework Data Provider for SQL Server, by default, automatically enlists in a transaction and obtains transaction details from Windows Component Services or 对于分布式事务,默认情况下,用于 SQL Server 的 .NET Framework 数据提供程序会自动登记在事务中,并自动从 Windows 组件服务或 System.Transactions 获取事务详细信息。

<span id=""mt64"" class=""sentence"" data-source=""The following code example shows how to include the       如果你使用SQL Server数据提供程序需要引入:

using System.Data.SqlClient;

<span class=""sentence"" data-source=""The following code example shows how to include the 4.2 用于 OLE DB 的 .NET Framework 数据提供程序

      用于 OLE DB 的 .NET Framework 数据提供程序 (OleDb) 通过 COM 互操作使用本机 OLE DB 来启用数据访问。 用于 OLE DB 的 .NET Framework 数据提供程序支持本地事务和分布式事务。 对于分布式事务,默认情况下,用于 OLE DB 的 .NET Framework 数据提供程序会自动登记在事务中,并自动从 Windows 2000 组件服务获取事务详细信息。<span id=""mt88"" class=""sentence"" data-source="".NET Framework Data Provider for OLE DB classes are located in the 用于 OLE DB 类的 .NET Framework 数据提供程序位于 System.Data.OleDb 命名空间中。

<span class=""sentence"" data-source=""The following code example shows how to include the       如果你使用OLE DB数据提供程序需要引入:

using System.Data.OleDb;

<span class=""sentence"" data-source=""The following code example shows how to include the 4.3 用于 ODBC 的 .NET Framework 数据提供程序

<span class=""sentence"" data-source=""The following code example shows how to include the       用于 ODBC 的 .NET Framework 数据提供程序 (Odbc) 使用本机 ODBC 驱动程序管理器 (DM) 来启用数据访问。 ODBC 数据提供程序支持本地事务和分布式事务两者。 对于分布式事务,默认情况下,ODBC 数据提供程序会自动登记在事务中,并自动从 Windows 2000 组件服务获取事务详细信息。<span class=""sentence"" data-source=""The following code example shows how to include the <span id=""mt102"" class=""sentence"" data-source="".NET Framework Data Provider for ODBC classes are located in the 用于 ODBC 类的 .NET Framework 数据提供程序位于 System.Data.Odbc 命名空间中。

<span class=""sentence"" data-source=""The following code example shows how to include the <span class=""sentence"" data-source="".NET Framework Data Provider for ODBC classes are located in the      <span class=""sentence"" data-source=""The following code example shows how to include the <span class=""sentence"" data-source="".NET Framework Data Provider for ODBC classes are located in the 如果你使用ODBC数据提供程序需要引入:

using System.Data.Odbc;

<span class=""sentence"" data-source=""The following code example shows how to include the 4.4 用于 Oracle 的 .NET Framework 数据提供程序

       用于 Oracle 的 .NET Framework 数据提供程序 (OracleClient) 通过 Oracle 客户端连接软件启用对 Oracle 数据源的数据访问。 该数据提供程序支持 Oracle 客户端软件 8.1.7 版或更高版本。 该数据提供程序支持本地事务和分布式事务两者。

      用于 Oracle 的 .NET Framework 数据提供程序要求系统上安装有 Oracle 客户端软件(8.1.7 版或更高版本),才能连接到 Oracle 数据源。

<span id=""mt113"" class=""sentence"" data-source="".NET Framework Data Provider for Oracle classes are located in the       用于 Oracle 类的 .NET Framework 数据提供程序位于 System.Data.OracleClient 命名空间中,并包含在 System.Data.OracleClient.dll 程序集中。 <span id=""mt114"" class=""sentence"" data-source=""You must reference both the 当编译使用该数据提供程序的应用程序时,必须同时引用 System.Data.dllSystem.Data.OracleClient.dll

<span class=""sentence"" data-source=""You must reference both the       如果你使用Oracle数据提供程序需要引入:

1 using System.Data;
2 using System.Data.OracleClient;

 

5. 选择合适的 .NET 数据提供程序

      应用程序或者数据源不同,我们就需要选择不同的.NET数据提供程序。在此,微软官方已经给了我们很好的建议,如下表:

提供程序

说明

用于 SQL Server 的数据提供程序

建议用于使用 Microsoft SQL Server 7.0 或更高版本的中间层应用程序。

建议用于使用 Microsoft 数据库引擎 (MSDE) 或 SQL Server 7.0 或更高版本的单层应用程序。

建议将用于 SQL Server 的 OLE DB 访问接口 (SQLOLEDB) 与用于 OLE DB 的 .NET Framework 数据提供程序一起使用。

对于 SQL Server 6.5 和更新版本,您必须将用于 SQL Server 的 OLE DB 访问接口与用于 OLE DB 的 .NET Framework 数据提供程序一起使用。

用于 OLE DB 的数据提供程序

<span id=""mt128"" class=""sentence"" data-source=""Recommended for middle-tier applications that use SQL Server"

 

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C#.NET频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程