您目前尚未登陆,请选择【登陆】或【注册
首页->功能源码->Ajax实现无刷新添加和删除数据源码>>App-Code/SqlHelper.cs>>代码在线查看
温馨提示:代码在线浏览功能只能做为源码浏览参考,不能展示项目的全部,如果想更进一步了解该代码请下载:Ajax实现无刷新添加和删除数据源码


当前文件路径:AjaxInsertDelete/App_Code/SqlHelper.cs 文件类型
普通视图
		            
1using System; 2using System.Data; 3using System.Configuration; 4using System.Web; 5using System.Web.Security; 6using System.Collections; 7using System.Data.SqlClient; 8 9 10/// <summary> 11/// 数据库的通用访问代码 12/// 此类为抽象类,不允许实例化,在应用时直接调用即可 13/// </summary> 14public abstract class SqlHelper 15{ 16 //获取数据库连接字符串,其属于静态变量且只读,项目中所有文档可以直接使用,但不能修改 17 public static readonly string ConnectionStringLocalTransaction = ConfigurationManager.ConnectionStrings["str_Sql"].ConnectionString; 18 19 // 哈希表用来存储缓存的参数信息,哈希表可以存储任意类型的参数。 20 private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable()); 21 22 /*返回数据库连接*/ 23 public static SqlConnection getConnection() 24 { 25 SqlConnection c = new SqlConnection(ConnectionStringLocalTransaction); 26 return c; 27 } 28 29 /// <summary> 30 ///执行一个不需要返回值的SqlCommand命令,通过指定专用的连接字符串。 31 /// 使用参数数组形式提供参数列表 32 /// </summary> 33 /// <remarks> 34 /// 使用示例: 35 /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24)); 36 /// </remarks> 37 /// <param name="connectionString">一个有效的数据库连接字符串</param> 38 /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param> 39 /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param> 40 /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> 41 /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns> 42 public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) 43 { 44 45 SqlCommand cmd = new SqlCommand(); 46 47 using (SqlConnection conn = new SqlConnection(connectionString)) 48 { 49 //通过PrePareCommand方法将参数逐个加入到SqlCommand的参数集合中 50 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); 51 int val = cmd.ExecuteNonQuery(); 52 53 //清空SqlCommand中的参数列表 54 cmd.Parameters.Clear(); 55 return val; 56 } 57 } 58 59 /// <summary> 60 ///执行一条不返回结果的SqlCommand,通过一个已经存在的数据库连接 61 /// 使用参数数组提供参数 62 /// </summary> 63 /// <remarks> 64 /// 使用示例: 65 /// int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24)); 66 /// </remarks> 67 /// <param name="conn">一个现有的数据库连接</param> 68 /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param> 69 /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param> 70 /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> 71 /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns> 72 public static int ExecuteNonQuery(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) 73 { 74 75 SqlCommand cmd = new SqlCommand(); 76 77 PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters); 78 int val = cmd.ExecuteNonQuery(); 79 cmd.Parameters.Clear(); 80 return val; 81 } 82 83 /// <summary> 84 /// 执行一条不返回结果的SqlCommand,通过一个已经存在的数据库事物处理 85 /// 使用参数数组提供参数 86 /// </summary> 87 /// <remarks> 88 /// 使用示例: 89 /// int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24)); 90 /// </remarks> 91 /// <param name="trans">一个存在的 sql 事物处理</param> 92 /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param> 93 /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param> 94 /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> 95 /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns> 96 public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) 97 { 98 SqlCommand cmd = new SqlCommand(); 99 PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters); 100 int val = cmd.ExecuteNonQuery(); 101 cmd.Parameters.Clear(); 102 return val; 103 } 104 105 /// <summary> 106 /// 执行一条返回结果集的SqlCommand命令,通过专用的连接字符串。 107 /// 使用参数数组提供参数 108 /// </summary> 109 /// <remarks> 110 /// 使用示例: 111 /// SqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24)); 112 /// </remarks> 113 /// <param name="connectionString">一个有效的数据库连接字符串</param> 114 /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param> 115 /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param> 116 /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> 117 /// <returns>返回一个包含结果的SqlDataReader</returns> 118 public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) 119 { 120 SqlCommand cmd = new SqlCommand(); 121 SqlConnection conn = new SqlConnection(connectionString); 122 123 // 在这里使用try/catch处理是因为如果方法出现异常,则SqlDataReader就不存在, 124 //CommandBehavior.CloseConnection的语句就不会执行,触发的异常由catch捕获。 125 //关闭数据库连接,并通过throw再次引发捕捉到的异常。 126 try 127 { 128 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); 129 SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); 130 cmd.Parameters.Clear(); 131 return rdr; 132 } 133 catch 134 { 135 conn.Close(); 136 throw; 137 } 138 } 139 140 /// <summary> 141 /// 执行一条返回第一条记录第一列的SqlCommand命令,通过专用的连接字符串。 142 /// 使用参数数组提供参数 143 /// </summary> 144 /// <remarks> 145 /// 使用示例: 146 /// Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24)); 147 /// </remarks> 148 /// <param name="connectionString">一个有效的数据库连接字符串</param> 149 /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param> 150 /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param> 151 /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> 152 /// <returns>返回一个object类型的数据,可以通过 Convert.To{Type}方法转换类型</returns> 153 public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) 154 { 155 SqlCommand cmd = new SqlCommand(); 156 157 using (SqlConnection connection = new SqlConnection(connectionString)) 158 { 159 PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters); 160 object val = cmd.ExecuteScalar(); 161 cmd.Parameters.Clear(); 162 return val; 163 } 164 } 165 166 /// <summary> 167 /// 执行一条返回第一条记录第一列的SqlCommand命令,通过已经存在的数据库连接。 168 /// 使用参数数组提供参数 169 /// </summary> 170 /// <remarks> 171 /// 使用示例: 172 /// Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24)); 173 /// </remarks> 174 /// <param name="conn">一个已经存在的数据库连接</param> 175 /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param> 176 /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param> 177 /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> 178 /// <returns>返回一个object类型的数据,可以通过 Convert.To{Type}方法转换类型</returns> 179 public static object ExecuteScalar(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) 180 { 181 182 SqlCommand cmd = new SqlCommand(); 183 184 PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters); 185 object val = cmd.ExecuteScalar(); 186 cmd.Parameters.Clear(); 187 return val; 188 } 189 190 /// <summary> 191 /// 缓存参数数组 192 /// </summary> 193 /// <param name="cacheKey">参数缓存的键值</param> 194 /// <param name="cmdParms">被缓存的参数列表</param> 195 public static void CacheParameters(string cacheKey, params SqlParameter[] commandParameters) 196 { 197 parmCache[cacheKey] = commandParameters; 198 } 199 200 /// <summary> 201 /// 获取被缓存的参数 202 /// </summary> 203 /// <param name="cacheKey">用于查找参数的KEY值</param> 204 /// <returns>返回缓存的参数数组</returns> 205 public static SqlParameter[] GetCachedParameters(string cacheKey) 206 { 207 SqlParameter[] cachedParms = (SqlParameter[])parmCache[cacheKey]; 208 209 if (cachedParms == null) 210 return null; 211 212 //新建一个参数的克隆列表 213 SqlParameter[] clonedParms = new SqlParameter[cachedParms.Length]; 214 215 //通过循环为克隆参数列表赋值 216 for (int i = 0, j = cachedParms.Length; i < j; i++) 217 //使用clone方法复制参数列表中的参数 218 clonedParms[i] = (SqlParameter)((ICloneable)cachedParms[i]).Clone(); 219 220 return clonedParms; 221 } 222 223 /// <summary> 224 /// 为执行命令准备参数 225 /// </summary> 226 /// <param name="cmd">SqlCommand 命令</param> 227 /// <param name="conn">已经存在的数据库连接</param> 228 /// <param name="trans">数据库事物处理</param> 229 /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param> 230 /// <param name="cmdText">Command text,T-SQL语句 例如 Select * from Products</param> 231 /// <param name="cmdParms">返回带参数的命令</param> 232 private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) 233 { 234 235 //判断数据库连接状态 236 if (conn.State != ConnectionState.Open) 237 conn.Open(); 238 239 cmd.Connection = conn; 240 cmd.CommandText = cmdText; 241 242 //判断是否需要事物处理 243 if (trans != null) 244 cmd.Transaction = trans; 245 246 cmd.CommandType = cmdType; 247 248 if (cmdParms != null) 249 { 250 foreach (SqlParameter parm in cmdParms) 251 cmd.Parameters.Add(parm); 252 } 253 } 254ExecuteDataSet