浅谈C# ADO.NET UpdateRowSource 外带简单例子

UpdateRowSource是DbCommand的一个属性,当DbCommand把本地变化更新到数据库的时候,UpdateRowSource可能把数据库的变化带回本地。

用例子来说:
假设有一个数据库叫做My,我们定义一个表叫做MyTable:
SQL code ?
1
2
3
4
5
6
CREATE  TABLE  MyTable
(
     id [ int ] IDENTITY(1,1)  primary  key ,
     name  [nvarchar](32)  NULL
);
insert  into  MyTable ( name values ( 'first person' );  select  SCOPE_IDENTITY()  as  id;

因为id是 自增项 ,插入的时候必须留空,因此插入的时候只传‘name’,不可以传本地定义的id。id只能插入 用SCOPE_IDENTITY()获得。这里,UpdateRowSource就可以用来把数据库的变化,比如id,更新到本地中来。
C# code ?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public  static  void  Main()
{
     /*
         CREATE TABLE MyTable
         (
             id [int] IDENTITY(1,1) primary key,
             name [nvarchar](32) NULL
         );
         insert into MyTable (name) values('first person'); select SCOPE_IDENTITY() as id;
     */
     string  connectionString =  @"Data Source=(local);Initial Catalog=My;Integrated Security=True" ;
     using  (var con =  new  SqlConnection(connectionString))
     using  (var sda =  new  SqlDataAdapter( "select * from MyTable" , con))
     {
         DataTable table =  new  DataTable();
         sda.Fill(table);  
         // 用SqlDataAdapter来填充table,这里设断点应该可以看到table有一个记录[1, 'first person']
             
         sda.InsertCommand =  new  SqlCommand( "insert into MyTable (name) values(@name); select SCOPE_IDENTITY() as id" , con);
         sda.InsertCommand.Parameters.Add( "@name" , System.Data.SqlDbType.NVarChar, 32,  "name" );
         sda.InsertCommand.UpdatedRowSource = System.Data.UpdateRowSource.FirstReturnedRecord;
 
         table.Rows.Add(0,  "extra person" );
         sda.Update(table);
         // 用SqlDataAdapter来把table的变化更新到数据库去。
         // 这里设断点应该可以看到数据库新增了一条记录,同时!table中的第二条记录将变成了[2, 'extra person']。
     }
}


其中select SCOPE_IDENTITY() as id返回了一个记录,而UpdateRowSource.FirstReturnedRecord把该纪录写回了本地的table。你可以看到[ 2 , 'extra person']。

相形之下,如果改成sda.InsertCommand.UpdatedRowSource = System.Data.UpdateRowSource. None ;
那么,table中的第二条记录就不会得到更新,还是[ 0 , 'extra person']
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值