我的数据库中有几个存储过程。例如,删除存储过程,如:
alter procedure [dbo].[DeleteFactor]
@Id uniqueidentifier
as
begin
delete from Factors where Id = @Id
end
当我从这样的代码中调用它时:
dc.ExecuteSprocAccessor("DeleteFactor", id);
然后该行不会被删除。但是这段代码的功能是:
dc.ExecuteNonQuery("DeleteFactor", id);
id
是传入的参数,类型为Guid。
任何人都可以解释为什么第二种方法有效并且第一种方法不起作用?我觉得很奇怪,因为第一种方法显然是与存储过程一起使用。
答案 0 :(得分:0)
根据Retrieving Data as Objects,ExecuteSprocAccessor
方法使用延迟执行(ala LINQ)。因此,在第一种方法中,由于您没有访问DeleteFactor存储过程的结果,因此不会进行SQL调用。
我会使用第二种方法,因为你真的在执行非查询。此外,第一种方法可能会导致一些混淆,因为ExecuteSprocAccessor
旨在检索数据。例如“数据应该在这里返回吗?也许错过了什么?”
答案 1 :(得分:0)
只需在ToArray
的结果上致电ToList
或ExecuteSprocAccessor
即可让其执行。