为提高程序效率计,类中所有方法均为静态方法。
oledb驱动,支持事务处理。引类抛砖引玉,不足之处大师们多多指教。
OleDbAccess.cs原码如下:
/**/ /* * @Sban 2006-12 * Access数据库Oldb操作类 */ using System; using System.Data; using System.Data.OleDb; namespace Sban ... { public static class OleDbAccess ...{ /**//// <summary> /// 取得数据库连接 /// </summary> /// <param name="connectionString"></param> /// <returns></returns> public static OleDbConnection GetConnection(string connectionString) ...{ OleDbConnection conn = new OleDbConnection(connectionString); try ...{ conn.Open(); } catch (Exception e) ...{ throw new Exception("数据库连接字符串可能有问题!", e); } return conn; } /**//// <summary> /// /// </summary> /// <param name="param"></param> /// <returns></returns> public static string FiltArg(ref string param) ...{ param = System.Web.HttpUtility.HtmlEncode(param); param = param.Replace("'","‘").Replace(""","“"); return param; } /**//// <summary> /// 获得oledb连接字符串 /// </summary> /// <param name="dataBasePath"></param> /// <returns></returns> public static string GetConnectionString(string dataBasePath) ...{ return "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=" + dataBasePath; } /**//// <summary> /// /// </summary> /// <param name="conn"></param> /// <returns></returns> public static OleDbCommand GetCommand(ref OleDbConnection conn) ...{ return conn.CreateCommand(); } /**//// <summary> /// start transaction and return /// </summary> /// <param name="conn"></param> /// <param name="cmd"></param> /// <returns></returns> public static OleDbTransaction StartTrans(ref OleDbConnection conn, ref OleDbCommand cmd) ...{ return cmd.Transaction = conn.BeginTransaction(); } public static void RollTrans(ref OleDbTransaction trans) ...{ trans.Rollback(); } public static void CommitTrans(ref OleDbTransaction trans) ...{ trans.Commit(); } /**//// <summary> /// /// </summary> /// <param name="cmd"></param> /// <param name="query"></param> /// <param name="param"></param> public static void ExecuteNonQuery(ref OleDbCommand cmd, string query, params OleDbParameter[] param) ...{ cmd.CommandType = CommandType.Text; cmd.CommandText = query; cmd.Parameters.Clear(); if (null != param) cmd.Parameters.AddRange(param); try ...{ cmd.ExecuteNonQuery(); } catch (Exception e) ...{ throw new Exception("ExecuteNonQuery:执行数据库操作时出现问题!", e); } } /**//// <summary> /// /// </summary> /// <param name="conn"></param> /// <param name="cmd"></param> public static void Dispose(ref OleDbConnection conn, ref OleDbCommand cmd) ...{ try ...{ conn.Close(); cmd.Dispose(); conn.Dispose(); } catch ...{ //throw new Exception("执行数据库对象清除可能有问题!", e); } } /**//// <summary> /// GetParameters array /// </summary> /// <param name="arr"></param> /// <returns></returns> public static OleDbParameter[] GetParameters(params object[] arr) ...{ OleDbParameter[] paramArray = new OleDbParameter[arr.Length]; object[] o; for (int j = 0; j < arr.Length; j++) ...{ o = (object[])arr[j]; paramArray[j] = GetParameter(o); } return paramArray; } /**//// <summary> /// GetParameter /// </summary> /// <param name="arr"></param> /// <returns></returns> public static OleDbParameter GetParameter(params object[] arr) ...{ OleDbParameter param = new OleDbParameter(arr[0].ToString(), arr[1]); if (arr.Length > 2) param.OleDbType = (OleDbType)arr[2]; if (arr.Length > 3) param.Size = Convert.ToInt32(arr[3]); return param; } /**//// <summary> /// execute query and return dataset. /// </summary> /// <param name="cmd"></param> /// <param name="query"></param> /// <param name="param"></param> /// <returns></returns> public static OleDbDataReader ExecuteReader(ref OleDbCommand cmd, string query, params OleDbParameter[] param) ...{ OleDbDataReader dr = null; cmd.CommandType = CommandType.Text; cmd.CommandText = query; cmd.Parameters.Clear(); if (null != param) cmd.Parameters.AddRange(param); try ...{ dr = cmd.ExecuteReader(); } catch (Exception e) ...{ throw new Exception("ExecuteReader:执行数据库操作时出现问题!", e); } return dr; } /**//// <summary> /// /// </summary> /// <param name="cmd"></param> /// <param name="query"></param> /// <param name="param"></param> /// <returns></returns> public static object ExecuteScalar(ref OleDbCommand cmd, string query, params OleDbParameter[] param) ...{ object obj = null; cmd.CommandType = CommandType.Text; cmd.CommandText = query; cmd.Parameters.Clear(); if (null != param) cmd.Parameters.AddRange(param); try ...{ obj = cmd.ExecuteScalar(); } catch (Exception e) ...{ throw new Exception("ExecuteScalar:执行数据库操作时出现问题!", e); } return obj; } /**//// <summary> /// return a dataset /// </summary> /// <param name="cmd"></param> /// <param name="query"></param> /// <param name="param"></param> /// <returns></returns> public static DataSet ExecuteDataSet(ref OleDbCommand cmd, string query, params OleDbParameter[] param) ...{ OleDbDataAdapter dad = new OleDbDataAdapter(cmd); DataSet ds = new DataSet(); cmd.CommandType = CommandType.Text; cmd.CommandText = query; cmd.Parameters.Clear(); if (null != param) cmd.Parameters.AddRange(param); try ...{ dad.Fill(ds); } catch (Exception e) ...{ throw new Exception("ExecuteDataSet:执行数据库操作时出现问题!", e); } finally ...{ dad.Dispose(); } return ds; } }}附一个使用例子:
int id = int .Parse(GridView1.Rows[e.RowIndex].Cells[ 0 ].Text); string fileClass = ((TextBox)GridView1.Rows[e.RowIndex].Cells[ 1 ].Controls[ 0 ]).Text; string fullName = ((TextBox)GridView1.Rows[e.RowIndex].Cells[ 2 ].Controls[ 0 ]).Text; string imageUrl = ((TextBox)GridView1.Rows[e.RowIndex].Cells[ 3 ].Controls[ 0 ]).Text;OleDbConnection conn = OleDbAccess.GetConnection(MasterDBConnectionString);OleDbCommand cmd = OleDbAccess.GetCommand( ref conn); string query = " Update [FileClass] Set [FileClass]=@FileClass,[FullName]=@FullName,[ImageUrl]=@ImageUrl Where [Id] = @Id " ;OleDbAccess.ExecuteNonQuery( ref cmd, query, OleDbAccess.GetParameters( new object [] ... { new object[] ...{ "@FileClass", fileClass, OleDbType.VarChar }, new object[] ...{ "@FullName", fullName, OleDbType.VarChar }, new object[] ...{ "@ImageUrl", imageUrl, OleDbType.VarChar }, new object[] ...{ "@Id", id, OleDbType.Integer } } ));OleDbAccess.Dispose( ref conn, ref cmd);