我应该在DataAdapter.Fill方法中使用try / catch语句吗?

时间:2010-11-18 19:39:28

标签: c# .net sql using-statement

using (SqlConnection sqlConn = new SqlConnection(XYZ.Globals.ConnectionString))
{                                                                                
    using (SqlDataAdapter adapter = new SqlDataAdapter())                            
    {                                                                                
        SqlCommand command = new SqlCommand("selCompanies", sqlConn)      
        {                                                                        
             CommandType = CommandType.StoredProcedure                            
        };                                                                       
        command.Parameters.AddRange(searchParams.ToArray());                         
        adapter.SelectCommand = command;                                             
        DataSet ds = new DataSet();                                                  
        adapter.Fill(ds);                                                            

        return ds;                                                                   
    }                                                                                
}                                                                                    
                                                                                       Do I need to wrap the `adapter.fill()` in try catch finally block? 

5 个答案:

答案 0 :(得分:1)

当你可以处理它抛出的任何异常时,你只能在try/catch中包装东西。如果不能,则无需将其放在try/catch块中。

using语句相当于try/finally块。

答案 1 :(得分:1)

问题是如果出现问题我将采取哪些不同的方式。通常情况下,正确的操作只是让异常升级 - 毕竟,你不是期待异常,所以你不能对它做任何有用的事情。这里唯一的微妙之处是IDisposable,你在那里积极地想要清理东西;所以对usingSqlConnectionSqlCommand等内容的SqlDataReader语句是理想的(但这是try / finally,而不是{{1 }} / try)。因此,我将制作游览代码的主要变化是处置命令:

catch

答案 2 :(得分:0)

这取决于此代码是否包含在更高级别的异常处理中。您希望在什么范围内处理此逻辑中的错误 - 通常这将是给定的逻辑“块”,而不是每个函数调用。处理数据库错误 一般来说是一个好主意。

在任何情况下,您都需要在using上使用另一个SqlCommand,否则您将泄露它。

答案 3 :(得分:0)

同样适用于adapter.Fill() .net代码的任何其他行:

如果您有充分的理由捕获并处理一个特定的异常,那么抓住并处理它。如果你没有充分的理由,请不要抓住它。

我不明白为什么这个特定的行应该以特定的方式进行错误处理。

答案 4 :(得分:0)

如果您有错误处理需要连接或命令在范围内,您只需要从填充中捕获异常。

此外,从技术上讲,只要退出连接的使用块,适配器和命令就会超出范围。在许多情况下,这可能足以释放这些资源(在大多数情况下,连接是最有价值的资源,因为它会在数据库服务器上产生开销)。但是,要明确这一点并没有什么坏处,特别是如果您要为同一个连接创建多个命令或适配器。