N
Nayt Grochowski
Does anyone see any problem with the loading a SqlConnection into the
System.Web.HttpContextCurrent.Items collection in a Page's Constructor. Then
Closing and Disposing of it the OnUnload method?
Connection would not be "Opened" until it was actually used (this is handled
by a common "Helper" class - similar to Microsoft's SqlHelper Application
Block), Ie:
public class MyPage : Page {
public MyPage() {
System.Web.HttpContext.Current.Items["currentConnection"] = new
SqlConnection();
((SqlConnection)System.Web.HttpContext.Current.Items["currentConnection"]).C
onnectionString = "connection_string_here";
}
... Object calls here to SELECT/INSERT/UPDATE data using the common
connection
override protected void OnUnload(EventArgs args) {
((SqlConnection)System.Web.HttpContext.Current.Items["currentConnection"]).C
lose();
((SqlConnection)System.Web.HttpContext.Current.Items["currentConnection"]).D
ispose();
base.OnUnload(args);
}
}
This could allow other objects to use this connection and would greatly
simplify connection usage.
Could also use the same exact concept for a Transaction that is used in
multiple objects that know nothing about each other, ie:
(each Save method below uses the Connection and Transaction objects stored
in System.Web.HttpContext.Current.Items)
public SaveData() {
System.Web.HttpContext.Current.Items["currentTransaction"]
=
((SqlConnection)System.Web.HttpContext.Current.Items["currentConnection"]).B
eginTransaction();
try {
ClientObject.Save();
AddressObject.Save(ClientObject.ID);
PhoneObject.Save(ClientObject.ID);
((SqlTransaction)System.Web.HttpContext.Current.Items["currentTransaction"].
Transaction).Commit();
} catch (Exception exp) {
((SqlTransaction)System.Web.HttpContext.Current.Items["currentTransaction"].
Transaction).Rollback();
throw(exp);
} finally {
((SqlTransaction)System.Web.HttpContext.Current.Items["currentTransaction"].
Transaction).Dispose();
}
}
Does anyone see any major performance issues or other potential problems
with this? Thanks for any input!
Nayt Grochowski
System.Web.HttpContextCurrent.Items collection in a Page's Constructor. Then
Closing and Disposing of it the OnUnload method?
Connection would not be "Opened" until it was actually used (this is handled
by a common "Helper" class - similar to Microsoft's SqlHelper Application
Block), Ie:
public class MyPage : Page {
public MyPage() {
System.Web.HttpContext.Current.Items["currentConnection"] = new
SqlConnection();
((SqlConnection)System.Web.HttpContext.Current.Items["currentConnection"]).C
onnectionString = "connection_string_here";
}
... Object calls here to SELECT/INSERT/UPDATE data using the common
connection
override protected void OnUnload(EventArgs args) {
((SqlConnection)System.Web.HttpContext.Current.Items["currentConnection"]).C
lose();
((SqlConnection)System.Web.HttpContext.Current.Items["currentConnection"]).D
ispose();
base.OnUnload(args);
}
}
This could allow other objects to use this connection and would greatly
simplify connection usage.
Could also use the same exact concept for a Transaction that is used in
multiple objects that know nothing about each other, ie:
(each Save method below uses the Connection and Transaction objects stored
in System.Web.HttpContext.Current.Items)
public SaveData() {
System.Web.HttpContext.Current.Items["currentTransaction"]
=
((SqlConnection)System.Web.HttpContext.Current.Items["currentConnection"]).B
eginTransaction();
try {
ClientObject.Save();
AddressObject.Save(ClientObject.ID);
PhoneObject.Save(ClientObject.ID);
((SqlTransaction)System.Web.HttpContext.Current.Items["currentTransaction"].
Transaction).Commit();
} catch (Exception exp) {
((SqlTransaction)System.Web.HttpContext.Current.Items["currentTransaction"].
Transaction).Rollback();
throw(exp);
} finally {
((SqlTransaction)System.Web.HttpContext.Current.Items["currentTransaction"].
Transaction).Dispose();
}
}
Does anyone see any major performance issues or other potential problems
with this? Thanks for any input!
Nayt Grochowski