温馨提示:代码在线浏览功能只能做为源码浏览参考,不能展示项目的全部,如果想更进一步了解该代码请下载:Ajax实现无刷新添加和删除数据源码
当前文件路径:AjaxInsertDelete/App_Code/SqlHelper.cs

1using System; 2
using System.Data; 3
using System.Configuration; 4
using System.Web; 5
using System.Web.Security; 6
using System.Collections; 7
using System.Data.SqlClient; 8
9
10
/// <summary> 11
/// 数据库的通用访问代码 12
/// 此类为抽象类,不允许实例化,在应用时直接调用即可 13
/// </summary> 14
public 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
} 254
ExecuteDataSet







}