If a type implements IDisposable, wrap the use of it in a "using" statement, so that it automatically disposes of objects properly when the block exits.
Sample of SQLHelper Class file (.cs)
using System; using System.Configuration; using System.Data; using System.Data.SqlClient; public class SqlHelper : IDisposable { private bool disposed = false; private string SqlConnectionString = ConfigurationManager.ConnectionStrings["DefaultSQL"].ConnectionString; public DataTable SqlExecuteReader(string queryString) { DataTable dt = new DataTable(); try { using (SqlConnection connection = new SqlConnection(SqlConnectionString)) { using (SqlCommand command = connection.CreateCommand()) { connection.Open(); command.CommandType = CommandType.StoredProcedure; command.CommandText = queryString; SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection); dt.Load(reader); reader.Close(); } connection.Close(); } } catch (Exception ex) { throw new Exception("SqlExecuteReader Error: " + ex.Message); } return dt; } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } private void Dispose(bool disposing) { if (!disposed) { if (disposing) { // Free any other managed objects here. if (SqlConnectionString != null) { SqlConnectionString = null; } } // Free any unmanaged objects here. } disposed = true; } ~SqlHelper() { Dispose(false); } }
Sample of ASP.NET page (.aspx)
protected void Page_Load(object sender, EventArgs e) { DataTable dt = new DataTable(); using (SqlHelper sql = new SqlHelper()) { dt = sql.SqlExecuteReader("sproc_GetAllCustomers"); } }
No comments :
Post a Comment