最近项目用到了access,是的就是access,工作在桌面型的小数据库应用还是会用到的,如果你确定永远不会遇到access的操作,请忽略此篇文章
1.vs配置access
既然是数据库,就少不了增删改查。不像mssql那样access没有存储过程(但可以进行宏操作),我们一般都是写T-SQL操作。
1.1.附上access的db操作辅助类。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; using System.Data.OleDb; namespace DB { class OdbcDBHelper : DBHelper { /// <summary> /// 读取二进制字段 /// </summary> /// <param name="sql">存储过程或者sql语句</param> /// <param name="pars">参数列表</param> /// <param name="cmdType"></param> /// <param name="comTimeout_">超时时间</param> /// <returns></returns> public override Byte[] GetBinary(string sql, IList<JHSqlParameter> pars, CommandType cmdType) { return GetBinary(sql, pars, cmdType, comTimeout); } /// <summary> /// 读取二进制字段 /// </summary> /// <param name="sql">存储过程或者sql语句</param> /// <param name="pars">参数列表</param> /// <param name="cmdType"></param> /// <param name="comTimeout_">超时时间</param> /// <returns></returns> public override Byte[] GetBinary(string sql, IList<JHSqlParameter> pars, CommandType cmdType, int comTimeout_) { using (OleDbConnection SConn = new OleDbConnection(connText)) { SConn.Open(); DataSet ds = new DataSet(); try { OleDbCommand cmd = new OleDbCommand(); if (pars != null) { OleDbParameter sqlp = null; foreach (JHSqlParameter p in pars) { sqlp = new OleDbParameter(); sqlp.ParameterName = p.ParameterName; sqlp.Value = p.Value; sqlp.Direction = p.Direction; cmd.Parameters.Add(sqlp); } } cmd.CommandTimeout = comTimeout; cmd.CommandText = sql; cmd.CommandType = cmdType; cmd.Connection = SConn; OleDbDataReader sdr = cmd.ExecuteReader(); sdr.Read(); Byte[] blob = null; blob = new Byte[(sdr.GetBytes(0, 0, null, 0, int.MaxValue))]; sdr.GetBytes(0, 0, blob, 0, blob.Length); sdr.Close(); cmd.Parameters.Clear(); return blob; } catch (Exception ex) { throw new ApplicationException(ex.Message); } finally { SConn.Close(); } } } ///// <summary> ///// 前端获得cmd对象 ///// </summary> ///// <param name="sql">存储过程的名字</param> ///// <returns>SqlCommand对象</returns> //public override OleDbCommand GetSqlCommand(string sql) //{ // return GetSqlCommand(sql, comTimeout); //} ///// <summary> ///// 前端获得cmd对象 ///// </summary> ///// <param name="sql">存储过程的名字</param> ///// <param name="comTimeout">超时时间</param> ///// <returns>SqlCommand对象</returns> //public override OleDbCommand GetSqlCommand(string sql, int comTimeout_) //{ // OleDbConnection SConn = new OleDbConnection(connText); // OleDbCommand cmd = new OleDbCommand(); // cmd.CommandTimeout = comTimeout_; // cmd.CommandText = sql; // cmd.CommandType = CommandType.StoredProcedure; // cmd.Connection = SConn; // return cmd; //} /// <summary> /// 执行存储过程或者sql语句 /// </summary> /// <param name="sql"></param> /// <param name="pars"></param> /// <param name="cmdType"></param> /// <returns>受影响的行数</returns> public override int ExecuteNonQuery(string sql, IList<JHSqlParameter> pars, CommandType cmdType) { return ExecuteNonQuery(sql, pars, cmdType, comTimeout); } /// <summary> /// 执行存储过程或者sql语句 /// </summary> /// <param name="sql"></param> /// <param name="pars"></param> /// <param name="cmdType"></param> /// <returns>受影响的行数</returns> public override int ExecuteNonQuery(string sql, IList<JHSqlParameter> pars, CommandType cmdType, int comTimeout_) { using (OleDbConnection SConn = new OleDbConnection(connText)) { SConn.Open(); int i = 0; try { OleDbCommand cmd = new OleDbCommand(); if (pars != null) { OleDbParameter sqlp = null; foreach (JHSqlParameter p in pars) { sqlp = new OleDbParameter(); sqlp.ParameterName = p.ParameterName; sqlp.Value = p.Value; sqlp.Direction = p.Direction; if (p.Size > 0) { sqlp.Size = p.Size; } cmd.Parameters.Add(sqlp); } } cmd.CommandTimeout = comTimeout_; cmd.CommandText = sql; cmd.CommandType = cmdType; cmd.Connection = SConn; i = cmd.ExecuteNonQuery(); for (int j = 0; j < cmd.Parameters.Count; j++) { if (cmd.Parameters[j].Direction == ParameterDirection.InputOutput || cmd.Parameters[j].Direction == ParameterDirection.Output) { pars[j].Value = cmd.Parameters[j].Value; } } cmd.Parameters.Clear(); } catch (Exception ex) { throw new ApplicationException(ex.Message); } finally { SConn.Close(); } return i; } } /// <summary> /// 执行存储过程或者sql语句_事务 /// </summary> /// <param name="sql"></param> /// <param name="pars"></param> /// <param name="cmdType"></param> /// <returns>void</returns> public override void ExecuteNonQuery_Tran(string[] sql, IList<JHSqlParameter>[] pars, CommandType[] cmdType) { ExecuteNonQuery_Tran(sql, pars, cmdType, comTimeout); } /// <summary> /// 执行存储过程或者sql语句_事务 /// </summary> /// <param name="sql"></param> /// <param name="pars"></param> /// <param name="cmdType"></param> /// <returns>void</returns> public override void ExecuteNonQuery_Tran(string[] sql, IList<JHSqlParameter>[] pars, CommandType[] cmdType, int comTimeout_) { using (OleDbConnection SConn = new OleDbConnection(connText)) { SConn.Open(); OleDbTransaction myTran = SConn.BeginTransaction(); try { OleDbCommand cmd = new OleDbCommand(); cmd.Transaction = myTran; cmd.Connection = SConn; for (int tt = 0; tt < sql.Length; tt++) { if (pars[tt] != null) { OleDbParameter sqlp = null; foreach (JHSqlParameter p in pars[tt]) { sqlp = new OleDbParameter(); sqlp.ParameterName = p.ParameterName; sqlp.Value = p.Value; sqlp.Direction = p.Direction; if (p.Size > 0) { sqlp.Size = p.Size; } cmd.Parameters.Add(sqlp); } } cmd.CommandTimeout = comTimeout_; cmd.CommandText = sql[tt]; cmd.CommandType = cmdType[tt]; cmd.ExecuteNonQuery(); for (int j = 0; j < cmd.Parameters.Count; j++) { if (cmd.Parameters[j].Direction == ParameterDirection.InputOutput || cmd.Parameters[j].Direction == ParameterDirection.Output) { pars[tt][j].Value = cmd.Parameters[j].Value; } } cmd.Parameters.Clear(); } myTran.Commit(); } catch (Exception ex) { myTran.Rollback(); throw new ApplicationException(ex.Message); } finally { SConn.Close(); } } } /// <summary> /// 返回第一行第一列的值 /// </summary> /// <param name="sql"></param> /// <param name="pars"></param> /// <param name="cmdType"></param> /// <returns></returns> public override string ExecuteScalar(string sql, IList<JHSqlParameter> pars, CommandType cmdType) { return ExecuteScalar(sql, pars, cmdType, comTimeout); } /// <summary> /// 返回第一行第一列的值 /// </summary> /// <param name="sql">存储过程/语句</param> /// <param name="pars">参数列表</param> /// <param name="cmdType"></param> /// <returns></returns> public override string ExecuteScalar(string sql, IList<JHSqlParameter> pars, CommandType cmdType, int comTimeout_) { using (OleDbConnection SConn = new OleDbConnection(connText)) { SConn.Open(); string str = null; try { OleDbCommand cmd = new OleDbCommand(); if (pars != null) { OleDbParameter sqlp = null; foreach (JHSqlParameter p in pars) { sqlp = new OleDbParameter(); sqlp.ParameterName = p.ParameterName; sqlp.Value = p.Value; sqlp.Direction = p.Direction; cmd.Parameters.Add(sqlp); } } cmd.CommandTimeout = comTimeout_; cmd.CommandText = sql; cmd.CommandType = cmdType; cmd.Connection = SConn; object obj = cmd.ExecuteScalar(); str = obj == null ? "" : obj.ToString(); cmd.Parameters.Clear(); } catch (Exception ex) { throw new ApplicationException(ex.Message); } finally { SConn.Close(); } return str; } } /// <summary> /// 获得DataTable /// </summary> /// <param name="sql">存储过程/语句</param> /// <param name="pars">参数列表</param> /// <returns></returns> public override DataTable GetDataTable(string sql, IList<JHSqlParameter> pars, CommandType cmdType) { return GetDataTable(sql, pars, cmdType, comTimeout); } /// <summary> /// 获得DataTable /// </summary> /// <param name="sql"></param> /// <param name="pars"></param> /// <returns></returns> public override DataTable GetDataTable(string sql, IList<JHSqlParameter> pars, CommandType cmdType, int comTimeout_) { using (OleDbConnection SConn = new OleDbConnection(connText)) { SConn.Open(); DataSet ds = new DataSet(); try { OleDbCommand cmd = new OleDbCommand(); if (pars != null) { OleDbParameter sqlp = null; foreach (JHSqlParameter p in pars) { sqlp = new OleDbParameter(); sqlp.ParameterName = p.ParameterName; sqlp.Value = p.Value; sqlp.Direction = p.Direction; cmd.Parameters.Add(sqlp); } } cmd.CommandTimeout = comTimeout_; cmd.CommandText = sql; cmd.CommandType = cmdType; cmd.Connection = SConn; OleDbDataAdapter da = new OleDbDataAdapter(cmd); da.Fill(ds); cmd.Parameters.Clear(); } catch (Exception ex) { throw new ApplicationException(ex.Message); } finally { SConn.Close(); } return ds.Tables[0]; } } } }