`
guoyiqi
  • 浏览: 1001644 次
社区版块
存档分类
最新评论

使用SqlDataAdapter对象获取数据(转自:http://www.cnblogs.com/zyh-nhy/archive/2009/01/07/1371177.html)

 
阅读更多

一.SqlDataAdapter对象

1. SqlDataAdapter特性

SqlDataAdapter类用作ADO.NET对象模型中和数据连接部分和未连接部分之间的桥梁。SqlDataAdapter从数据库中获取数据,并将其存储在DataSet中。SqlDataAdapter也可能取得DataSet中的更新,并将它们提交给数据库。

SqlDataAdapter是为处理脱机数据而设计的,调用其Fill方法填充DataSet时甚至不需要与数据库的活动连接。即如果调用Fill方法时,SqlDataAdapter与数据库的连接不是打开时,SqlDataAdapter将打开数据库连接,查询数据库,提取查询结果,将查询结果填入DataSet,然后关闭也数据库的连接。

2. SqlDataAdapter的设置

SqlCommand属性

SqlDataAdapter将查询结果存储到DataSet中时,SqlDataAdapter使用SqlCommand和SqlConnection与数据库进行通信。SqlDataAdapter在内部使用SqlDataReader获取结果,并将信息存储到DataSet的新行。SqlCommand类的属性包括SelectCommand、InsertCommand、UpdateCommand、DeleteCommand分别对应数据库的查询、插入、更新和删除操作。

TabbleMappings集合

默认情况下,SqlDataAdapter假定SqlDataReader中的列与DataSet中的列匹配,但实际情况中往往期望DataSet的架构不同于数据库的架构,因此SqlDataAdapter提供了一种将查询结果映射到DataSet结果的机制:TableMappings集合。

SqlDataAdapter的TableMappings属性返回一个DataTableMappingsConnention对象,它包含DataTableMapping对象的集合。每个对象允许在数据库中的一个表(或视图或存储过程)与DataSet中相对应的DataTable的名称之间建立一种映射;TableMappings对象具有ColumnMappings属性,它返回DataColumnMappings对象组成的集合,每个DataColumnMappings对象对应数据库查询结果中的一列映射到DataSet中DataTable中的一列。示例代码如下:

Using System.Data.Common;

SqlDataAdapter da=new SqlDataAdapter();

//初始化DataAdapter

DataTableMapping tableMap;

tableMap=da.TableMappings.Add(“Table”,”Employees”);

tableMap.ColumnMappings.Add(“EmpID”,”EmployeeID”);

tableMap.ColumnMappings.Add(“LName”,”LastName”);

二.SqlDataAdapter的创建与使用

1. 创建SqlDataAdapter

New 关键字

New 关键字建立新的SqlDataAdapter对象后,再设置其SqlCommand属性

SqlDataAdapter da=new SqlDataAdapter();

da.SelectCommand=cmd;

SqlDataAdapter的构造函数

strSql是查询数符串;strConn是数据库连接字符串;cmd是SqlCommand对象;cn是SqlConnection对象。

SqlDataAdapter da=new SqlDataAdapter(strSql,strConn);

SqlDataAdapter da=new SqlDataAdapter(strSql,cn);

SqlDataAdapter da=new SqlDataAdapter(cmd);

2. 获取查询中的结果

使用Fill方法

调用SqlDataAdapter类的Fill方法会执行存储在SqlDataAdapter对象的SqlCommand属性中的查询,并将查询结果存储在DataSet中。示例代码如下:

SqlDataAdapter da=new SqlDataAdapter(strSql,strConn);

DataSet ds =new DataSet();

da.Fill(ds);

执行以上代码后,DataSet的实例对象ds中会创建一个新的DataTable,这个DataTable拥有strSql查询语句中所包括的字段,但DataTable对象的名称为默认的Table,而不是查询语句中所查询的表的名称。

使用重载的Fill方法

指定DataTable

da.Fill(DataSet,”MyTableName”)// SqlDataAdapter填充指定DataSet的特定表。

da.Fill(DataTable);// SqlDataAdapter填充已经创建的DataTable对象。

Fill方法分页显示

da.Fill(DataSet,intStartRecord,intNumRecord,”TableName”);//Fill方法可能很轻松的实现分页显示,但操作效率很低。

调用SqlDataAdapter对象Fill方法过程的数据库连接的打开与关闭

SqlDataAdapter的Fill方法调用前不需要有活动的SqlConnection对象,SqlDataAdapter会自己打开strConn语句中的数据库,获取查询结果后,关闭与数据库的连接。如果已经存在SqlConnection对象,无论是否已经打开,SqlDataAdapter执行完Fill方法后,均会将SqlConnection对象返回到原始状态。

当程序中的多个SqlDataAdapter对象使用都一个SqlConnection对象时,为避免多次打开与关闭SqlConnection对象,应该在调用SqlDataAdapter的Fill方法前调用SqlConnection的Open方法打开数据库的连接,待完成Fill调用后再调用SqlConnection的Close方法关闭数据库的连接。

DataSet中数据的更新

如果DataSet中的数据需要更新,在调用Fill方法之前应该先清除DataSet或DataTable中的数据,这样可以确保DataTable中不会出现重复的数据行,也不会出现数据库中已经不存在的数据行。

3. 将查询结果映射到DataSet

TableMappings映射

TabbleMappings集合控制SqlDataAdapter如何将DataSet映射到数据库。如果保持TabbleMappings集合为空,调用Fill方法,然后将DataSet作为参数,而不指定表名,SqlDataAdapter将假定您希望使用一个名为“Table”的DataTable来装载数据。

SqlDataAdapter.TableMappings.Add(“Table”,”Employees”)

此语句的作用是将DataSet中原来名字为“Table”的DataTable命名为“Employees”,DataSet填充数据时,按查询结果集的顺序依次填充DataSet中的Table、Table1、Table2……,所以给DataTable命名时需留意该DataTable是否为当前将要使用的对象。

TableMappings和ColumnMappings的AddRange方法

构造并赋值DataTableMapping、DataColumnMapping数组,再调用它们的AddRange方法将该集合整体添加到映射数组。

DataTableMapping tableMap;

tableMap=da.TableMapping.Add(“Table”,”Employees”);

DataColumnMapping[] columnMaps;

columnMaps=new DataColumnMapping[];

{new DataColumnMapping (“EmpID”,”EmployeeID”),

new DataColumnMapping (“LName”,”LastName”)

}

tableMap.ColumnMapping.AddRange(columnMaps);

MissingMappingAction属性

当SqlDataAdapter提取查询结果来填充DataSet时,它将检查TableMappings集合,如果存在结果集中列不在TableMappings集合时,它将查看MissingMappingAction属性的值来决定如何操作。

Passthrough 映射中没有出现的列仍然填充到DataSet,采用原结果集的名称;

Ignore 忽略映射中没有出现的列;

Error 在出现不匹配的情况下引发异常;

分享到:
评论

相关推荐

    C#使用SqlDataAdapter对象获取数据的方法

    本文实例讲述了C#使用SqlDataAdapter对象获取数据的方法。分享给大家供大家参考,具体如下: 一.SqlDataAdapter对象 1. SqlDataAdapter特性 SqlDataAdapter类用作ADO.NET对象模型中和数据连接部分和未连接部分之间...

    shujuku.zip_https//:shujuku.com

    在实际操作中,可能需要创建一个SqlConnection对象来建立与数据库的连接,使用SqlCommand对象来执行SQL命令,然后使用SqlDataAdapter填充一个DataTable对象。DataTable可以作为DataGridView的数据源,从而将数据库...

    数据库操作经典类+例子

    5. 数据适配器和数据集:对于返回多行数据的情况,`DataAccess.cs`可能使用`SqlDataAdapter`来填充`DataSet`或`DataTable`对象。适配器负责从数据库检索数据,填充数据集,然后可以将数据集反向写回数据库。 6. ...

    ASP.NET 类库

    5. **System.Data.Entity**: .NET Framework 3.5以上版本引入了Entity Framework,它是一个ORM(对象关系映射)工具,简化了数据库操作,使得开发者可以使用面向对象的方式处理数据。 6. **System.Web.Services**: ...

    SqlDataAdapter对象介绍.doc

    SqlDataAdapter对象是.NET Framework中的一个关键组件,它作为桥梁连接.NET应用程序和SQL Server数据库,允许数据在两者之间高效地传输。这个对象不仅用于从数据库检索数据,填充DataSet对象,还负责将DataSet中的...

    ADO.NET觀念探討

    4. **填充数据集**:使用`SqlDataAdapter`填充`DataSet`对象。 5. **数据绑定**:将`DataSet`中的数据绑定到控件上,如DataGridView。 6. **更新数据库**:使用`SqlDataAdapter`的`Update`方法将更改提交回数据库。 ...

    jquery ingrid示例代码(asp.net)

    这个例子中,我们展示了如何从SQL Server 2000的Customers表中获取数据,使用jQuery Ingrid呈现,以及如何添加Autocomplete功能来优化用户体验。这个组合为开发高效、用户友好的Web应用程序提供了强大支持。对于有...

    SqlDataAdapter.Update批量更新.txt

    在.NET Framework中,`SqlDataAdapter` 是一个非常重要的数据访问组件,它提供了从数据库检索数据并填充到内存中的`DataSet`或`DataTable`的能力,同时也支持将内存中的数据更改同步回数据库的功能。`SqlDataAdapter...

    Chapter01.zip

    对于更复杂的数据操作,如批量插入或更新,我们可以使用DataAdapter对象配合DataSet和DataTable。Adapter可以从数据库填充DataSet,或者将DataSet中的更改同步回数据库: ```csharp // 创建SqlDataAdapter对象 ...

    ADO.NET操作数据库

    使用`ExecuteReader`方法获取数据后,可以将其绑定到不同的UI控件上,如ListView或ComboBox。 ##### 4.1 绑定到ListView ```csharp // 使用ExecuteReader获取数据 while (dr.Read()) { ListViewItem lvi = new ...

    SqlDataAdapter使用示例.

    SqlCommand对象用于执行SQL查询,SqlDataAdapter则根据这个SqlCommand来获取数据。 接下来,使用SqlDataAdapter的Fill方法将数据库中的数据填充到DataSet中: ```csharp DataSet dataSet = new DataSet(); adapter....

    c# C/S通讯录 含.sql文件

    标题 "c# C/S通讯录 含.sql文件" 指的是一个使用C#编程语言开发的客户端/服务器(Client/Server,C/S)架构的通讯录应用。这个项目不仅包含应用程序本身,还附带了一个.sql文件,这通常用于数据库的创建和初始化。 ...

    SqlDataAdapter使用

    SqlDataAdapter是.NET Framework中的一个关键组件,主要用于在数据库和DataSet之间传输数据,它扮演着数据库连接和数据处理的桥梁角色。在本教程中,我们将深入探讨SqlDataAdapter的使用,包括其构造函数、主要方法...

    数据库操作宝典,适合新手使用!

    ### 数据库操作宝典:适合新手使用的SQL Server 2005与C#连接实践 在本篇文章中,我们将深入探讨一个针对初学者的数据库操作宝典,它主要聚焦于如何使用C#来操作SQL Server 2005数据库。通过具体的示例代码,我们将...

    winform终端连接oracle数据库及SQL数据库

    本文将深入探讨如何使用C#语言在WinForm应用中建立与Oracle及SQL Server数据库的连接,以及如何在DataGridView控件上实现数据的增删改查和光标导航操作。 首先,连接Oracle数据库需要引入Oracle的数据提供者——...

    修改DataTable的某一行某一列的值

    - 使用`SqlDataAdapter`从数据库或其他数据源获取数据并填充到`DataTable`中。 - `SqlDataAdapter.Fill(table);` 2. **修改 DataColumn 的数据类型**: - 在修改列的值之前,确保列的数据类型与新的值相匹配是...

    C#访问SQL显示到DataGridView,同时根据DataGridView实时更新数据库

    然后,我们使用SqlCommand对象执行SQL查询来获取数据。例如,要从名为"Employees"的表中选择所有记录: ```csharp string query = "SELECT * FROM Employees"; using (SqlCommand command = new SqlCommand(query, ...

    ADO.NET数据操作

    **ADO.NET数据操作详解** ADO.NET是微软.NET框架中用于访问和操作数据库的重要组件,它为C#等.NET语言提供了强大的数据访问能力。ADO.NET提供了一组类库,允许开发者直接与各种数据库进行交互,包括SQL Server、...

Global site tag (gtag.js) - Google Analytics