C#使用SqlDataAdapter对象获取数据的方法
本文实例讲述了c#使用sqldataadapter对象获取数据的方法。分享给大家供大家参考,具体如下:
一.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#相关内容感兴趣的读者可查看本站专题:《c#面向对象程序设计入门教程》、《winform控件用法总结》及《c#常见控件用法教程》
希望本文所述对大家c#程序设计有所帮助。
上一篇: 浅析Android加载字体包及封装的方法
下一篇: C#资源释放方法实例分析
推荐阅读
-
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
-
【转载】C#的Merge方法合并两个DataTable对象的数据
-
C#使用SqlDataAdapter对象获取数据的方法
-
C#使用iTextSharp从PDF文档获取内容的方法
-
jQuery使用JSONP实现跨域获取数据的三种方法详解
-
【转载】C#中List集合使用GetRange方法获取指定索引范围内的所有值
-
详解vue 中使用 AJAX获取数据的方法
-
使用OkHttp获取本地服务器目录下的json数据并解析为Bean对象
-
C#使用DropDownList绑定添加新数据的方法汇总
-
解析C#面向对象编程中方法(method)的使用