SqlDataAdapter
是 DataSet
和 SQL Server
之间的桥接器。SqlDataAdapter
通过对数据源使用适当的Transact-SQL
语句映射 Fill
(它可填充DataSet
中的数据以匹配数据源中的数据)和 Update
(它可更改数据源中的数据以匹配 DataSet
中的数据)来提供这一桥接。当SqlDataAdapter
填充 DataSet
时,它为返回的数据创建必需的表和列(如果这些表和列尚不存在)。
简介
但是,除非 MissingSchemaAction
,否则这个隐式创建的架构中不包括主键信息。也可以使用FillSchema
,让 SqlDataAdapter
创建 DataSet
的架构,并在用数据填充它之前就将主键信息包括进去。
DataSet
作用:DataSet
,DataAdapter
读取数据。
问:什么是DataAdapter
?
答:DataAdapter
对象在DataSet
与数据之间起桥梁作用
string strConn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQL Server链接字符串
SqlConnection ConnSql=new SqlConnection (strConn); //Sql链接类的实例化
ConnSql.Open ();//打开数据库//使用SqlDataAdapter时没有必要从Connection.open()打开,SqlDataAdapter会自动打开关闭它。
string strSQL="SELECT * FROM 表名1 "; //要执行的SQL语句
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
不会执行。
结尾
有关更多信息,请参见 向 DataSet
添加现有约束。SqlDataAdapter
与 SqlConnection
和 SqlCommand
一起使用,以便在连接到 SQL Server
数据库时提高性能。SqlDataAdapter
还包括 SelectCommand、InsertCommand、DeleteCommand、UpdateCommand
和 TableMappings
属性,
C#中SqlDataAdapter
的使用小结
SqlDataAdapter
对象
一、特点介绍
1、表示用于填充 DataSet
和更新 SQL Server
数据库的一组数据命令和一个数据库连接。
2、在SqlDataAdapter
和DataSet
之间没有直接连接。当完成SqlDataAdpater.Fill(DataSet)
调用后,两个对象之间就没有连接了。
二、使用介绍
1、创建SqlDataAdapter
string strSQL=“Select * from Customers”;
SqlCommand cmd=new SqlCommand(strSQL,cn);
SqlDataAdapter da=new SqlDataAdapter();
da.SelectCommand=cmd;
2、SqlDataAdapter
构造函数
①string strConn=“Provider=.....”;
string strSQL=“select * from Customers”;
SqlDataAdapter da=new SqlDataAdapter(strSQL,strConn);
②string strConn=“Provider=.....”;
SqlConnection cn=new SqlConnection(strConn);
SqlDataAdapter da=new SqlDataAdapter(“select * from Customers”,cn);
③string strConn=“Provider=.....”;
string strSQL=“select * from Customers”;
SqlConnection cn=new SqlConnection(strConn);
SqlCommand cmd=new SqlCommand(strSQL,cn);
SqlDataAdapter da=new SqlDataAdapter(cmd);
3、从查询中获取结果
①使用Fill
方法
SqlDataAdapter da=new SqlDataAdapter(strSQL,strConn);
DataSet ds=new DataSet();
da.Fill(ds); //这里ds中的表名为Table
②使用Fill
方法创建DataTable
对象和DataColumn
对象
SqlDataAdapter da=new SqlDataAdapter(strSQL,strConn);
da.TableMapping.Add(“Table”,“Customers”);
DataSet ds=new DataSet();
da.Fill(ds);
③使用重载Fill
方法
SqlDataAdapter.Fill(DataSet,“Customers”);
SqlDataAdapter.Fill(DataTable);
SqlDataAdapter.Fill(DataSet,intStartRecord,intNumRecords,“TableName”);
④开放和关闭连接
如果调用了一个SqlDataAdapter
对象的Fill方法,而SelectCommand
属性的Connection
关闭了,那么SqlDataAdapter
就会开放一个连接,然后提交查询、获取结果、最后关闭连接。如果在调用前开放了Connection
,那么操作之后仍然保持开放。
SqlDataAdapter daCustomers,daOrders;
daCustomers=new SqlDataAdapter(“Select * from Customers”,cn);
daOrders=new SqlDataAdapter(“Select * from Orders”,cn);
DataSet ds=new DataSet();
cn.Open();
daCustomers.Fill(ds);
daOrders.Fill(ds);
cn.Close();
⑤多次调用Fill
方法
刷新DataSet
中的数据,最简单的解决方法就是清空DataSet
(或DataTable
),然后再次调用DataAdapter
对象的Fill
方法。
三、属性方法事件介绍
1、属性
①AcceptChangeDuringFill
:确定由DataAdapter
所获取的行的RowState
(默认为True
)。
②DeleteCommand
:获取或设置一个 Transact-SQL 语句或存储过程,以从数据集删除记录。
③InsertCommand
:获取或设置一个 Transact-SQL 语句或存储过程,以在数据源中插入新记录。
④SelectCommand
:获取或设置一个 Transact-SQL 语句或存储过程,用于在数据源中选择记录。
⑤UpdateCommand
:获取或设置一个 Transact-SQL 语句或存储过程,用于更新数据源中的记录。
⑥TableMappings
:SqlDataAdapter
用来将查询的结果映射到DataSet
的信息集合。
⑦ContinueUpdate
:控制SqlDataAdapter
在遇到一个错误之后是否继续提交更改(默认为false
)。
2、方法
①Fill
:执行存储于SelectCommand
中的查询,并将结果存储在DataTable
中。
②FillSchema
:为存储在SelectCommand
中存储的查询获取架构信息。获取查询中的各列名称和数据类型。
③GetFillParameters
:为SelectCommand
获取一个包含着参数的数组。
④Update
:向数据库提交存储在DataSet
(或DataTable、DataRows
)中的更改。该方法会返回一个整数值,其中包含着在数据存储中成功更新的行数。
3、事件
①FillError
:当DataAdapter
遇到填充DataSet
或DataTable
的一个错误时,该事件被触发。
②RowUpdated
:向数据库提交一个修改的行之后被触发。
③RowUpdating
:向数据库提交一个修改的行之前被触发。