c# - 处理我需要从我的方法返回的数据表对象

标签 c# datatable dispose

DataTable dt= new Datatable();
try {
    SqlCommand Cmd = new SqlCommand("sp_getData",SqlCon);
    SqlCommand.CommandType= CommandType.StroedProcedure;
    SqlCon.Open();
    sqlDataReader dr=  cmd.ExecuteReader();
    dt.Load(dr);
    SqlCon.Close();
}
catch(Exception ex) {
}
finally{
    dt.Dispose() //
}

return dt;

这段代码合法吗?...我的方法正在返回那个数据表对象,所以在调用 dispose 之后会保留值吗??...请解释...

最佳答案

没有。您将返回一个已处置的对象。

如果您要返回一个IDisposable,那么期望调用者有责任在处理完对象后处置该对象是完全正常的。因此,您应该按原样返回未处理的 DataTable 对象,并让调用代码处理它。

通常这会使用 using block 来完成。例如:

class MyDisposableObject : IDisposable { /*...*/ }

public MyDisposableObject MakeMeAnObject() { return new MyDisposableObject(); }

public void Main()
{
    using(var o = MakeMeAnObject())
    {
        o.Foo = 1;
        o.Bar = 2;
        o.FooBar();
    }
}

请注意,我确实在您的代码段中看到了一些您没有处理但应该处理的本地 IDisposable 对象。你也在吞下异常。

关于c# - 处理我需要从我的方法返回的数据表对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21873440/

相关文章:

c# - EF4.4 中每个具体类型 (TPC) 映射的表

c# - context.SaveChanges() 在添加时出错

c# - 模板 10 : Modal not closing

jquery - 如何从数组中添加其他数据以导出到 jquery 数据表中的 excel

Java如何防止小部件配置错误?

c# - 如果我需要分页支持,我应该使用 ListView 还是 Repeater?

data.table 中的行号

javascript - 如何在 dataTable.js 中转置行和列

c# - 为什么一个流在它的作者被处置时被处置?

JavaFX - 处理窗口