ADO.NET数据库访问

ADO.NET数据库访问

 

 

ADO.NET是一组用于和数据源进行交互的面向对象类库。通常情况下,数据源是数据库,但它同样也能够是文本文件、Excel表格或者XML文件。

ADO.NET允许和不同类型的数据源以及数据库进行交互。然而并没有与此相关的一系列类来完成这样的工作。因为不同的数据源采用不同的协议,所以对于不同的数据源必须采用相应的协议。一些老式的数据源使用ODBC协议,许多新的数据源使用OLEDB协议,并且现在还不断出现更多的数据源,这些数据源都可以通过.NET的ADO.NET类库来进行连接。

ADO.NET提供与数据源进行交互的相关的公共方法,但是对于不同的数据源采用一组不同的类库。这些类库称为Data Providers,并且通常是以与之交互的协议和数据源的类型来命名的。

一、ADO.NET - 简介

  ADO.NET可让开发人员以一致的方式存取资料来源(例如 SQL Server 与XML),以及透过 OLE DB 和 ODBC 所公开的资料来源。资料共用的消费者应用程序可使用ADO.NET 来连接至这些资料来源,并且撷取、处理及更新其中所含的资料。

  ADO.NET可将资料管理的资料存取分成不连续的元件,这些元件可分开使用,也可串联使用ADO.NET也包含 .NET Framework 资料提供者,以用于连接资料库、执行命令和撷取结果。这些结果会直接处理、放入ADO.NET DataSet 物件中以便利用机器操作 (Ad Hoc)的方式公开给使用者、与多个来源的资料结合,或在各层之间进行传递。DataSet 物件也可以与.NET Framework 资料提供者分开使用,以便管理应用程序本机的资料或来自 XML 的资料。

  ADO.NET类别 (Class) 位于 System.Data.dll 中,而且会与 System.Xml.dll 中的XML 类别整合。

  ADO.NET可为撰写 Managed 程式码的开发人员提供类似于 ActiveX Data Objects (ADO)提供给原生元件物件模型 ( Component Object Model,COM)开发人员的功能。建议使用ADO.NET而非ADO来存取.NET 应用程序中的资料。

  ADO .NET会提供最直接的方法,让开发人员在 .NET Framework 中进行资料存取。 
   

二、ADO.NET - 作用

  它提供了平台互用性和可伸缩的数据访问,ADO .NET增强了对非连接编程模式的支持,并支持RICH XML。由于传送的数据都是XML格式的,因此任何能够读取XML格式的 应用程序都可以进行数据处理。事实上,接受数据的组件不一定要是ADO .NET组件,它可以是基于一个 Microsoft Visual Studio的解决方案,也可以是任何运行在其它平台上的任何应用程序。

  ADO.NET是一组用于和数据源进行交互的面向对象类库。通常情况下, 数据源是数据库,但它同样也能够是文本文件、Excel表格或者XML文件。

  ADO.NET允许和不同类型的数据源以及数据库进行交互。然而并没有与此相关的一系列类来完成这样的工作。因为不同的数据源采用不同的协议,所以对于不同的数据源必须采用相应的协议。一些老式的数据源使用ODBC协议,许多新的数据源使用OleDb协议,并且现在还不断出现更多的数据源,这些数据源都可以通过NET的ADO .NET类库来进行连接。

  ADO.NET提供与数据源进行交互的相关的公共方法,但是对于不同的数据源采用一组不同的类库。这些类库称为Data Providers,并且通常是以与之交互的协议和数据源的类型来命名的。

ADO.NET是与数据源交互的.NET技术。有许多的Data Providers,它将允许与不同的数据源交流――取决于它们所使用的 协议或者数据库。然而无论使用什么样的Data Provider,开发人员将使用相似的 对象与数据源进行交互。SqlConnection对象管理与数据源的连接。SqlCommand对象允许开发人员与数据源交流并发送命令给它。为了对进行快速的只“向前”地读取数据,使用SqlDataReader。如果想使用断开数据,使用DataSet并实现能进行读取或者写入数据源的SqlDataAdapter。

