AcessHelper类

  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       ///   <summary>
 10       ///  AcceHelper 的摘要说明
 11       ///   </summary>
 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           ///   <summary>
 19           ///   给定连接的数据库用假设参数执行一个sql命令(不返回数据集)
 20           ///   </summary>
 21           ///   <param name="connectionString"> 一个有效的连接字符串 </param>
 22           ///   <param name="commandText"> 存储过程名称或者sql命令语句 </param>
 23           ///   <param name="commandParameters"> 执行命令所用参数的集合 </param>
 24           ///   <returns> 执行命令所影响的行数 </returns>
 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           ///   <summary>
 37           ///  用现有的数据库连接执行一个sql命令(不返回数据集)
 38           ///   </summary>
 39           ///   <remarks>
 40           /// 举例:  
 41           ///   int result = ExecuteNonQuery(connString, "PublishOrders", new OleDbParameter("@prodid", 24));
 42           ///   </remarks>
 43           ///   <param name="conn"> 一个现有的数据库连接 </param>
 44           ///   <param name="commandText"> 存储过程名称或者sql命令语句 </param>
 45           ///   <param name="commandParameters"> 执行命令所用参数的集合 </param>
 46           ///   <returns> 执行命令所影响的行数 </returns>
 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           ///   <summary>
 56           /// 使用现有的SQL事务执行一个sql命令(不返回数据集)
 57           ///   </summary>
 58           ///   <remarks>
 59           /// 举例:  
 60           ///   int result = ExecuteNonQuery(trans, "PublishOrders", new OleDbParameter("@prodid", 24));
 61           ///   </remarks>
 62           ///   <param name="trans"> 一个现有的事务 </param>
 63           ///   <param name="commandText"> 存储过程名称或者sql命令语句 </param>
 64           ///   <param name="commandParameters"> 执行命令所用参数的集合 </param>
 65           ///   <returns> 执行命令所影响的行数 </returns>
 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           ///   <summary>
 75           ///  用执行的数据库连接执行一个返回数据集的sql命令
 76           ///   </summary>
 77           ///   <remarks>
 78           ///  举例:  
 79           ///   OleDbDataReader r = ExecuteReader(connString, "PublishOrders", new OleDbParameter("@prodid", 24));
 80           ///   </remarks>
 81           ///   <param name="connectionString"> 一个有效的连接字符串 </param>
 82           ///   <param name="commandText"> 存储过程名称或者sql命令语句 </param>
 83           ///   <param name="commandParameters"> 执行命令所用参数的集合 </param>
 84           ///   <returns> 包含结果的读取器 </returns>
 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           ///   <summary>
111           ///  返回一个DataSet数据集
112           ///   </summary>
113           ///   <param name="connectionString"> 一个有效的连接字符串 </param>
114           ///   <param name="cmdText"> 存储过程名称或者sql命令语句 </param>
115           ///   <param name="commandParameters"> 执行命令所用参数的集合 </param>
116           ///   <returns> 包含结果的数据集 </returns>
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           ///   <summary>
145           ///  用指定的数据库连接字符串执行一个命令并返回一个数据集的第一列
146           ///   </summary>
147           ///   <remarks>
148           /// 例如:  
149           ///   Object obj = ExecuteScalar(connString, "PublishOrders", new OleDbParameter("@prodid", 24));
150           ///   </remarks>
151           /// <param name="connectionString"> 一个有效的连接字符串 </param>
152           ///   <param name="commandText"> 存储过程名称或者sql命令语句 </param>
153           ///   <param name="commandParameters"> 执行命令所用参数的集合 </param>
154           ///   <returns> 用 Convert.To{Type}把类型转换为想要的  </returns>
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           ///   <summary>
167           ///  用指定的数据库连接执行一个命令并返回一个数据集的第一列
168           ///   </summary>
169           ///   <remarks>
170           ///  例如:  
171           ///   Object obj = ExecuteScalar(connString, "PublishOrders", new OleDbParameter("@prodid", 24));
172           ///   </remarks>
173           ///   <param name="conn"> 一个存在的数据库连接 </param>
174           ///   <param name="commandText"> 存储过程名称或者sql命令语句 </param>
175           ///   <param name="commandParameters"> 执行命令所用参数的集合 </param>
176           ///   <returns> 用 Convert.To{Type}把类型转换为想要的  </returns>
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           ///   <summary>
186           ///  将参数集合添加到缓存
187           ///   </summary>
188           ///   <param name="cacheKey"> 添加到缓存的变量 </param>
189           ///   <param name="cmdParms"> 一个将要添加到缓存的sql参数集合 </param>
190           public   static   void  CacheParameters( string  cacheKey,  params  OleDbParameter[] commandParameters)
191          {
192              parmCache[cacheKey]  =  commandParameters;
193          }
194           ///   <summary>
195           ///  找回缓存参数集合
196           ///   </summary>
197           ///   <param name="cacheKey"> 用于找回参数的关键字 </param>
198           ///   <returns> 缓存的参数集合 </returns>
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           ///   <summary>
210           ///  准备执行一个命令
211           ///   </summary>
212           ///   <param name="cmd"> sql命令 </param>
213           ///   <param name="conn"> Sql连接 </param>
214           ///   <param name="trans"> Sql事务 </param>
215           ///   <param name="cmdText"> 命令文本,例如:Select * from Products </param>
216           ///   <param name="cmdParms"> 执行命令的参数 </param>
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 

你可能感兴趣的:(help)