001 using System;
002 using System.Data;
003 using System.Configuration;
004 using System.Web;
005 using System.Web.Security;
006 using System.Web.UI;
007 using System.Web.UI.WebControls;
008 using System.Web.UI.WebControls.WebParts;
009 using System.Web.UI.HtmlControls;
010 using System.Data.OleDb;
011 using System.Collections;
012 ///
013 /// AcceHelper的摘要說明
014 ///
015 public static class AccessHelper
016 {
017 //數據庫連接字符串
018 public static readonly string conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Request.PhysicalApplicationPath + System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
019 //用於緩存參數的HASH表
020 private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
021 ///
022 /// 給定連接的數據庫用假設參數執行一個sql命令(不返回數據集)
023 ///
024 /// 一個有效的連接字符串
025 /// 存儲過程名稱或者sql命令語句
026 /// 執行命令所用參數的集合
027 /// 執行命令所影響的行數
028 public static int ExecuteNonQuery(string connectionString, string cmdText, params OleDbParameter[] commandParameters)
029 {
030 OleDbCommand cmd = new OleDbCommand();
031 using (OleDbConnection conn = new OleDbConnection(connectionString))
032 {
033 PrepareCommand(cmd, conn, null, cmdText, commandParameters);
034 int val = cmd.ExecuteNonQuery();
035 cmd.Parameters.Clear();
036 return val;
037 }
038 }
039 ///
040 ///用現有的數據庫連接執行一個sql命令(不返回數據集)
041 ///
042 ///
043 ///舉例:
044 /// int result = ExecuteNonQuery(connString, "PublishOrders", new OleDbParameter("@prodid", 24));
045 ///
046 /// 一個現有的數據庫連接
047 /// 存儲過程名稱或者sql命令語句
048 /// 執行命令所用參數的集合
049 /// 執行命令所影響的行數
050 public static int ExecuteNonQuery(OleDbConnection connection, string cmdText, params OleDbParameter[] commandParameters)
051 {
052 OleDbCommand cmd = new OleDbCommand();
053 PrepareCommand(cmd, connection, null, cmdText, commandParameters);
054 int val = cmd.ExecuteNonQuery();
055 cmd.Parameters.Clear();
056 return val;
057 }
058 ///
059 ///使用現有的SQL事務執行一個sql命令(不返回數據集)
060 ///
061 ///
062 ///舉例:
063 /// int result = ExecuteNonQuery(trans, "PublishOrders", new OleDbParameter("@prodid", 24));
064 ///
065 /// 一個現有的事務
066 /// 存儲過程名稱或者sql命令語句
067 /// 執行命令所用參數的集合
068 /// 執行命令所影響的行數
069 public static int ExecuteNonQuery(OleDbTransaction trans, string cmdText, params OleDbParameter[] commandParameters)
070 {
071 OleDbCommand cmd = new OleDbCommand();
072 PrepareCommand(cmd, trans.Connection, trans, cmdText, commandParameters);
073 int val = cmd.ExecuteNonQuery();
074 cmd.Parameters.Clear();
075 return val;
076 }
077 ///
078 ///用執行的數據庫連接執行一個返回數據集的sql命令
079 ///
080 ///
081 ///舉例:
082 /// OleDbDataReader r = ExecuteReader(connString, "PublishOrders", new OleDbParameter("@prodid", 24));
083 ///
084 /// 一個有效的連接字符串
085 /// 存儲過程名稱或者sql命令語句
086 /// 執行命令所用參數的集合
087 /// 包含結果的讀取器
088 public static OleDbDataReader ExecuteReader(string connectionString, string cmdText, params OleDbParameter[] commandParameters)
089 {
090 //創建一個SqlCommand對象
091 OleDbCommand cmd = new OleDbCommand();
092 //創建一個SqlConnection對象
093 OleDbConnection conn = new OleDbConnection(connectionString);
094 //在這裡我們用一個try/catch結構執行sql文本命令/存儲過程,因為如果這個方法產生一個異常我們要關閉連接,因為沒有讀取器存在,
095 //因此commandBehaviour.CloseConnection就不會執行
096 try
097 {
098 //調用PrepareCommand方法,對SqlCommand對象設置參數
099 PrepareCommand(cmd, conn, null, cmdText, commandParameters);
100 //調用SqlCommand 的ExecuteReader方法
101 OleDbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
102 //清除參數
103 cmd.Parameters.Clear();
104 return reader;
105 }
106 catch
107 {
108 //關閉連接,拋出異常
109 conn.Close();
110 throw;
111 }
112 }
113 ///
114 ///返回一個DataSet數據集
115 ///
116 /// 一個有效的連接字符串
117 /// 存儲過程名稱或者sql命令語句
118 /// 執行命令所用參數的集合
119 /// 包含結果的數據集
120 public static DataSet ExecuteDataSet(string connectionString, string cmdText, params OleDbParameter[] commandParameters)
121 {
122 //創建一個SqlCommand對象,並對其進行初始化
123 OleDbCommand cmd = new OleDbCommand();
124 using (OleDbConnection conn = new OleDbConnection(connectionString))
125 {
126 PrepareCommand(cmd, conn, null, cmdText, commandParameters);
127 //創建SqlDataAdapter對象以及DataSet
128 OleDbDataAdapter da = new OleDbDataAdapter(cmd);
129 DataSet ds = new DataSet();
130 try
131 {
132 //填充ds
133 da.Fill(ds);
134 //清除cmd的參數集合
135 cmd.Parameters.Clear();
136 //返回ds
137 return ds;
138 }
139 catch
140 {
141 //關閉連接,拋出異常
142 conn.Close();
143 throw;
144 }
145 }
146 }
147 ///
148 ///用指定的數據庫連接字符串執行一個命令並返回一個數據集的第一列
149 ///
150 ///
151 ///例如:
152 /// Object bj = ExecuteScalar(connString, "PublishOrders", new OleDbParameter("@prodid", 24));
153 ///
154 ///一個有效的連接字符串
155 /// 存儲過程名稱或者sql命令語句
156 /// 執行命令所用參數的集合
157 /// 用Convert.To{Type}把類型轉換為想要的
158 public static object ExecuteScalar(string connectionString, string cmdText, params OleDbParameter[] commandParameters)
159 {
160 OleDbCommand cmd = new OleDbCommand();
161 using (OleDbConnection connection = new OleDbConnection(connectionString))
162 {
163 PrepareCommand(cmd, connection, null, cmdText, commandParameters);
164 object val = cmd.ExecuteScalar();
165 cmd.Parameters.Clear();
166 return val;
167 }
168 }
169 ///
170 ///用指定的數據庫連接執行一個命令並返回一個數據集的第一列
171 ///
172 ///
173 ///例如:
174 /// Object bj = ExecuteScalar(connString, "PublishOrders", new OleDbParameter("@prodid", 24));
175 ///
176 /// 一個存在的數據庫連接
177 /// 存儲過程名稱或者sql命令語句
178 /// 執行命令所用參數的集合
179 /// 用Convert.To{Type}把類型轉換為想要的
180 public static object ExecuteScalar(OleDbConnection connection, string cmdText, params OleDbParameter[] commandParameters)
181 {
182 OleDbCommand cmd = new OleDbCommand();
183 PrepareCommand(cmd, connection, null, cmdText, commandParameters);
184 object val = cmd.ExecuteScalar();
185 cmd.Parameters.Clear();
186 return val;
187 }
188 ///
189 ///將參數集合添加到緩存
190 ///
191 /// 添加到緩存的變量
192 /// 一個將要添加到緩存的sql參數集合
193 public static void CacheParameters(string cacheKey, params OleDbParameter[] commandParameters)
194 {
195 parmCache[cacheKey] = commandParameters;
196 }
197 ///
198 ///找回緩存參數集合
199 ///
200 /// 用於找回參數的關鍵字
201 /// 緩存的參數集合
202 public static OleDbParameter[] GetCachedParameters(string cacheKey)
203 {
204 OleDbParameter[] cachedParms = (OleDbParameter[])parmCache[cacheKey];
205 if (cachedParms == null)
206 return null;
207 OleDbParameter[] clonedParms = new OleDbParameter[cachedParms.Length];
208 for (int i = 0, j = cachedParms.Length; i < j; i++)
209 clonedParms =(OleDbParameter[])((ICloneable)cachedParms).Clone();
210 return clonedParms;
211 }
212 ///
213 ///准備執行一個命令
214 ///
215 /// sql命令
216 /// Sql連接
217 /// Sql事務
218 /// 命令文本,例如:Select * from Products
219 /// 執行命令的參數
220 private static void PrepareCommand(OleDbCommand cmd, OleDbConnection conn, OleDbTransaction trans, string cmdText, OleDbParameter[] cmdParms)
221 {
222 //判斷連接的狀態。如果是關閉狀態,則打開
223 if (conn.State != ConnectionState.Open)
224 conn.Open();
225 //cmd屬性賦值
226 cmd.Connection = conn;
227 cmd.CommandText = cmdText;
228 //是否需要用到事務處理
229 if (trans != null)
230 cmd.Transaction = trans;
231 cmd.CommandType = CommandType.Text;
232 //添加cmd需要的存儲過程參數
233 if (cmdParms != null)
234 {
235 foreach (OleDbParameter parm in cmdParms)
236 cmd.Parameters.Add(parm);
237 }
238 }
239 }