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...