Asp.net三层结构入门示例源码>>SQLserver/SQLHelper.cs

  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    ///
12    /// SqlHelper类是专门提供给广大用户用于高性能、可升级和最佳练习的sql数据操作
13    ///

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        ///
24        ///  给定连接的数据库用假设参数执行一个sql命令(不返回数据集)
25        ///

26        /// 一个有效的连接字符串
27        /// 命令类型(存储过程, 文本, 等等)
28        /// 存储过程名称或者sql命令语句
29        /// 执行命令所用参数的集合
30        /// 执行命令所影响的行数

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        ///
46        /// 用现有的数据库连接执行一个sql命令(不返回数据集)
47        ///

48        /// 一个现有的数据库连接
49        /// 命令类型(存储过程, 文本, 等等)
50        /// 存储过程名称或者sql命令语句
51        /// 执行命令所用参数的集合
52        /// 执行命令所影响的行数

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        ///
65        ///使用现有的SQL事务执行一个sql命令(不返回数据集)
66        ///

67        ///
68        ///举例: 
69        ///  int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
70        ///
71        /// 一个现有的事务
72        /// 命令类型(存储过程, 文本, 等等)
73        /// 存储过程名称或者sql命令语句
74        /// 执行命令所用参数的集合
75        /// 执行命令所影响的行数

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        ///
86        /// 用执行的数据库连接执行一个返回数据集的sql命令
87        ///

88        ///
89        /// 举例: 
90        ///  SqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
91        ///
92        /// 一个有效的连接字符串
93        /// 命令类型(存储过程, 文本, 等等)
94        /// 存储过程名称或者sql命令语句
95        /// 执行命令所用参数的集合
96        /// 包含结果的读取器

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        ///
125        /// 用指定的数据库连接字符串执行一个命令并返回一个数据集的第一列
126        ///

127        ///
128        ///例如: 
129        ///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
130        ///
131        ///一个有效的连接字符串
132        /// 命令类型(存储过程, 文本, 等等)
133        /// 存储过程名称或者sql命令语句
134        /// 执行命令所用参数的集合
135        /// 用 Convert.To{Type}把类型转换为想要的

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        ///
150        /// 用指定的数据库连接执行一个命令并返回一个数据集的第一列
151        ///

152        ///
153        /// 例如: 
154        ///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
155        ///
156        /// 一个存在的数据库连接
157        /// 命令类型(存储过程, 文本, 等等)
158        /// 存储过程名称或者sql命令语句
159        /// 执行命令所用参数的集合
160        /// 用 Convert.To{Type}把类型转换为想要的

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        ///
173        /// 将参数集合添加到缓存
174        ///

175        /// 添加到缓存的变量
176        /// 一个将要添加到缓存的sql参数集合

177        public static void CacheParameters(string cacheKey, params SqlParameter[] commandParameters)
178        {
179            parmCache[cacheKey] = commandParameters;
180        }

181
182        ///
183        /// 找回缓存参数集合
184        ///

185        /// 用于找回参数的关键字
186        /// 缓存的参数集合

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        ///
203        /// 准备执行一个命令
204        ///

205        /// sql命令
206        /// Sql连接
207        /// Sql事务
208        /// 命令类型例如 存储过程或者文本
209        /// 命令文本,例如:Select * from Products
210        /// 执行命令的参数

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)