gpt4 book ai didi

.net - Using 语句是否需要 Try/Catch/finally 来处理异常?

转载 作者:行者123 更新时间:2023-12-03 09:51:19 24 4
gpt4 key购买 nike

我想知道如何使用语句处理异常?
我需要用 包装 using 语句吗?尝试/Cath/最后子句,以确保即使包含代码抛出异常,SqlConnection 对象也已关闭并已处理?

Public Function GetUserAccountKeyByUsername(ByVal pUsername As String) As Int32
If String.IsNullOrEmpty(pUsername) Then
Throw New ArgumentNullException("pUsername", "Username is missing")
End If

Dim o As Object
Dim userAccountKey As Int32
Dim SQL As StringBuilder = New StringBuilder()

With SQL
.Append("SELECT USER_KEY ")
.Append("FROM USER ")
.Append("WHERE USERNAME = @Username ")
End With

Try
Using conn As SqlConnection = New SqlConnection(ConnectionString)
conn.Open()
Using cmd As SqlCommand = New SqlCommand(SQL.ToString, conn)
Try
cmd.CommandTimeout = Convert.ToInt32(ConfigurationManager.AppSettings("SQLQueryLimitTime"))
cmd.Parameters.Add(New SqlParameter("@Username", SqlDbType.VarChar)).Value = pUsername
o = cmd.ExecuteScalar()
If (o IsNot Nothing) AndAlso Not (IsDBNull(o)) Then
userAccountKey = Convert.ToInt32(o)
End If
Catch ex As Exception
_log.logError(ex, cmd)
End Try
End Using
End Using
Catch ex As Exception
_log.logError(ex, conn.ConnectionString)
Finally
conn.Close()
conn.Dispose()
End Try
Return userAccountKey
End Function

最佳答案

using看跌期权 tryfinally在您的代码中,它会自动调用 .Dispose()最终 .Close()因为DbConnection.Dispose()电话Close() ,但没有捕获,因此您需要添加 catchusing阻止,这样的事情

try
{
using(some resource)
{
}
}
catch(Exception)
{
}

对比
try
{
}
catch(Exception)
{
}
finally{ }

所以看着这个你可能会想 尝试/捕获/最后 优于 使用 , 因为在 using在任何情况下你都需要处理错误, 但它不是 .

如果 .Close()期间有任何错误或 .Dispose()发生时,第一个示例也将处理该问题,但在第二种情况下,您必须输入 try-catchfinally堵塞。

阅读更多关于 Avoiding Problems with the Using Statement (MSDN)

希望这能回答你的问题。

关于.net - Using 语句是否需要 Try/Catch/finally 来处理异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9077120/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com