博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SqlDataAdapter概述
阅读量:6842 次
发布时间:2019-06-26

本文共 3219 字,大约阅读时间需要 10 分钟。

SqlDataAdapter是 DataSet和 SQL Server之间的桥接器,用于检索和保存数据。SqlDataAdapter通过对数据源使用适当的Transact-SQL语句映射 Fill(它可更改DataSet中的数据以匹配数据源中的数据)和 Update(它可更改数据源中的数据以匹配 DataSet中的数据)来提供这一桥接。当SqlDataAdapter填充 DataSet时,它为返回的数据创建必需的表和列(如果这些表和列尚不存在)。

使用方法

 

1、通过连接字符串和查询语句 

 

string strConn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQL Server链接字符串strSql="SELECT * FROM 表名"; SqlDataAdapter da=new SqlDataAdapter(strSql,strConn);DataSet ds=new DataSet();//创建DataSet实例da.Fill(ds,"自定义虚拟表名");//使用DataAdapter的Fill方法(填充),调用SELECT命令

2、通过查询语句和SqlConnection对象来创建

 

string strConn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQL Server链接字符串  SqlConnection conn=new SqlConnection(strConn);  string strSql="SELECT * FROM 表名";  SqlDataAdapter da = new SqlDataAdapter(strSql, conn);  DataSet ds=new DataSet();//创建DataSet实例  da.Fill(ds,"自定义虚拟表名");//使用DataAdapter的Fill方法(填充),调用SELECT命令

 3、通过SqlCommand对象来创建

 

 

 

string strConn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQL Server链接字符串    SqlConnection connSql=new SqlConnection (strConn); //Sql链接类的实例化    connSql.Open ();//打开数据库    //使用SqlDataAdapter时没有必要从Connection.open()打开,    //SqlDataAdapter会自动打开关闭它。    string strSql = "SELECT * FROM 表名"; //要执行的SQL语句    SqlCommand cmd = new SqlCommand(strSql, connSql);  SqlDataAdapter da=new SqlDataAdapter(cmd); //创建DataAdapter数据适配器实例    DataSet ds=new DataSet();//创建DataSet实例    da.Fill(ds,"自定义虚拟表名");//使用DataAdapter的Fill方法(填充),调用SELECT命令    connSql.Close();//关闭数据库

 

 注意

如果只需要执行SQL语句或SP,就没必要用到DataAdapter ,直接用SqlCommandExecute系列方法就可以了。sqlDataadapter的作用是实现DatasetDB之间的桥梁:比如将对DataSet的修改更新到。

SqlDataAdapterUpdateCommand的执行机制是:当调用SqlDataAdapter.Update()时,检查DataSet中的所有行,然后对每一个修改过的Row执行SqlDataAdapter.UpdateCommand ,也就是说如果未修改DataSet中的数据,SqlDataAdapter.UpdateCommand不会执行。

 

1、在使用Fill方式时,可以指定DataTable,而不是DataSet

 

 

string strConn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQL Server链接字符串    strSql="SELECT * FROM 表名";       SqlDataAdapter da = new SqlDataAdapter(strSql, strConn);  DataTable tbl=new DataTable( );  da.Fill(tbl);

 

 2、注意打开和关闭连接的处理

在调用SqlCommand对象执行sql命令之前,需要保证与该对象关联的SqlConnection对象是打开的,否则SqlCommand的方法执行时将引发一个异常,但是我们在上面的代码中看到,SqlDataAdapter没有这样的要求。

 

如果调用SqlDataAdapterFill方法,并且其SelectCommand属性的SqlConnection是关闭状态,则SqlDataAdapter会自动打开它,然后提交查询,获取结果,最后关闭连接。如果在调用Fill方法前,SqlConnection是打开的,则查询执行完毕后,SqlConnection还将是打开的,也就是说SqlDataAdapter会保证SqlConnection的状态恢复到原来的情形

 

string strConn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQL Server链接字符串    SqlConnection conn=new SqlConnection(strConn);  SqlDataAdapter daCustomers,daOrders;     strSql="SELECT * FROM Customers";  daCustomers = new SqlDataAdapter(strSql, conn);     strSql="SELECT * FROM Orders";  daOrders=new SqlDataAdapter(strSql, conn);    DataSet ds=new DataSet();     daCustomers.Fill(ds,"Customers");  daOrders.Fill(ds,"Orders");

 

 以上代码会导致连接被打开和关闭两次,在调用Fill方法时各一次。为了避免打开和关闭SqlConnection对象,在调用SqlDataAdapter对象的Fill方法之前,我们可以先打开SqlConnection对象,如果希望之后关闭连接,我们可以再调用Close方法,就像这样:

 

conn.Open()  strSql="SELECT * FROM Customers";  daCustomers = new SqlDataAdapter(strSql, conn);     strSql="SELECT * FROM Orders";  daOrders=new SqlDataAdapter(strSql, conn);    DataSet ds=new DataSet();     daCustomers.Fill(ds,"Customers");  daOrders.Fill(ds,"Orders"); conn.Close();

 

3、多次调用Fill方法需要注意数据重复和有效更新数据的问题

推荐的做法是,在调用Fill方法前,先删除本地DataSet中缓存的数据!

 

 

 

转载地址:http://jwdul.baihongyu.com/

你可能感兴趣的文章
kubernetes资源对象--Horizontal Pod Autoscaling(HPA)
查看>>
阿里云RPA(机器人流程自动化)干货系列之六:客户端安装及激活
查看>>
MySQL中SQL优化的常用方法
查看>>
[WPF]有Focus(), 那Unfocus()呢?
查看>>
PostgreSQL 10.1 手册_部分 II. SQL 语言_第 7 章 查询_7.3. 选择列表
查看>>
Intel 收购 Vertex.AI,打造开源深度学习引擎 PlaidML
查看>>
独家 | 用Python Featuretools库实现自动化特征工程(附链接)
查看>>
Thrift源码解析--transport
查看>>
百度竞价账户托管,屏蔽账户恶意点击的2种策略,非常规。
查看>>
JavaScript面向对象编程简明教程
查看>>
[译] 5 个有趣的 Linux 命令行技巧
查看>>
Core Data的基本使用简介
查看>>
ECCV 2018 最佳论文名单公布,何恺明再添一项论文奖
查看>>
JAVA模板方法设计模式——Java设计模式,写漂亮的代码——
查看>>
Debian 包维护者不满 Debian 开发流程,宣布退出
查看>>
有趣的Tensorflow游乐场以及有趣的思考
查看>>
spring源码-bean之初始化-1
查看>>
不为人知的网络编程(七):如何让不可靠的UDP变的可靠?
查看>>
Android--面试题整理(五)
查看>>
php continue break 用例
查看>>