2016-10-20 3 views
0

Я получаю ошибку статического анализа кода для кода ниже,объекта, связанная ссылка на ресурс не выбрасывайте

Объекта ссылается «» dsAlertsPointData теряется, но связанный ресурс не расположен.

internal static void PrepareDataTables(List<AlertsData> processedAlertsData, out DataTable dtAlertsData, out DataSet dsMergedAlertsPointData) 
    { 
     var dsAlertsPointData = new DataSet(); 
     dsMergedAlertsPointData = new DataSet(); 
     dsMergedAlertsPointData.Tables.Add("AlertsPointData"); 

     dtAlertsData = processedAlertsData.ToDataTable(); 

     foreach (var singleAlert in processedAlertsData) 
     { 
      if (singleAlert.AlertsPointsData.Count > 0) 
       dsAlertsPointData.Tables.Add(singleAlert.AlertsPointsData.ToDataTable()); 
     } 

     for (var i = 0; i < dsAlertsPointData.Tables.Count; i++) 
     { 
      dsMergedAlertsPointData.Tables["AlertsPointData"].Merge(dsAlertsPointData.Tables[i]); 
     } 
    } 

Какова резолюция для этого? Благодаря!

+0

Не выписывать DataTable, эта строка не имеет никакого значения. DataTable - это класс, поэтому вы передаете значение ссылки. Покажите метод, который вызывает PrepareDataTable, и сообщите нам, в какой строке произошла ошибка. – mybirthname

ответ

1

Использовать using блок для утилизации dsAlertsPointData. Он освободит ресурсы, удерживаемые им в конце блока using.

using (var dsAlertsPointData = new DataSet()) 
{ 
    dsMergedAlertsPointData = new DataSet(); 
    dsMergedAlertsPointData.Tables.Add("AlertsPointData"); 

    dtAlertsData = processedAlertsData.ToDataTable(); 

    foreach (var singleAlert in processedAlertsData) 
    { 
     if (singleAlert.AlertsPointsData.Count > 0) 
      dsAlertsPointData.Tables.Add(singleAlert.AlertsPointsData.ToDataTable()); 
    } 

    for (var i = 0; i < dsAlertsPointData.Tables.Count; i++) 
    { 
     dsMergedAlertsPointData.Tables["AlertsPointData"].Merge(dsAlertsPointData.Tables[i]); 
    } 
} 
+0

спасибо, но по-прежнему та же ошибка, связанный ресурс не утилизирован. – user2994834

+0

добавить 'using' блоки для' dsMergedAlertsPointData' и 'dtAlertsData', а также –

+0

Я не вижу смысла использовать Dispose в DataSet. DataSet не являются объектами IDisposable. – mybirthname

Смежные вопросы