所以我有一些代码,我很好奇如何抓住错误。我应该将一个查询包装在一个使用中,然后将其包装在try catch中吗?我在想以下是正确的吗?
try
{
using (db)
{
string salt = BCryptHelper.GenerateSalt(6);
var hashedPassword = BCryptHelper.HashPassword(user.Password, salt);
User newUser = new User
{
EmailAddress = user.EmailAddress,
PasswordSalt = salt,
PasswordHash = hashedPassword,
CreatedOn = DateTime.UtcNow
};
db.Users.Add(newUser);
db.SaveChanges();
}
return true;
}
catch (SqlException exp)
{
throw new InvalidOperationException("Steam Id could not be added", exp);
}
答案 0 :(得分:2)
将其包含在try
,catch
和可能finally
中以清理任何可能需要清理的内容是正确的方法。
将它包装在using
中不会实现任何异常处理,但只会在您离开范围后处理实现using
的{{1}}中包含的字段使用IDisposable
。
答案 1 :(得分:1)
try...catch
(和可选finally
)始终由运行时保证使用;这对于finally
语句(documentation)尤为重要。对using
块(reference)也是如此。
答案 2 :(得分:0)
有很多,throw new Exception
,throw ex
,throw
它们都有自己的意义,请查看this以获取更多详细信息。
答案 3 :(得分:-2)
try catch无法捕获使用块内发生的异常。这会导致系统因未处理的异常而崩溃。
以下是崩溃的保证。我不确定这是由于实体框架。这对我来说很奇怪。
using (var entities = new AttritionRateEntities())
{
try
{
var ent = entities.AttritionRatePerSetups.FirstOrDefault(