sql server - sqlhelper - connections never closed -
i have been using sqlhelper class, got problem after number of user activities in system increased. hosting company mentioned site has been generating heavy load on server's cpu. appears high number of connections being opened database erkaner_slearning, , continue generate load because connections never closed out. below sqlhelper class. have suggestions on code below? not find place need close connection explicitly below.
public abstract class sqlhelper { public static readonly string connectionstring = configurationmanager.connectionstrings["slecturing_connectionstring"].connectionstring; private static hashtable parmcache = hashtable.synchronized(new hashtable()); public static int executenonquery(string connectionstring, commandtype cmdtype, string cmdtext, params sqlparameter[] commandparameters) { sqlcommand cmd = new sqlcommand(); using (sqlconnection conn = new sqlconnection(connectionstring)) { preparecommand(cmd, conn, null, cmdtype, cmdtext, commandparameters); int val = cmd.executenonquery(); cmd.parameters.clear(); return val; } } public static int executenonquery(sqlconnection connection, commandtype cmdtype, string cmdtext, params sqlparameter[] commandparameters) { sqlcommand cmd = new sqlcommand(); preparecommand(cmd, connection, null, cmdtype, cmdtext, commandparameters); int val = cmd.executenonquery(); cmd.parameters.clear(); //connection.close(); return val; } public static int executenonquery(sqltransaction trans, commandtype cmdtype, string cmdtext, params sqlparameter[] commandparameters) { sqlcommand cmd = new sqlcommand(); preparecommand(cmd, trans.connection, trans, cmdtype, cmdtext, commandparameters); int val = cmd.executenonquery(); cmd.parameters.clear(); //trans.connection.close(); return val; } public static sqldatareader executereader(string connectionstring, commandtype cmdtype, string cmdtext, params sqlparameter[] commandparameters) { sqlcommand cmd = new sqlcommand(); sqlconnection conn = new sqlconnection(connectionstring); // use try/catch here because if method throws exception want // close connection throw code, because no datareader exist, hence // commandbehaviour.closeconnection not work try { preparecommand(cmd, conn, null, cmdtype, cmdtext, commandparameters); sqldatareader rdr = cmd.executereader(commandbehavior.closeconnection); cmd.parameters.clear(); return rdr; } catch { conn.close(); throw; } } public static object executescalar(string connectionstring, commandtype cmdtype, string cmdtext, params sqlparameter[] commandparameters) { sqlcommand cmd = new sqlcommand(); using (sqlconnection connection = new sqlconnection(connectionstring)) { preparecommand(cmd, connection, null, cmdtype, cmdtext, commandparameters); object val = cmd.executescalar(); cmd.parameters.clear(); return val; } } public static object executescalar(sqlconnection connection, commandtype cmdtype, string cmdtext, params sqlparameter[] commandparameters) { sqlcommand cmd = new sqlcommand(); preparecommand(cmd, connection, null, cmdtype, cmdtext, commandparameters); object val = cmd.executescalar(); cmd.parameters.clear(); //connection.close(); return val; } /// <summary> /// add parameter array cache /// </summary> /// <param name="cachekey">key parameter cache</param> /// <param name="cmdparms">an array of sqlparamters cached</param> public static void cacheparameters(string cachekey, params sqlparameter[] commandparameters) { parmcache[cachekey] = commandparameters; } /// <summary> /// retrieve cached parameters /// </summary> /// <param name="cachekey">key used lookup parameters</param> /// <returns>cached sqlparamters array</returns> public static sqlparameter[] getcachedparameters(string cachekey) { sqlparameter[] cachedparms = (sqlparameter[])parmcache[cachekey]; if (cachedparms == null) return null; sqlparameter[] clonedparms = new sqlparameter[cachedparms.length]; (int = 0, j = cachedparms.length; < j; i++) clonedparms[i] = (sqlparameter)((icloneable)cachedparms[i]).clone(); return clonedparms; } /// <summary> /// prepare command execution /// </summary> /// <param name="cmd">sqlcommand object</param> /// <param name="conn">sqlconnection object</param> /// <param name="trans">sqltransaction object</param> /// <param name="cmdtype">cmd type e.g. stored procedure or text</param> /// <param name="cmdtext">command text, e.g. select * products</param> /// <param name="cmdparms">sqlparameters use in command</param> private static void preparecommand(sqlcommand cmd, sqlconnection conn, sqltransaction trans, commandtype cmdtype, string cmdtext, sqlparameter[] cmdparms) { // bool mustcloseconnection = false; if (conn.state != connectionstate.open) { conn.open(); } cmd.connection = conn; cmd.commandtext = cmdtext; if (trans != null) cmd.transaction = trans; cmd.commandtype = cmdtype; if (cmdparms != null) { foreach (sqlparameter parm in cmdparms) cmd.parameters.add(parm); } } }
Comments
Post a Comment