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

使用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对象模型中和数据连接部分和未连接部分之间...

    MysqlDLL,C#操作MYSQL数据库

     //使用DataSet第一步就是将SqlDataAdapter返回的数据集(表)填充到Dataset对象中:  SqlDataAdapter myDataAdapter = new SqlDataAdapter("select * from product", sqlCnt); DataSet myDataSet = new DataSet...

    SqlDataAdapter使用示例.

    SqlDataAdapter使用示例.rar

    SqlDataAdapter对象介绍.doc

    这是我总结的SqlDataAdapter对象介绍.doc,希望对大家有所帮助!

    C#使用SqlDataAdapter.Update更新数据库

    C#使用SqlDataAdapter.Update更新数据库

    [Visual.Basic.2010.入门经典(第6版)].Thearon.Willi等.扫描版(1/2)

    1.5 使用帮助系统 ............................ 17 1.6 小结 ............................................ 18 1.7 练习 ............................................ 18 第2 章 .NET Framework 概述 .....

    C#图书馆管理信息系统

    private System.Data.SqlClient.SqlDataAdapter sqlDataAdapter1; private System.Data.SqlClient.SqlCommand sqlSelectCommand1; private System.Data.SqlClient.SqlCommand sqlInsertCommand1; private ...

    C#教务系统

    // 连接对象 SqlCommand cmd; //命名对象 SqlDataAdapter da;//数据适配器 public String getconn() //定义一个连接字符串的方法 { connstr = @"data source=.\SQLEXPRESS;initial catalog=sscggl;integrated ...

    基于ASP.NET(C#)的好友通讯录个人版

    一个非常适合新手快速学习C#编程的代码,在代码中我都加了注释。菜鸟容易上手。例: //SQL语句查询出多行记录并返回... //应用SqlDataAdapter对象的Fill方法填充数据集 SqlData.Fill(dt); //返回dt return dt; } }

    SqlDataAdapter使用

    这个讲述了SqlDataAdapter完全使用教程。

    SqlDataAdapter.Update批量更新.txt

    批量更新要更新的某一个或者几个字段字段,带回滚,效果很好,而且很多帖子没有讲清楚,要几个字段,就是取自己需要的字段,让一个不懂之人去自己摸索,还有是效率很高

    c#连接数据库常用的语句

    //判断连接对象状态,如果是关闭,将其打开 if (con.State == System.Data.ConnectionState.Closed) con.Open(); } catch (System.Data.SqlClient.SqlException E) { //如果出现错误,关闭数据连接,并抛出...

    登陆界面和一些小技术

    使用于新手关于数据的一些控件! public static DataTable ds(string que) { //返回一个装载了SQL制定留言的数据表, string connString = System.Configuration.ConfigurationManager.ConnectionStrings[...

    C# SqlDataAdapter与DataSet的使用

    C# SqlDataAdapter与DataSet的使用

    mysqlhelper

    /// 每页显示数据项数</param> /// <param name="name"></param> /// 返回一的DataTable对象</returns> public static DataTable GetDataTable(string sql, int pageinfo, int pagesize, string name) { ...

    Asp.Net分页控件【AspNetPager】拖入即用!

    这个分页控件名为AspNetPager控件,是Asp.net上使用率最高的分页控件,想怎么分就怎么分.附带'超详细代码注释",好用请给评论. 基本步骤: 1.拖拽控件(存放到到Bin目录下,再拖入工具箱) 2.粘贴复制(已放出实例源码) 3....

    GridView 使用SqlDataAdapter实现增删改查

    此包含GridView使用SqlDataAdapter实现的增删改查功能,可以添加空白行,可以修改数据和删除数据等。有一定的学习价值! 包含有数据库脚步,只需修改配置文件即可运行。代码仅供学习使用。

    C#中,数据集DataSet使用方法大全

    1、创建DataSet对象:DataSet ds = new DataSet("DataSetName"); 2、查看调用SqlDataAdapter.Fill创建的结构 da.Fill(ds,"Orders"); DataTable tbl = ds.Table[0]; foreach(DataColumn col in tbl.Columns) ...

    简单新闻管理系统v适合.net初学者

    //GridView较DataGrid提供了更多的API,获取分页块可以使用BottomPagerRow 或者TopPagerRow,当然还增加了HeaderRow和FooterRow //updated at 2006年6月21日3:15:33 if (null != pagerRow) { txtNewPageIndex ...

Global site tag (gtag.js) - Google Analytics