Cómo cerrar SqlConnection automáticamente después de SqlMapper GridReader en 3rd Library

dapper

Pregunta

Aquí hay un fragmento de código de mi propio ayudante, pero tiene algunas fallas.

  /// <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 es llamado y cerrado manualmente por un programa externo. Poco después, SqlConnection debería cerrarse automáticamente, ¿cómo concluir mi ayuda? Gracias por adelantado.

Respuesta aceptada

Curiosamente, una opción aquí podría ser: no darle una conexión abierta. Esto todavía no se implementó para nuget, pero si extraes la versión de github, ahora se necesita mucho más control sobre la conexión si es necesario. Todos los métodos principales ( Query[<T>] , QueryMultiple , Execute ) ahora funcionan bien con conexiones cerradas, cerrándolo nuevamente cuando puede. Entonces, si tuvieras:

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

luego se cerrará automáticamente cuando el GridReader llegue al final de los datos. Tenga en cuenta que lo he reestructurado para garantizar que no Dispose() la conexión al abandonar el método.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow