UpdateRowSource是DbCommand的一个属性,当DbCommand把本地变化更新到数据库的时候,UpdateRowSource可能把数据库的变化带回本地。
用例子来说:
假设有一个数据库叫做My,我们定义一个表叫做MyTable:
因为id是 自增项 ,插入的时候必须留空,因此插入的时候只传‘name’,不可以传本地定义的id。id只能插入 后 用SCOPE_IDENTITY()获得。这里,UpdateRowSource就可以用来把数据库的变化,比如id,更新到本地中来。
其中select SCOPE_IDENTITY() as id返回了一个记录,而UpdateRowSource.FirstReturnedRecord把该纪录写回了本地的table。你可以看到[ 2 , 'extra person']。
相形之下,如果改成sda.InsertCommand.UpdatedRowSource = System.Data.UpdateRowSource. None ;
那么,table中的第二条记录就不会得到更新,还是[ 0 , 'extra person']
用例子来说:
假设有一个数据库叫做My,我们定义一个表叫做MyTable:
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,更新到本地中来。
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']