对象不沿所有执行路径布置

 卖砖头的小男孩 发布于 2022-12-11 11:59

我有以下代码.

private DataTable LoadSMSCellProviders()
{
    string sqlQuery = "Select * from SMSAddress";
    DataTable dt = new DataTable();
    using (SqlConnection conn = new SqlConnection(Utility.ConnString))
    {
        using (SqlCommand command = new SqlCommand(sqlQuery, conn))
        {
            SqlDataAdapter adapter = new SqlDataAdapter(command);
            adapter.Fill(dt);
            return dt;
        }
    }
}

Microsoft Code Analysis告诉我dt没有沿着所有执行路径处理,但我不知道如何纠正这个问题.如果我尝试dispose在之前调用它return,它将返回一个空值,如果我尝试在方法结束时执行它,代码永远不会到达...

我在这里错过了什么?

这是来自分析工具的消息:

警告:CA2000:Microsoft.Reliability:在方法'xx()'中,对象'dt'不会沿所有异常路径放置.对所有对它的引用超出范围之前,在对象'dt'上调用System.IDisposable.Dispose.

juharr.. 7

发生异常时需要处理它.像这样.

private DataTable LoadSMSCellProviders()
{
    string sqlQuery = "Select * from SMSAddress";
    DataTable dt = null;
    try
    {
        dt = new DataTable();
        using (SqlConnection conn = new SqlConnection(Utility.ConnString))
        {
            using (SqlCommand command = new SqlCommand(sqlQuery, conn))
            {
                SqlDataAdapter adapter = new SqlDataAdapter(command);
                adapter.Fill(dt);
                return dt;
            }
        }
    }
    catch
    {
        if(dt != null)
            dt.Dispose();
        throw;
    }
}

这个想法是,如果发生异常,那么就没有办法处理DataTable它,因为它不会被传递回调用者.因此,这是使代码分析愉快的模式.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有