1
using
System;
2 using System.Data;
3 using System.Configuration;
4 using System.Data.OleDb;
5 using System.Collections;
6
7 namespace MobileHealth
8 {
9 ///
10 /// AcceHelper 的摘要说明
11 ///
12 public static class AccessHelper
13 {
14 // 数据库连接字符串
15 public static readonly string conn = System.Configuration.ConfigurationManager.ConnectionStrings[ " ConnectionString " ].ConnectionString;
16 // 用于缓存参数的HASH表
17 private static Hashtable parmCache = Hashtable.Synchronized( new Hashtable());
18 ///
19 /// 给定连接的数据库用假设参数执行一个sql命令(不返回数据集)
20 ///
21 /// 一个有效的连接字符串
22 /// 存储过程名称或者sql命令语句
23 /// 执行命令所用参数的集合
24 ///
执行命令所影响的行数
25 public static int ExecuteNonQuery( string connectionString, string cmdText, params OleDbParameter[] commandParameters)
26 {
27 OleDbCommand cmd = new OleDbCommand();
28 using (OleDbConnection conn = new OleDbConnection(connectionString))
29 {
30 PrepareCommand(cmd, conn, null , cmdText, commandParameters);
31 int val = cmd.ExecuteNonQuery();
32 cmd.Parameters.Clear();
33 return val;
34 }
35 }
36 ///
37 /// 用现有的数据库连接执行一个sql命令(不返回数据集)
38 ///
39 ///
40 /// 举例:
41 /// int result = ExecuteNonQuery(connString, "PublishOrders", new OleDbParameter("@prodid", 24));
42 ///
43 /// 一个现有的数据库连接
44 /// 存储过程名称或者sql命令语句
45 /// 执行命令所用参数的集合
46 ///
执行命令所影响的行数
47 public static int ExecuteNonQuery(OleDbConnection connection, string cmdText, params OleDbParameter[] commandParameters)
48 {
49 OleDbCommand cmd = new OleDbCommand();
50 PrepareCommand(cmd, connection, null , cmdText, commandParameters);
51 int val = cmd.ExecuteNonQuery();
52 cmd.Parameters.Clear();
53 return val;
54 }
55 ///
56 /// 使用现有的SQL事务执行一个sql命令(不返回数据集)
57 ///
58 ///
59 /// 举例:
60 /// int result = ExecuteNonQuery(trans, "PublishOrders", new OleDbParameter("@prodid", 24));
61 ///
62 /// 一个现有的事务
63 /// 存储过程名称或者sql命令语句
64 /// 执行命令所用参数的集合
65 ///
执行命令所影响的行数
66 public static int ExecuteNonQuery(OleDbTransaction trans, string cmdText, params OleDbParameter[] commandParameters)
67 {
68 OleDbCommand cmd = new OleDbCommand();
69 PrepareCommand(cmd, trans.Connection, trans, cmdText, commandParameters);
70 int val = cmd.ExecuteNonQuery();
71 cmd.Parameters.Clear();
72 return val;
73 }
74 ///
75 /// 用执行的数据库连接执行一个返回数据集的sql命令
76 ///
77 ///
78 /// 举例:
79 /// OleDbDataReader r = ExecuteReader(connString, "PublishOrders", new OleDbParameter("@prodid", 24));
80 ///
81 /// 一个有效的连接字符串
82 /// 存储过程名称或者sql命令语句
83 /// 执行命令所用参数的集合
84 ///
包含结果的读取器
85 public static OleDbDataReader ExecuteReader( string connectionString, string cmdText, params OleDbParameter[] commandParameters)
86 {
87 // 创建一个SqlCommand对象
88 OleDbCommand cmd = new OleDbCommand();
89 // 创建一个SqlConnection对象
90 OleDbConnection conn = new OleDbConnection(connectionString);
91 // 在这里我们用一个try/catch结构执行sql文本命令/存储过程,因为如果这个方法产生一个异常我们要关闭连接,因为没有读取器存在,
92 // 因此commandBehaviour.CloseConnection 就不会执行
93 try
94 {
95 // 调用 PrepareCommand 方法,对 SqlCommand 对象设置参数
96 PrepareCommand(cmd, conn, null , cmdText, commandParameters);
97 // 调用 SqlCommand 的 ExecuteReader 方法
98 OleDbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
99 // 清除参数
100 cmd.Parameters.Clear();
101 return reader;
102 }
103 catch
104 {
105 // 关闭连接,抛出异常
106 conn.Close();
107 throw ;
108 }
109 }
110 ///
111 /// 返回一个DataSet数据集
112 ///
113 /// 一个有效的连接字符串
114 /// 存储过程名称或者sql命令语句
115 /// 执行命令所用参数的集合
116 ///
包含结果的数据集
117 public static DataSet ExecuteDataSet( string connectionString, string cmdText, params OleDbParameter[] commandParameters)
118 {
119 // 创建一个SqlCommand对象,并对其进行初始化
120 OleDbCommand cmd = new OleDbCommand();
121 using (OleDbConnection conn = new OleDbConnection(connectionString))
122 {
123 PrepareCommand(cmd, conn, null , cmdText, commandParameters);
124 // 创建SqlDataAdapter对象以及DataSet
125 OleDbDataAdapter da = new OleDbDataAdapter(cmd);
126 DataSet ds = new DataSet();
127 try
128 {
129 // 填充ds
130 da.Fill(ds);
131 // 清除cmd的参数集合
132 cmd.Parameters.Clear();
133 // 返回ds
134 return ds;
135 }
136 catch
137 {
138 // 关闭连接,抛出异常
139 conn.Close();
140 throw ;
141 }
142 }
143 }
144 ///
145 /// 用指定的数据库连接字符串执行一个命令并返回一个数据集的第一列
146 ///
147 ///
148 /// 例如:
149 /// Object obj = ExecuteScalar(connString, "PublishOrders", new OleDbParameter("@prodid", 24));
150 ///
151 /// 一个有效的连接字符串
152 /// 存储过程名称或者sql命令语句
153 /// 执行命令所用参数的集合
154 ///
用 Convert.To{Type}把类型转换为想要的
155 public static object ExecuteScalar( string connectionString, string cmdText, params OleDbParameter[] commandParameters)
156 {
157 OleDbCommand cmd = new OleDbCommand();
158 using (OleDbConnection connection = new OleDbConnection(connectionString))
159 {
160 PrepareCommand(cmd, connection, null , cmdText, commandParameters);
161 object val = cmd.ExecuteScalar();
162 cmd.Parameters.Clear();
163 return val;
164 }
165 }
166 ///
167 /// 用指定的数据库连接执行一个命令并返回一个数据集的第一列
168 ///
169 ///
170 /// 例如:
171 /// Object obj = ExecuteScalar(connString, "PublishOrders", new OleDbParameter("@prodid", 24));
172 ///
173 /// 一个存在的数据库连接
174 /// 存储过程名称或者sql命令语句
175 /// 执行命令所用参数的集合
176 ///
用 Convert.To{Type}把类型转换为想要的
177 public static object ExecuteScalar(OleDbConnection connection, string cmdText, params OleDbParameter[] commandParameters)
178 {
179 OleDbCommand cmd = new OleDbCommand();
180 PrepareCommand(cmd, connection, null , cmdText, commandParameters);
181 object val = cmd.ExecuteScalar();
182 cmd.Parameters.Clear();
183 return val;
184 }
185 ///
186 /// 将参数集合添加到缓存
187 ///
188 /// 添加到缓存的变量
189 /// 一个将要添加到缓存的sql参数集合
190 public static void CacheParameters( string cacheKey, params OleDbParameter[] commandParameters)
191 {
192 parmCache[cacheKey] = commandParameters;
193 }
194 ///
195 /// 找回缓存参数集合
196 ///
197 /// 用于找回参数的关键字
198 ///
缓存的参数集合
199 public static OleDbParameter[] GetCachedParameters( string cacheKey)
200 {
201 OleDbParameter[] cachedParms = (OleDbParameter[])parmCache[cacheKey];
202 if (cachedParms == null )
203 return null ;
204 OleDbParameter[] clonedParms = new OleDbParameter[cachedParms.Length];
205 for ( int i = 0 , j = cachedParms.Length; i < j; i ++ )
206 clonedParms = (OleDbParameter[])((ICloneable)cachedParms).Clone();
207 return clonedParms;
208 }
209 ///
210 /// 准备执行一个命令
211 ///
212 /// sql命令
213 /// Sql连接
214 /// Sql事务
215 /// 命令文本,例如:Select * from Products
216 /// 执行命令的参数
217 private static void PrepareCommand(OleDbCommand cmd, OleDbConnection conn, OleDbTransaction trans, string cmdText, OleDbParameter[] cmdParms)
218 {
219 // 判断连接的状态。如果是关闭状态,则打开
220 if (conn.State != ConnectionState.Open)
221 conn.Open();
222 // cmd属性赋值
223 cmd.Connection = conn;
224 cmd.CommandText = cmdText;
225 // 是否需要用到事务处理
226 if (trans != null )
227 cmd.Transaction = trans;
228 cmd.CommandType = CommandType.Text;
229 // 添加cmd需要的存储过程参数
230 if (cmdParms != null )
231 {
232 foreach (OleDbParameter parm in cmdParms)
233 cmd.Parameters.Add(parm);
234 }
235 }
236 }
237 }
238
2 using System.Data;
3 using System.Configuration;
4 using System.Data.OleDb;
5 using System.Collections;
6
7 namespace MobileHealth
8 {
9 ///
10 /// AcceHelper 的摘要说明
11 ///
12 public static class AccessHelper
13 {
14 // 数据库连接字符串
15 public static readonly string conn = System.Configuration.ConfigurationManager.ConnectionStrings[ " ConnectionString " ].ConnectionString;
16 // 用于缓存参数的HASH表
17 private static Hashtable parmCache = Hashtable.Synchronized( new Hashtable());
18 ///
19 /// 给定连接的数据库用假设参数执行一个sql命令(不返回数据集)
20 ///
21 /// 一个有效的连接字符串
22 /// 存储过程名称或者sql命令语句
23 /// 执行命令所用参数的集合
24 ///
25 public static int ExecuteNonQuery( string connectionString, string cmdText, params OleDbParameter[] commandParameters)
26 {
27 OleDbCommand cmd = new OleDbCommand();
28 using (OleDbConnection conn = new OleDbConnection(connectionString))
29 {
30 PrepareCommand(cmd, conn, null , cmdText, commandParameters);
31 int val = cmd.ExecuteNonQuery();
32 cmd.Parameters.Clear();
33 return val;
34 }
35 }
36 ///
37 /// 用现有的数据库连接执行一个sql命令(不返回数据集)
38 ///
39 ///
40 /// 举例:
41 /// int result = ExecuteNonQuery(connString, "PublishOrders", new OleDbParameter("@prodid", 24));
42 ///
43 /// 一个现有的数据库连接
44 /// 存储过程名称或者sql命令语句
45 /// 执行命令所用参数的集合
46 ///
47 public static int ExecuteNonQuery(OleDbConnection connection, string cmdText, params OleDbParameter[] commandParameters)
48 {
49 OleDbCommand cmd = new OleDbCommand();
50 PrepareCommand(cmd, connection, null , cmdText, commandParameters);
51 int val = cmd.ExecuteNonQuery();
52 cmd.Parameters.Clear();
53 return val;
54 }
55 ///
56 /// 使用现有的SQL事务执行一个sql命令(不返回数据集)
57 ///
58 ///
59 /// 举例:
60 /// int result = ExecuteNonQuery(trans, "PublishOrders", new OleDbParameter("@prodid", 24));
61 ///
62 /// 一个现有的事务
63 /// 存储过程名称或者sql命令语句
64 /// 执行命令所用参数的集合
65 ///
66 public static int ExecuteNonQuery(OleDbTransaction trans, string cmdText, params OleDbParameter[] commandParameters)
67 {
68 OleDbCommand cmd = new OleDbCommand();
69 PrepareCommand(cmd, trans.Connection, trans, cmdText, commandParameters);
70 int val = cmd.ExecuteNonQuery();
71 cmd.Parameters.Clear();
72 return val;
73 }
74 ///
75 /// 用执行的数据库连接执行一个返回数据集的sql命令
76 ///
77 ///
78 /// 举例:
79 /// OleDbDataReader r = ExecuteReader(connString, "PublishOrders", new OleDbParameter("@prodid", 24));
80 ///
81 /// 一个有效的连接字符串
82 /// 存储过程名称或者sql命令语句
83 /// 执行命令所用参数的集合
84 ///
85 public static OleDbDataReader ExecuteReader( string connectionString, string cmdText, params OleDbParameter[] commandParameters)
86 {
87 // 创建一个SqlCommand对象
88 OleDbCommand cmd = new OleDbCommand();
89 // 创建一个SqlConnection对象
90 OleDbConnection conn = new OleDbConnection(connectionString);
91 // 在这里我们用一个try/catch结构执行sql文本命令/存储过程,因为如果这个方法产生一个异常我们要关闭连接,因为没有读取器存在,
92 // 因此commandBehaviour.CloseConnection 就不会执行
93 try
94 {
95 // 调用 PrepareCommand 方法,对 SqlCommand 对象设置参数
96 PrepareCommand(cmd, conn, null , cmdText, commandParameters);
97 // 调用 SqlCommand 的 ExecuteReader 方法
98 OleDbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
99 // 清除参数
100 cmd.Parameters.Clear();
101 return reader;
102 }
103 catch
104 {
105 // 关闭连接,抛出异常
106 conn.Close();
107 throw ;
108 }
109 }
110 ///
111 /// 返回一个DataSet数据集
112 ///
113 /// 一个有效的连接字符串
114 /// 存储过程名称或者sql命令语句
115 /// 执行命令所用参数的集合
116 ///
117 public static DataSet ExecuteDataSet( string connectionString, string cmdText, params OleDbParameter[] commandParameters)
118 {
119 // 创建一个SqlCommand对象,并对其进行初始化
120 OleDbCommand cmd = new OleDbCommand();
121 using (OleDbConnection conn = new OleDbConnection(connectionString))
122 {
123 PrepareCommand(cmd, conn, null , cmdText, commandParameters);
124 // 创建SqlDataAdapter对象以及DataSet
125 OleDbDataAdapter da = new OleDbDataAdapter(cmd);
126 DataSet ds = new DataSet();
127 try
128 {
129 // 填充ds
130 da.Fill(ds);
131 // 清除cmd的参数集合
132 cmd.Parameters.Clear();
133 // 返回ds
134 return ds;
135 }
136 catch
137 {
138 // 关闭连接,抛出异常
139 conn.Close();
140 throw ;
141 }
142 }
143 }
144 ///
145 /// 用指定的数据库连接字符串执行一个命令并返回一个数据集的第一列
146 ///
147 ///
148 /// 例如:
149 /// Object obj = ExecuteScalar(connString, "PublishOrders", new OleDbParameter("@prodid", 24));
150 ///
151 /// 一个有效的连接字符串
152 /// 存储过程名称或者sql命令语句
153 /// 执行命令所用参数的集合
154 ///
155 public static object ExecuteScalar( string connectionString, string cmdText, params OleDbParameter[] commandParameters)
156 {
157 OleDbCommand cmd = new OleDbCommand();
158 using (OleDbConnection connection = new OleDbConnection(connectionString))
159 {
160 PrepareCommand(cmd, connection, null , cmdText, commandParameters);
161 object val = cmd.ExecuteScalar();
162 cmd.Parameters.Clear();
163 return val;
164 }
165 }
166 ///
167 /// 用指定的数据库连接执行一个命令并返回一个数据集的第一列
168 ///
169 ///
170 /// 例如:
171 /// Object obj = ExecuteScalar(connString, "PublishOrders", new OleDbParameter("@prodid", 24));
172 ///
173 /// 一个存在的数据库连接
174 /// 存储过程名称或者sql命令语句
175 /// 执行命令所用参数的集合
176 ///
177 public static object ExecuteScalar(OleDbConnection connection, string cmdText, params OleDbParameter[] commandParameters)
178 {
179 OleDbCommand cmd = new OleDbCommand();
180 PrepareCommand(cmd, connection, null , cmdText, commandParameters);
181 object val = cmd.ExecuteScalar();
182 cmd.Parameters.Clear();
183 return val;
184 }
185 ///
186 /// 将参数集合添加到缓存
187 ///
188 /// 添加到缓存的变量
189 /// 一个将要添加到缓存的sql参数集合
190 public static void CacheParameters( string cacheKey, params OleDbParameter[] commandParameters)
191 {
192 parmCache[cacheKey] = commandParameters;
193 }
194 ///
195 /// 找回缓存参数集合
196 ///
197 /// 用于找回参数的关键字
198 ///
199 public static OleDbParameter[] GetCachedParameters( string cacheKey)
200 {
201 OleDbParameter[] cachedParms = (OleDbParameter[])parmCache[cacheKey];
202 if (cachedParms == null )
203 return null ;
204 OleDbParameter[] clonedParms = new OleDbParameter[cachedParms.Length];
205 for ( int i = 0 , j = cachedParms.Length; i < j; i ++ )
206 clonedParms = (OleDbParameter[])((ICloneable)cachedParms).Clone();
207 return clonedParms;
208 }
209 ///
210 /// 准备执行一个命令
211 ///
212 /// sql命令
213 /// Sql连接
214 /// Sql事务
215 /// 命令文本,例如:Select * from Products
216 /// 执行命令的参数
217 private static void PrepareCommand(OleDbCommand cmd, OleDbConnection conn, OleDbTransaction trans, string cmdText, OleDbParameter[] cmdParms)
218 {
219 // 判断连接的状态。如果是关闭状态,则打开
220 if (conn.State != ConnectionState.Open)
221 conn.Open();
222 // cmd属性赋值
223 cmd.Connection = conn;
224 cmd.CommandText = cmdText;
225 // 是否需要用到事务处理
226 if (trans != null )
227 cmd.Transaction = trans;
228 cmd.CommandType = CommandType.Text;
229 // 添加cmd需要的存储过程参数
230 if (cmdParms != null )
231 {
232 foreach (OleDbParameter parm in cmdParms)
233 cmd.Parameters.Add(parm);
234 }
235 }
236 }
237 }
238