Удаление SQL команды и закрытие соединения

до сих пор я всегда использовал подобную структуру для получения данных из DB и заполнения DataTable

public static DataTable GetByID(int testID)
        {
        DataTable table = new DataTable();
        string query = @"SELECT * FROM tbl_Test AS T WHERE T.testID = @testID";

        using (SqlConnection cn = new SqlConnection(Configuration.DefaultConnectionString))
        {
            SqlCommand cmd = new SqlCommand(query, cn);
            cmd.Parameters.Add("@testID", SqlDbType.Int).Value = testID;

            cn.Open();
            table.Load(cmd.ExecuteReader());
        }

        return table;
    }

Теперь я увидел несколько предупреждений в анализе сборки:

TestService.cs (37): CA2000 : Microsoft.Reliability: In method 'TestService.GetByID(int)', object 'table' is not disposed along all exception paths. Вызовите System.IDisposable.Dispose для объекта 'table', пока все ссылки на него не вышли из области видимости.

TestService.cs (42): CA2000 : Microsoft.Reliability: В методе 'TestService.GetByID(int)' вызвать System.IDisposable.Dispose на объекте 'cmd' до того, как все ссылки на него выйдут из области видимости.

Следует ли мне изменить код в

    public static DataTable GetByID(int testID)
    {
        DataTable table = new DataTable();
        string query = @"SELECT * FROM tbl_Test AS T WHERE T.testID = @testID";

        using (SqlConnection cn = new SqlConnection(Configuration.DefaultConnectionString))
        {
            using (SqlCommand cmd = new SqlCommand(query, cn))
            {
                cmd.Parameters.Add("@testID", SqlDbType.Int).Value = testID;

                cn.Open();
                table.Load(cmd.ExecuteReader());
            }
        }

        return table;
    }

Что делать с объектом DataTable? Является ли хорошей практикой размещение SqlCommand внутри using?

Спасибо

Будьте здоровы

11
задан MaiOM 12 December 2011 в 14:38
поделиться