三、ADO.NET - 类库

和数据库交互,必须连接它。连接帮助指明 数据库服务器、数据库名字、用户名、密码,和连接数据库所需要的其它参数。 Connection对象会被Command对象使用,这样就能够知道是在哪个数据源上面执行命令。

与数据库交互的过程意味着必须指明想要执行的操作。这是依靠Command对象执行的。开发人员使用Command对象来发送SQL语句给数据库。Command对象使用Connection对象来指出与哪个数据源进行连接。开发人员能够单独使用Command对象来直接执行命令,或者将一个Command对象的引用传递给DataAdapter,它保存了一组能够操作下面描述的一组数据的命令。

1.Command对象

  成功与数据建立连接后,就可以用Command对象来执行查询、修改、插入、删除等命令;Command对象常用的方法有ExecuteReader()方法、ExecuteScalar()方法和ExecuteNonQuery()方法;插入数据可用ExecuteNonQuery()方法来执行插入命令。

2.DataReader类

许多数据操作要求开发人员只是读取一串数据。DataReader对象允许开发人员获得从Command对象的SELECT语句得到的结果。考虑性能的因素,从DataReader返回的数据都是快速的且只是“向前”的 数据流。这意味着开发人员只能按照一定的顺序从数据流中取出数据。这对于速度来说是有好处的,但是如果开发人员需要操作数据,更好的办法是使用DataSet。

3.DataSet对象

  DataSet对象是数据在内存中的表示形式。它包括多个DataTable对象,而DataTable包含列和行,就象一个普通的数据库中的表。开发人员甚至能够定义表之间的关系来创建主从关系(parent-child relationships)。DataSet是在特定的场景下使用――帮助管理内存中的数据并支持对数据的断开操作的。DataSet是被所有Data Providers使用的对象,因此它并不像Data Provider一样需要特别的前缀。

4.DataAdapter类

  某些时候开发人员使用的数据主要是只读的,并且开发人员很少需要将其改变至底层的数据源。同样一些情况要求在内存中缓存数据,以此来减少并不改变的数据被数据库调用的次数。DataAdapter通过断开模型来帮助开发人员方便的完成对以上情况的处理。当在一单批次的对数据库的读写操作的持续的改变返回至数据库的时候,DataAdapter 填充(fill)DataSet对象。DataAadapter包含对连接对象以及当对数据库进行读取或者写入的时候自动的打开或者关闭连接的引用。另外,DataAdapter包含对数据的SELECT、INSERT、UPDATE和DELETE操作的Command对象引用。开发人员将为DataSet中的每一个Table都定义DataAadapter,它将为开发人员照顾所有与数据库的连接。所以开发人员将做的工作是告诉DataAdapter什么时候装载或者写入到数据库。

5.DataTable类

  DataTable 是一个数据网格控件。它可以被应用在 VB 和 ASP 上。它无须代码就可以简单的绑定数据库。它具有 微软风格的用户界面。

  DataTable的实例化以及添加列:

  DataTable dt = newDataTable();

  dt.Columns.Add("ID");

  dt.Columns.Add("Name");

  DataRow dr =dt.NewRow();

  object[] objs = { 1,"Name" };

  dr.ItemArray = objs;

  dt.Rows.Add(dr);

  this.dataGridView1.DataSource= dt;

 

四、数据访问过程

1.连接数据库:

2.发出SQL语句,提取数据库数据

3.返回提取的数据记录

五、Conncetion对象

Connection对象负责连接数据库,提供所访问数据源的类型、所在位置及名称等信息。

1.连接类与命名空间


2.创建Connection对象

1.引入命名空间

   

2.创建Connection对象


3.连接字符串

  1.SqlConnection

 

  2.OlEDbConnection

        

4.常用方法

     

六、Command对象

Command对象用来向数据库发出各种SQL命令。

1.创建Command对象

   Dim对象名 As New SqlCommand(SQL字符串,Connection对象)

2.常用方法

     

七、DataAdapter对象

