AccessHelper类

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

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。