Linq to sql 中怎样判断添加、修改、删除是否成功?

ethan永不言弃 2012-04-01 03:44:24
Linq to sql 中怎样判断添加、修改、删除是否成功?
...全文
636 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
信仰蒽 2013-08-27
  • 打赏
  • 举报
回复
wojiaoquyongbo 2012-12-15
  • 打赏
  • 举报
回复
引用 8 楼 sp1234 的回复:
引用 3 楼 的回复:上面的方法只能得到插入的ID来判断。 但是如果是修改,和删除就不行啦。 如果能得到影响的行数该多好 好像Linq微软没考虑这方面呀。 你能测试出来“执行修改操作,结果根本没有修改么”?你能测试出来“执行删除,结果数据还在”么? 如果你测试不出来,就不必画蛇添足地要返回什么行数。因为这跟修改跟删除的逻辑没有关系,纯粹是你自己的张冠李……
你说的没听懂。。。感觉linq确实有这点缺陷
wojiaoquyongbo 2012-12-15
  • 打赏
  • 举报
回复
引用 9 楼 tttyyylll 的回复:
学习了~~ 我之前也是使用linq更新,但是无法知道是否更新成功~,之后想到使用存储过程,在存储过程使用输出参数,判断受影响行数,即可知道是否更新成功! 例如:SQL code?1234567create proc sp_updatePwd @id nvarchar(20), @pwd nvarchar(20) , @result int = -1 ……
何必多此一举。。。直接用ado.net得了
孤月狼 2012-04-02
  • 打赏
  • 举报
回复
学习了~~
我之前也是使用linq更新,但是无法知道是否更新成功~,之后想到使用存储过程,在存储过程使用输出参数,判断受影响行数,即可知道是否更新成功!
例如:

create proc sp_updatePwd
@id nvarchar(20),
@pwd nvarchar(20) ,
@result int = -1 output --输出参数,表示受影响行数
as
update tbLogin set pwd =@pwd where id = @id
set @result = @@rowcount --@@rowcount 表示执行上一条语句受影响的行数


你使用 LINQ,调用存储过程,通过输出参数result是否为 1 ,就知道是否修改成功!!
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

上面的方法只能得到插入的ID来判断。
但是如果是修改,和删除就不行啦。
如果能得到影响的行数该多好
好像Linq微软没考虑这方面呀。
[/Quote]

你能测试出来“执行修改操作,结果根本没有修改么”?你能测试出来“执行删除,结果数据还在”么?

如果你测试不出来,就不必画蛇添足地要返回什么行数。因为这跟修改跟删除的逻辑没有关系,纯粹是你自己的张冠李戴硬扣的帽子。

比如说有人写了"update...."语句,可是数据库中根本没有符合条件的记录,于是他说人家sql语句执行错误了!这种人其实是想知道自己在执行"update...."之前的程序哪里有设计的不周到的地方,然后他随后就要去修改源代码。这根本不是人家sql语句执行错误。

实际上你做测试,例如额外地写一条断言语句来查询一下就行了,为什么不会写呢?没有必要硬要人家多此一举去返回什么值。
xuStanly 2012-04-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

上面的方法只能得到插入的ID来判断。
但是如果是修改,和删除就不行啦。
如果能得到影响的行数该多好
好像Linq微软没考虑这方面呀。
[/Quote]

这个要自己写框架了,我现在用的框架就是这样返回的,哈哈。
种草德鲁伊 2012-04-01
  • 打赏
  • 举报
回复
不用判断,失败的时候会抛出异常。
龙儿 2012-04-01
  • 打赏
  • 举报
回复
我给你举个例子把
1、修改
public void Update(Product product)
{
var prod=db.Product.SingleOrDefault(a=>a.Id==product.Id);
if(prod!=null)
{
Name=product.Name;
Price=product.Price;

db.SubChanges();
}

}

删除方法:
public void Update(Product product)
{
var prod=db.Product.SingleOrDefault(a=>a.Id==product.Id);
if(prod!=null)
{
db.Product.DeleteChanges(prod);
db.SubChanges();
}
q107770540 2012-04-01
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20081006/13/0CE38272-FF79-4646-B84E-1782E602BA42.html

没必要返回影响行数,代码没异常即可认为提交成功
ethan永不言弃 2012-04-01
  • 打赏
  • 举报
回复
上面的方法只能得到插入的ID来判断。
但是如果是修改,和删除就不行啦。
如果能得到影响的行数该多好
好像Linq微软没考虑这方面呀。
EnForGrass 2012-04-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

以添加为例:

var user=new User{Name="Tim"};
db.User.InsertOnSubmit(user);
db.SubmitChanges();
return user.Id>0;
[/Quote]
督察学习了
我只知道db.SubmitChanges();估计是这句成功执行了才能获取改变状态
q107770540 2012-04-01
  • 打赏
  • 举报
回复
以添加为例:

var user=new User{Name="Tim"};
db.User.InsertOnSubmit(user);
db.SubmitChanges();
return user.Id>0;

8,493

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