DataAdapter对象又称为“数据适配器”,主要是在数据库与DataSet对象之间传递数据。

1.创建DataAdapter对象

   Dim对象名 As New SqlDataAdapter | OleDbDataAdapter

2.主要方法

   

DataAdapter 对象主要用来把数据源的数据填充到DataSet中,以及把DataSet里的数据更新到数据库,同样有SqlDataAdapter和 OleDbAdapter两种对象。它的常用方法有构造函数、填充或刷新DataSet的方法、将DataSet中的数据更新到数据库里的方法和释放资源的方法。
1. 构造函数
不同类型的Provider使用不同的构造函数来完成DataAdapter对象的构造。对于SqlDataAdapter类,其构造函数说明如表所示。
表 SqlDataAdapter类构造函数说明
函 数 定 义 参 数 说 明 函 数 说 明
SqlDataAdapter()
不带参数
创建SqlDataAdapter对象
SqlDataAdapter(
SqlCommand selectCommand)
selectCommand:指定新创建对象的SelectCommand属性
创建SqlDataAdapter对象。用参数selectCommand设置其Select Com- mand属性
SqlDataAdapter(string
selectCommandText,SqlConnection selectConnection)
selectCommandText:指定新创建对象的SelectCommand属性值
selectConnection:指定连接对象
创建SqlDataAdapter对象。用参数selectCommandText设置其Select Command属性值,并设置其连接对象是selectConnection
SqlDataAdapter(string
selectCommandText,String selectConnectionString)
selectCommandText:指定新创建对象的SelectCommand属性值
selectConnectionString:指定新创建对象的连接字符串
创建SqlDataAdapter对象。将参数selectCommandText设置为Select Command属性值,其连接字符串是selectConnectionString
OleDbDataAdapter的构造函数类似SqlDataAdapter的构造函数,如下表所述。
表 OleDbDataAdapter类构造函数说明
函 数 定 义 参 数 说 明 函 数 说 明
OleDbDataAdapter()
不带参数
创建OleDbDataAdapter对象
OleDbDataAdapter(
OleDbCommand selectCommand)
selectCommand:指定新创建对象的SelectCommand属性
创建OleDbDataAdapter对象。用参数selectCommand设置其SelectCommand属性
OleDbDataAdapter(string
selectCommandText, OleDbConnection selectConnection)
selectCommandText:指定新创建对象的SelectCommand属性值
selectConnection:指定连接对象
创建SqlDataAdapter对象。用参数selectCommandText设置其SelectCommand属性值,并设置其连接对象是selectConnection
OleDbDataAdapter(string
selectCommandText,String selectConnectionString)
selectCommandText:指定新创建对象的SelectCommand属性值
selectConnectionString:指定新创建对象的连接字符串
创建OleDbDataAdapter对象。将参数selectCommandText设置为SelectCommand 属性值,其连接字符串是selectConnectionString
2. Fill类方法
当调用 Fill 方法时,它将向数据存储区传输一条 SQL SELECT 语句。该方法主要用来填充或刷新DataSet,返回值是影响DataSet的行数。该方法的常用定义如表所示。
表  DataAdapter类的Fill方法说明
函 数 定 义 参 数 说 明 函 数 说 明
int Fill (DataSet dataset)
dataset:需要更新的DataSet
根据匹配的数据源,添加或更新参数所指定的DataSet,返回值是影响的行数
int Fill (DataSet 
dataset,string srcTable)
dataset:需要更新的DataSet
srcTable:填充DataSet的dataTable名
根据dataTable名填充DataSet
3. int Update(DataSet dataSet)方法
当程序调用 Update 方法时,DataAdapter将检查参数DataSet每一行的RowState属性,根据RowState属性来检查DataSet里的每行是否改变和改变的类型,并依次执行所需的INSERT、UPDATE或DELETE 语句,将改变提交到数据库中。这个方法返回影响DataSet的行数。更准确地说,Update 方法会将更改解析回数据源,但自上次填充 DataSet 以来,其他客户端可能已修改了数据源中的数据。若要使用当前数据刷新 DataSet,应使用 DataAdapter 和 Fill 方法。新行将添加到该表中,更新的信息将并入现有行。Fill 方法通过检查 DataSet 中行的主键值及 SelectCommand 返回的行来确定是要添加一个新行还是更新现有行。如果 Fill 方法发现 DataSet 中某行的主键值与 SelectCommand 返回结果中某行的主键值相匹配,则它将用 SelectCommand 返回的行中的信息更新现有行,并将现有行的 RowState 设置为 Unchanged。如果 SelectCommand 返回的行所具有的主键值与 DataSet 中行的任何主键值都不匹配,则 Fill 方法将添加 RowState 为 Unchanged 的新行。
3  DataAdapter对象代码示例
下面的代码将说明如何利用DataAdapter对象填充DataSet对象。
private static string strConnect = "data source=localhost; uid=sa;pwd=aspnet;database=LOGINDB"
string sqlStr =" Select * from USER";
//利用构造函数,创建DataAdapter
SqlDataAdapter da = new SqlDataAdapter(sqlStr,strConnect);
//创建DataSet
DataSet ds = new DataSet();
//填充,第一个参数是要填充的dataset对象,第二个参数是填充dataset的datatable
Da.Fill(ds, "USER");
上述代码使用DataApater对象填充DataSet对象的步骤如下。
(1) 根据连接字符串和SQL语句,创建一个SqlDataAdapter对象。这里,虽然没有出现Connection和Command对象的控制语句,但是 SqlDataAdapter对象会在创建的时候,自动构造对应的SqlConnection和SqlCommand对象,同时根据连接字符串自动初始化连接。要注意的是,此时SqlConnection和SqlCommand对象都处于关闭状态。
(2) 创建DataSet对象,该对象需要用DataAdapter填充。
(3) 调用DataAdapter的Fill方法,通过DataTable填充DataSet对象。由于跟随DataAdapter对象创建的Command里的SQL语句是访问数据库里的USER表,所以在调用Fill方法的时候,在打开对应的SqlConnection和SqlCommand对象后,会用 USER表的数据填充创建一个名为USER的DataTable对象,再用该DataTable填充到DataSet中。
下面的代码演示了如何使用DataAdapter对象将DataSet中的数据更新到数据库。
private static string strConnect = "data source=localhost; uid=sa;pwd=aspnet;database=LOGINDB"
string sqlStr = "Select * from USER";
//利用构造函数,创建DataAdapter
SqlDataAdapter da = new SqlDataAdapter(sqlStr,strConnect);
//创建DataSet
DataSet ds = new DataSet();
//填充,第一个参数是要填充的dataset对象,第二个参数是填充dataset的datatable
Da.Fill(ds, "USER");
//以下代码将更新DataSet里的数据
//在DataSet里的名为"USER"的DataTable里添加一个用于描述行记录的DataRow对象
DataRow dr = ds.Tables["USER"].NewRow();
//通过DataRow对象添加一条记录
dr["USERID"] = "ID2";
dr["USERNAME"] =  "TOM";
ds.Table["USER"].Rows.Add(dr);
//更新到数据库里
SqlCommandBuilder scb = new SqlCommandBuilder(da);
da.update(ds, "USER");
在上述代码里,首先使用DataAdapter填充DataSet对象,然后通过DataRow对象,向 DataSet添加一条记录,最后使用DataSet的update方法将添加的记录提交到数据库中。执行完update语句,数据库USER中就多了一条USERID是ID2、USERNAME是TOM的记录。
此外,上述代码出现的SqlCommandBuilder对象用来对数据表进行操作。用了这个对象,就不必再繁琐地使用DataAdapter的UpdataCommand属性来执行更新操作。

八、DataSet对象

DataSet对象是内存中的数据缓存,专门用来从数据源中读出数据

1.创建DataSet对象

    Dim对象名 As New DataSet

2.常用方法

   

九、DataReader对象

  

 

以上是我对“ADO.NET数据库访问”的简单理解,如有出入,还请见谅!!!

评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值