Как автоматически закрыть SqlConnection после SqlMapper GridReader в 3-й библиотеке

Вот фрагмент кода от моего собственного помощника, но у него есть некоторые недостатки.

  /// <summary>
  /// Execute a command that returns multiple result sets, and access each in turn
  /// </summary>
  public static  SqlMapper.GridReader QueryMultiple(string sql, dynamic param = null, string connectionName = null)
  {

      using (SqlConnection connection = GetOpenConnection(connectionName))

      { return connection.QueryMultiple(sql, param);}

  }

QueryMultiple вызывается и закрывается вручную внешней программой. Вскоре после этого SqlConnection должен закрыться автоматически, как завернуть мой хелпер? Заранее спасибо.


person Kevin Auds    schedule 22.10.2012    source источник


Ответы (1)


Как ни странно, одним из вариантов здесь может быть: не давать ему открытое соединение. Это еще не развернуто в nuget, но если вы вытащите версию из github, на самом деле теперь потребуется гораздо больше контроля над соединением, если это необходимо. Все основные методы (Query[<T>], QueryMultiple, Execute) теперь нормально работают с закрытыми соединениями, закрывая их снова, когда это возможно. Итак, если вместо этого у вас было:

return GetClosedConnection(connectionName).QueryMultiple(sql, param);

затем он автоматически закроется, когда GridReader достигнет конца данных. Обратите внимание, что я реструктурировал его, чтобы гарантировать, что мы не Dispose() соединение при выходе из метода.

person Marc Gravell    schedule 22.10.2012
comment
когда я делаю то, что вы сказали мне, ошибка заключается в том, что соединение было закрыто, когда считыватель сетки - person Kevin Auds; 04.11.2012
comment
@ Кевин, ты используешь текущий источник? Или dll от nuget? - person Marc Gravell; 04.11.2012
comment
извините за мою невнимательность. После того, как я вытащил новейший исходный код из github, он работает хорошо. Большое спасибо, Марк Гравелл. Я буду продолжать использовать этот замечательный инструмент. - person Kevin Auds; 05.11.2012