一篇文章搞定SqlDataAdapter

ado.net提供了丰富的数据库操作,在这些操作中SqlConnection和SqlCommand类是必须使用的,但接下来可以分为两类操作:

一类是用SqlDataReader直接一行一行的读取数据库。
第二类是SqlDataAdapter联合DataSet来读取数据。

两者比较:
SqlDataReader由于是直接访问数据库,所以效率较高。但使用起来不方便。
SqlDataAdapter可以把数据库的数据缓存在内存中,以数据集的方式进行填充。这种方式使用起来更方,便简单。但性能较第一种稍微差一点。(在一般的情况下两者的性能可以忽略不计。)

先看一个比较简单的代码:
public   void  SqlAdapterDemo1( string  connStr)
{
  SqlConnection conn 
=   new  SqlConnection(connStr); // 连接对象

  SqlCommand cmd 
=  conn.CreateCommand(); // sql命令对象
  cmd.CommandType  =  CommandType.Text;
  cmd.CommandText 
=   " select * from products = @ID " ; // sql语句

  cmd.Parameters.Add(
" @ID " , SqlDbType.Int);
  cmd.Parameters[
" @ID " ].Value  =   1 ; // 给参数sql语句的参数赋值

  SqlDataAdapter adapter 
=   new  SqlDataAdapter(); // 构造SqlDataAdapter
  adapter.SelectCommand  =  cmd; // 与sql命令对象绑定,这个必不可少

  DataSet ds 
=   new  DataSet();
  adapter.Fill(ds,
" table1 " ); // 填充数据。第二个参数是数据集中内存表的名字,可以与数据库中的不同
                                  
// Fill方法其实是隐藏的执行了Sql命令对象的CommandText 
  
// 填充完了后,就可以方便的访问数据了。例如

  WriteLine(ds.Tables["table1"].Rows[0][1]);}

怎么样?是不是很简单?
以上代码有一个地方需要注意,就是没有显示的调用连接对象的Open()方法。只是因为在每次调用Fill()方法的时候会自己去维护连接。调用Fill()方法并不会改变之前连接对象的状态。
//连接对象和sql命令对象单从上面的代码只有查询语句,没有其他的操作。那么接下来我就针对其他的操作来进一步说明SqlDataAdapter的用法。其他操作(如:增加,修改,删除等操作)可以分为两种情况一个是单表操作,一个是多表操作。
先来看单表操作:
/ 直接把上面的代码赋值过来
public   void  SqlAdapterDemo1( string  connStr)
{
 
  SqlConnection conn 
=   new  SqlConnection(connStr); // 连接对象

  

  cmd.Parameters.Add(
" @ID " , SqlDbType.Int);
  cmd.Parameters[
" @ID " ].Value  =   1 ; // 给参数sql语句的参数赋值

  SqlDataAdapter adapter 
=   new  SqlDataAdapter(); // 构造SqlDataAdapter
  adapter.SelectCommand  =  cmd; // 与sql命令对象绑定,这个必不可少

  SqlCommandBuilder builder 
=   new  SqlCommandBuilder(adapter); // 在构造好了SqlDataAdapter对象                                                                                                 //加上 此句代码

  DataSet ds 
=   new  DataSet();
  adapter.Fill(ds,
" table1 " ); // 填充数据。第二个参数是数据集中内存表的名字,可以与数据库中的不同
                                  
// Fill方法其实是隐藏的执行了Sql命令对象的CommandText 
  
// 填充完了后,就可以方便的访问数据了。例如
  WriteLine(ds.Tables[ " table1 " ].Rows[ 0 ][ 1 ]);

  
// 修改操作
  ds.Tables[ " table1 " ].Rows[ 0 ][ 1 =   " Sample2 " ; // 此句代码只是修改了数据集中某够值

  
// 更新到数据库
  adapter.Update(ds,  " table1 " ); // 把内存中的数据同步到数据库中
上面的修改代码很简单,原理就是修改了内存中数据集的数据,然后调用一下Update()方法就同步到数据库中去了。SqlDataAdapter帮我们自动生成了Sql语句,并且在这里Update()方法是带了事务处理功能的。其他的删除,增加操作同理,在对内存中的数据集进行相关修改后,只需要调用一下Update()方法即可同步到数据库中去。 但遗憾的是,目前这种方式只支持单表的操作,不支持任何与多表相关的操作(包括同一视图中来自不同表的列)。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值