SqlDataAdapter概述

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

) 我们可以通过以下三种方法来创建 SqlDataAdapter 对象:

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命令

这种方法有一个潜在的缺陷。假设应用程序中需要多个 SqlDataAdapter 对象,用这种方式来创建的话,会导致创建每个 SqlDataAdapter 时,都同时创建一个新的 SqlConnection 对象,方法二可以解决这个问题

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 ();//关闭数据库 

SqlDataAdapter da=new SqlDataAdapter(strSQL,ConnSql); //创建DataAdapter数据适配器实例DataSet ds=new DataSet();//创建DataSet实例da.Fill(ds,"自定义虚拟表名");//使用DataAdapter的Fill方法(填充),调用SELECT命令ConnSql.Close ();//关闭数据库

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

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

1、SqlDataAdapter 内部通过 SqlDataReader 获取数据,而默认情况下 SqlDataReader 不能获知其查询语句对应的数据库表名,

所以下面的代码:

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

会在 DataSet 中创建一个新的 DataTable ,这个新的 DataTable 会拥有名为 CustomerID CompanyName 列,但是 DataTable 对象的名称是 Table ,而不是我们希望的 Customers

这个问题,可以通过添加 TableMapping 来解决:

string strConn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQL Server链接字符串  
strSql="SELECT * FROM 表名";  
SqlDataAdapter da=new SqlDataAdapter(strSQL,strConn);
da.TableMappings.Add("Table","Customers");	 // 设置对象名称
DataSet ds=new DataSet();
da.Fill(ds);
其实最简洁的方法是通过使用 方法的重载,通过指定 DataTable ,像这样:

SqlDataAdapter.Fill(DataSet,"MyTableName");

这样就可以不必使用 TableMappings 集合。

2 、在使用 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);

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

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

如果调用 SqlDataAdapter Fill 方法,并且其 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 方法,就像这样:

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

我们分析上面的代码,通过两次调用 Fill 方法, SqlDataAdapter 执行两次查询,并两次将查询结果保存到 DataSet 中,第一次调用在 DataSet 中创建了一个名为 Customers 的新表。第二次调用 Fill 方法将查询的结果追加到 DataSet 中的同一个表中,因此,每个客户的信息将在 DataSet 中出现两次!当然,如果数据库管理员对 Customers 表定义了主键,则 SqlDataAdapter 在天成 DataTable 时,会判断重复行,并自动丢弃掉旧的值。

考虑一下,假定一个特定客户在第一次调用 Fill 方法时,存储于数据库中,那么 SqlDataAdapter 会将其添加到新建的 DataTable 中。如果后来这个客户被删除了,那么第二次调用 Fill 方法时, SqlDataAdapter 将不会在查询结果中找到该客户信息,但是它也不会将客户信息从 DataSet 中删除。这就导致了数据更新的问题。

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

此处将资料从 数据库 得出后显在 Data GridView上显示。然后变更数据。变更数据的方法在按钮事件 。    资料显示方法不用多说。    更新时主要用到 Sql CommandBuilder类和 Sql Data Adapter .Up dat e()方法。 Sql CommandBuilder对象负责生成用于更新 数据库 SQL 语句,不必自己创建这些语句。         Up Dat 一、特点介绍 1、表示用于填充 Data Set 和更新 SQL Server 数据库 的一组数据命令和一个 数据库 连接。 2、在 Sql Data Adapter Data Set之间没有直接连接。当完成 Sql Data Adpater.Fill( Data Set)调用后,两个对象之间就没有连接了。 二、 使用 介绍 1、创建 Sql Da... <br /> Sql Data Adapter Data Set 和更新 数据库 的一组数据命令和一个 数据库 连接的填充器。提供 Data Set 和 SQL Server 之间的桥接,用于检索和保存数据。<br /> Sql Data Adapter 是通过对数据源映射Fill(可更改 Data Set 的数据以匹配数据源 的数据)和 Up dat e(可更改数据源 的数据以匹配 Data Set 的数据)来提供这一桥接。<br />1、构造函数<br />(1) Sql Data Adapter ()<br />(2) Sql Dat Sql Data Adapter Data Set和 数据库 的连接(桥接器),用于检索和保存数据, Sql Data Adaoter通过对数据源 使用 适当的Transact- SQL 语句映射File(他作为填充 Data Set的数据源 的数据)和Up dat e(更改 Data Set 的数据源)提供一种桥接方式,当 Sql Data Adapter 填充 Data Set时,他为返回的数据创建必须的表和列 第一种方式(字符串查询) string strCon =“uid=sa;pwd=123456; data base=test; server =1 Sql Data Adapter 数据库 操作的一种形式,可以将查出的数据填充到 Data Set 。它的特点是你可以通过Up dat e方法,将修改过的 Data Set自动更新回 数据库 ,而不需要重新写up dat e或者delete语句。 下面上代码: //先定义几个必要的字段 //连接字符串 private string strConn = ConfigurationManag... Fill()填充到 Data Set ,Up Dat e() 更改提交到 数据库 ,使数据保持一致。SelectCommand 查询记录,设置或生成一个对象 Sql Command。 Sql Data Adapter 对数据的操作也是建立在 Sql Command基础之上的。适配器(桥接器), Data Set 数据之间用于检索和保存数据的桥梁;带参数,添加参数,操作 Sql Command 选择第一、第二种。如果使T- SQL 查询语句,选择第三种。 01 Data Adapter 对象概述 Data Adapter 对象是一个数据适配器对象,是 Data Set 与数据源之间的桥梁。 Data Adapter 对像提供了 4 个属性,用于实现与数... Data Adapter 对象是一个数据适配器对象,是 Data Set与数据源之间的桥梁。 Data Adapter 对象提供了4个属性,用于实现与数据源之间的互通。在对 数据库 进行操作时,只要将这4个属性设置成相应的 SQL 语句即可。 Data Adapter 对象 还有2个主要的方法:Fill()方法和Up dat e()方法。 From: http://blog.sobnb.com/u/92/5532.html一、特点介绍1、表示用于填充 Data Set 和更新 SQL Server 数据库 的一组数据命令和一个 数据库 连接。2、在 Sql Data Adapter Data Set之间没有直接连接。当完成 Sql Data Adpater.Fill( Data Set)调用后,两个对象之间就没有连接了。 ****** S...