使用两个表之间的连接为Asp GridView更新命令

时间:2011-03-16 09:42:32

标签: c# asp.net sql sql-server gridview

我有两个表加入 sims transactionlog ,并使用SQLDatasource显示在Asp GridView中

然后我有一个带有以下select和update语句的ASP GridView:

SelectCommand="SELECT * FROM sims s INNER JOIN TransactionLog AS tl ON s.id = tl.SimsId"     
UpdateCommand="UPDATE SET s.Notes=@Notes FROM sims s INNER JOIN TransactionLog AS tl ON s.id = tl.SimsId WHERE s.id=@id and tl.Id=@Id1"

现在我只将Notes列设置为readonly,但是一旦我可以让update语句首先用于notes列,我想稍后添加其他列。

当我尝试更新notes列时,我得到的错误如下: 关键字“SET”附近的语法不正确。]

嗯,希望我的问题说得够清楚。

1 个答案:

答案 0 :(得分:1)

这是您使用UPDATE子句编写SQL FROM语句的方式。

drop table t2
drop table t1
go

create table t1 (
Id int not null identity(1,1) primary key,
Name varchar(50) null
)

create table t2 (
t1Id int not null foreign key references t1(id),
Name varchar(50) null
)

insert into t1(name) values('T1Test1')
insert into t1(name) values('T1Test2')
insert into t2(t1Id, name) values(1, 'T2Test1')
insert into t2(t1Id, name) values(2, 'T2Test2')

-- Have a look at the data
select * from t1 inner join t2 on t1.Id = t2.t1Id

update t2 
set t2.Name = 'T2Test1_changed'
from t2 inner join t1 on t2.t1Id = t1.Id
where t1.Id = 1

-- See the changes
select * from t1 inner join t2 on t1.Id = t2.t1Id

这意味着您的陈述应如下所示:

UPDATE sims
SET s.Notes = @Notes 
FROM sims s INNER JOIN TransactionLog tl ON s.id = tl.SimsId 
WHERE s.id = @id and tl.Id = @Id1

但我怀疑WHERE条款。也许没有必要在那里使用这两个ID,但只有你知道。

在SQL Management Studio中尝试查询,然后在应用程序中应用它们以获得更好的调试体验。

以下是UPDATE声明中的MSDN文档:http://msdn.microsoft.com/en-us/library/ms177523.aspx