Asp.net三层结构入门示例源码>>SQLserver/SQLHelper.cs
2008-03-11 21:20
686 查看
1
using System;
2
using System.Configuration;
3
using System.Data;
4
using System.Data.SqlClient;
5
using System.Collections;
6
7
namespace Logindemo.SQLserver
8
...{
9
/**//// download from www.51aspx.com(51aspx.com)
10
11
/// <summary>
12
/// SqlHelper类是专门提供给广大用户用于高性能、可升级和最佳练习的sql数据操作
13
/// </summary>
14
public abstract class SqlHelper
15
...{
16
17
//数据库连接字符串
18
public static readonly string Con = System.Configuration.ConfigurationManager.AppSettings["SQLServer"];
19
20
// 用于缓存参数的HASH表
21
private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
22
23
/**//// <summary>
24
/// 给定连接的数据库用假设参数执行一个sql命令(不返回数据集)
25
/// </summary>
26
/// <param name="connectionString">一个有效的连接字符串</param>
27
/// <param name="commandType">命令类型(存储过程, 文本, 等等)</param>
28
/// <param name="commandText">存储过程名称或者sql命令语句</param>
29
/// <param name="commandParameters">执行命令所用参数的集合</param>
30
/// <returns>执行命令所影响的行数</returns>
31
public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
32
...{
33
34
SqlCommand cmd = new SqlCommand();
35
36
using (SqlConnection conn = new SqlConnection(connectionString))
37
...{
38
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
39
int val = cmd.ExecuteNonQuery();
40
cmd.Parameters.Clear();
41
return val;
42
}
43
}
44
45
/**//// <summary>
46
/// 用现有的数据库连接执行一个sql命令(不返回数据集)
47
/// </summary>
48
/// <param name="conn">一个现有的数据库连接</param>
49
/// <param name="commandType">命令类型(存储过程, 文本, 等等)</param>
50
/// <param name="commandText">存储过程名称或者sql命令语句</param>
51
/// <param name="commandParameters">执行命令所用参数的集合</param>
52
/// <returns>执行命令所影响的行数</returns>
53
public static int ExecuteNonQuery(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
54
...{
55
56
SqlCommand cmd = new SqlCommand();
57
58
PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
59
int val = cmd.ExecuteNonQuery();
60
cmd.Parameters.Clear();
61
return val;
62
}
63
64
/**//// <summary>
65
///使用现有的SQL事务执行一个sql命令(不返回数据集)
66
/// </summary>
67
/// <remarks>
68
///举例:
69
/// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
70
/// </remarks>
71
/// <param name="trans">一个现有的事务</param>
72
/// <param name="commandType">命令类型(存储过程, 文本, 等等)</param>
73
/// <param name="commandText">存储过程名称或者sql命令语句</param>
74
/// <param name="commandParameters">执行命令所用参数的集合</param>
75
/// <returns>执行命令所影响的行数</returns>
76
public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
77
...{
78
SqlCommand cmd = new SqlCommand();
79
PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);
80
int val = cmd.ExecuteNonQuery();
81
cmd.Parameters.Clear();
82
return val;
83
}
84
85
/**//// <summary>
86
/// 用执行的数据库连接执行一个返回数据集的sql命令
87
/// </summary>
88
/// <remarks>
89
/// 举例:
90
/// SqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
91
/// </remarks>
92
/// <param name="connectionString">一个有效的连接字符串</param>
93
/// <param name="commandType">命令类型(存储过程, 文本, 等等)</param>
94
/// <param name="commandText">存储过程名称或者sql命令语句</param>
95
/// <param name="commandParameters">执行命令所用参数的集合</param>
96
/// <returns>包含结果的读取器</returns>
97
public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
98
...{
99
//创建一个SqlCommand对象
100
SqlCommand cmd = new SqlCommand();
101
//创建一个SqlConnection对象
102
SqlConnection conn = new SqlConnection(connectionString);
103
104
//在这里我们用一个try/catch结构执行sql文本命令/存储过程,因为如果这个方法产生一个异常我们要关闭连接,因为没有读取器存在,
105
//因此commandBehaviour.CloseConnection 就不会执行
106
try
107
...{
108
//调用 PrepareCommand 方法,对 SqlCommand 对象设置参数
109
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
110
//调用 SqlCommand 的 ExecuteReader 方法
111
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
112
//清除参数
113
cmd.Parameters.Clear();
114
return reader;
115
}
116
catch
117
...{
118
//关闭连接,抛出异常
119
conn.Close();
120
throw;
121
}
122
}
123
124
/**//// <summary>
125
/// 用指定的数据库连接字符串执行一个命令并返回一个数据集的第一列
126
/// </summary>
127
/// <remarks>
128
///例如:
129
/// Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
130
/// </remarks>
131
///<param name="connectionString">一个有效的连接字符串</param>
132
/// <param name="commandType">命令类型(存储过程, 文本, 等等)</param>
133
/// <param name="commandText">存储过程名称或者sql命令语句</param>
134
/// <param name="commandParameters">执行命令所用参数的集合</param>
135
/// <returns>用 Convert.To{Type}把类型转换为想要的 </returns>
136
public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
137
...{
138
SqlCommand cmd = new SqlCommand();
139
140
using (SqlConnection connection = new SqlConnection(connectionString))
141
...{
142
PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
143
object val = cmd.ExecuteScalar();
144
cmd.Parameters.Clear();
145
return val;
146
}
147
}
148
149
/**//// <summary>
150
/// 用指定的数据库连接执行一个命令并返回一个数据集的第一列
151
/// </summary>
152
/// <remarks>
153
/// 例如:
154
/// Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
155
/// </remarks>
156
/// <param name="conn">一个存在的数据库连接</param>
157
/// <param name="commandType">命令类型(存储过程, 文本, 等等)</param>
158
/// <param name="commandText">存储过程名称或者sql命令语句</param>
159
/// <param name="commandParameters">执行命令所用参数的集合</param>
160
/// <returns>用 Convert.To{Type}把类型转换为想要的 </returns>
161
public static object ExecuteScalar(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
162
...{
163
164
SqlCommand cmd = new SqlCommand();
165
166
PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
167
object val = cmd.ExecuteScalar();
168
cmd.Parameters.Clear();
169
return val;
170
}
171
172
/**//// <summary>
173
/// 将参数集合添加到缓存
174
/// </summary>
175
/// <param name="cacheKey">添加到缓存的变量</param>
176
/// <param name="cmdParms">一个将要添加到缓存的sql参数集合</param>
177
public static void CacheParameters(string cacheKey, params SqlParameter[] commandParameters)
178
...{
179
parmCache[cacheKey] = commandParameters;
180
}
181
182
/**//// <summary>
183
/// 找回缓存参数集合
184
/// </summary>
185
/// <param name="cacheKey">用于找回参数的关键字</param>
186
/// <returns>缓存的参数集合</returns>
187
public static SqlParameter[] GetCachedParameters(string cacheKey)
188
...{
189
SqlParameter[] cachedParms = (SqlParameter[])parmCache[cacheKey];
190
191
if (cachedParms == null)
192
return null;
193
194
SqlParameter[] clonedParms = new SqlParameter[cachedParms.Length];
195
196
for (int i = 0, j = cachedParms.Length; i < j; i++)
197
clonedParms[i] = (SqlParameter)((ICloneable)cachedParms[i]).Clone();
198
199
return clonedParms;
200
}
201
202
/**//// <summary>
203
/// 准备执行一个命令
204
/// </summary>
205
/// <param name="cmd">sql命令</param>
206
/// <param name="conn">Sql连接</param>
207
/// <param name="trans">Sql事务</param>
208
/// <param name="cmdType">命令类型例如 存储过程或者文本</param>
209
/// <param name="cmdText">命令文本,例如:Select * from Products</param>
210
/// <param name="cmdParms">执行命令的参数</param>
211
private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
212
...{
213
214
if (conn.State != ConnectionState.Open)
215
conn.Open();
216
217
cmd.Connection = conn;
218
cmd.CommandText = cmdText;
219
220
if (trans != null)
221
cmd.Transaction = trans;
222
223
cmd.CommandType = cmdType;
224
225
if (cmdParms != null)
226
...{
227
foreach (SqlParameter parm in cmdParms)
228
cmd.Parameters.Add(parm);
229
}
230
}
231
}
232
}
using System;
2
using System.Configuration;
3
using System.Data;
4
using System.Data.SqlClient;
5
using System.Collections;
6
7
namespace Logindemo.SQLserver
8
...{
9
/**//// download from www.51aspx.com(51aspx.com)
10
11
/// <summary>
12
/// SqlHelper类是专门提供给广大用户用于高性能、可升级和最佳练习的sql数据操作
13
/// </summary>
14
public abstract class SqlHelper
15
...{
16
17
//数据库连接字符串
18
public static readonly string Con = System.Configuration.ConfigurationManager.AppSettings["SQLServer"];
19
20
// 用于缓存参数的HASH表
21
private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
22
23
/**//// <summary>
24
/// 给定连接的数据库用假设参数执行一个sql命令(不返回数据集)
25
/// </summary>
26
/// <param name="connectionString">一个有效的连接字符串</param>
27
/// <param name="commandType">命令类型(存储过程, 文本, 等等)</param>
28
/// <param name="commandText">存储过程名称或者sql命令语句</param>
29
/// <param name="commandParameters">执行命令所用参数的集合</param>
30
/// <returns>执行命令所影响的行数</returns>
31
public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
32
...{
33
34
SqlCommand cmd = new SqlCommand();
35
36
using (SqlConnection conn = new SqlConnection(connectionString))
37
...{
38
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
39
int val = cmd.ExecuteNonQuery();
40
cmd.Parameters.Clear();
41
return val;
42
}
43
}
44
45
/**//// <summary>
46
/// 用现有的数据库连接执行一个sql命令(不返回数据集)
47
/// </summary>
48
/// <param name="conn">一个现有的数据库连接</param>
49
/// <param name="commandType">命令类型(存储过程, 文本, 等等)</param>
50
/// <param name="commandText">存储过程名称或者sql命令语句</param>
51
/// <param name="commandParameters">执行命令所用参数的集合</param>
52
/// <returns>执行命令所影响的行数</returns>
53
public static int ExecuteNonQuery(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
54
...{
55
56
SqlCommand cmd = new SqlCommand();
57
58
PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
59
int val = cmd.ExecuteNonQuery();
60
cmd.Parameters.Clear();
61
return val;
62
}
63
64
/**//// <summary>
65
///使用现有的SQL事务执行一个sql命令(不返回数据集)
66
/// </summary>
67
/// <remarks>
68
///举例:
69
/// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
70
/// </remarks>
71
/// <param name="trans">一个现有的事务</param>
72
/// <param name="commandType">命令类型(存储过程, 文本, 等等)</param>
73
/// <param name="commandText">存储过程名称或者sql命令语句</param>
74
/// <param name="commandParameters">执行命令所用参数的集合</param>
75
/// <returns>执行命令所影响的行数</returns>
76
public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
77
...{
78
SqlCommand cmd = new SqlCommand();
79
PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);
80
int val = cmd.ExecuteNonQuery();
81
cmd.Parameters.Clear();
82
return val;
83
}
84
85
/**//// <summary>
86
/// 用执行的数据库连接执行一个返回数据集的sql命令
87
/// </summary>
88
/// <remarks>
89
/// 举例:
90
/// SqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
91
/// </remarks>
92
/// <param name="connectionString">一个有效的连接字符串</param>
93
/// <param name="commandType">命令类型(存储过程, 文本, 等等)</param>
94
/// <param name="commandText">存储过程名称或者sql命令语句</param>
95
/// <param name="commandParameters">执行命令所用参数的集合</param>
96
/// <returns>包含结果的读取器</returns>
97
public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
98
...{
99
//创建一个SqlCommand对象
100
SqlCommand cmd = new SqlCommand();
101
//创建一个SqlConnection对象
102
SqlConnection conn = new SqlConnection(connectionString);
103
104
//在这里我们用一个try/catch结构执行sql文本命令/存储过程,因为如果这个方法产生一个异常我们要关闭连接,因为没有读取器存在,
105
//因此commandBehaviour.CloseConnection 就不会执行
106
try
107
...{
108
//调用 PrepareCommand 方法,对 SqlCommand 对象设置参数
109
PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
110
//调用 SqlCommand 的 ExecuteReader 方法
111
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
112
//清除参数
113
cmd.Parameters.Clear();
114
return reader;
115
}
116
catch
117
...{
118
//关闭连接,抛出异常
119
conn.Close();
120
throw;
121
}
122
}
123
124
/**//// <summary>
125
/// 用指定的数据库连接字符串执行一个命令并返回一个数据集的第一列
126
/// </summary>
127
/// <remarks>
128
///例如:
129
/// Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
130
/// </remarks>
131
///<param name="connectionString">一个有效的连接字符串</param>
132
/// <param name="commandType">命令类型(存储过程, 文本, 等等)</param>
133
/// <param name="commandText">存储过程名称或者sql命令语句</param>
134
/// <param name="commandParameters">执行命令所用参数的集合</param>
135
/// <returns>用 Convert.To{Type}把类型转换为想要的 </returns>
136
public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
137
...{
138
SqlCommand cmd = new SqlCommand();
139
140
using (SqlConnection connection = new SqlConnection(connectionString))
141
...{
142
PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
143
object val = cmd.ExecuteScalar();
144
cmd.Parameters.Clear();
145
return val;
146
}
147
}
148
149
/**//// <summary>
150
/// 用指定的数据库连接执行一个命令并返回一个数据集的第一列
151
/// </summary>
152
/// <remarks>
153
/// 例如:
154
/// Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
155
/// </remarks>
156
/// <param name="conn">一个存在的数据库连接</param>
157
/// <param name="commandType">命令类型(存储过程, 文本, 等等)</param>
158
/// <param name="commandText">存储过程名称或者sql命令语句</param>
159
/// <param name="commandParameters">执行命令所用参数的集合</param>
160
/// <returns>用 Convert.To{Type}把类型转换为想要的 </returns>
161
public static object ExecuteScalar(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
162
...{
163
164
SqlCommand cmd = new SqlCommand();
165
166
PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
167
object val = cmd.ExecuteScalar();
168
cmd.Parameters.Clear();
169
return val;
170
}
171
172
/**//// <summary>
173
/// 将参数集合添加到缓存
174
/// </summary>
175
/// <param name="cacheKey">添加到缓存的变量</param>
176
/// <param name="cmdParms">一个将要添加到缓存的sql参数集合</param>
177
public static void CacheParameters(string cacheKey, params SqlParameter[] commandParameters)
178
...{
179
parmCache[cacheKey] = commandParameters;
180
}
181
182
/**//// <summary>
183
/// 找回缓存参数集合
184
/// </summary>
185
/// <param name="cacheKey">用于找回参数的关键字</param>
186
/// <returns>缓存的参数集合</returns>
187
public static SqlParameter[] GetCachedParameters(string cacheKey)
188
...{
189
SqlParameter[] cachedParms = (SqlParameter[])parmCache[cacheKey];
190
191
if (cachedParms == null)
192
return null;
193
194
SqlParameter[] clonedParms = new SqlParameter[cachedParms.Length];
195
196
for (int i = 0, j = cachedParms.Length; i < j; i++)
197
clonedParms[i] = (SqlParameter)((ICloneable)cachedParms[i]).Clone();
198
199
return clonedParms;
200
}
201
202
/**//// <summary>
203
/// 准备执行一个命令
204
/// </summary>
205
/// <param name="cmd">sql命令</param>
206
/// <param name="conn">Sql连接</param>
207
/// <param name="trans">Sql事务</param>
208
/// <param name="cmdType">命令类型例如 存储过程或者文本</param>
209
/// <param name="cmdText">命令文本,例如:Select * from Products</param>
210
/// <param name="cmdParms">执行命令的参数</param>
211
private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
212
...{
213
214
if (conn.State != ConnectionState.Open)
215
conn.Open();
216
217
cmd.Connection = conn;
218
cmd.CommandText = cmdText;
219
220
if (trans != null)
221
cmd.Transaction = trans;
222
223
cmd.CommandType = cmdType;
224
225
if (cmdParms != null)
226
...{
227
foreach (SqlParameter parm in cmdParms)
228
cmd.Parameters.Add(parm);
229
}
230
}
231
}
232
}
相关文章推荐
- Asp.net三层结构入门示例源码>>SQLserver/SQLHelper.cs
- Asp.net"三层结构"原理与用意学习入门教程(三
- Microsoft ASP.NET MVC Preview 5 及LINQ TO SQL最新版开发示例演示(提供源码下载)
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<SQL_Server_视图_函数_存储过程_触发器等>(二十三)
- <ASP.NET4 从入门到精通>学习笔记1
- ASP.NET Core MVC 和 Visual Studio入门(五) 使用 SQL Server LocalDB
- <ASP.NET4 从入门到精通>学习笔记3
- Microsoft ASP.NET MVC Preview 5 及LINQ TO SQL最新版开发示例演示(提供源码下载)
- asp.net DataSet转换成List<model>[源码]
- asp.net+sqlserver实现的简单高效的权限设计示例
- Asp.net"三层结构"原理与用意学习入门教程(四)
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<SQL_Server_常用查询>(二十二)
- 使用StructureMap扩展ASP.NET MVC三层结构框架系列文章总结篇(附源码下载)
- ASP.NET中使用<script runat="server">
- asp.net--构建网站第一步(站点结构分析—>建立站点地图)
- Asp.net"三层结构"原理与用意学习入门教程(一)
- Asp.net"三层结构"原理与用意学习入门教程(五)
- <ASP.NET4 从入门到精通>学习笔记1
- 使用StructureMap扩展ASP.NET MVC三层结构框架系列文章总结篇(附源码下载)
- <转>ASP.NET MVC HtmlHelper用法大全