有时候做数据的中转,SQLServer和Oracle这些大型数据库有点杀鸡用牛刀,而且会增加维护成本,这时可以使用Access数据库,尤其是处理Winform的时候。下面简单说一下 Access的数据访问类的使用方法,该类为静态方法,如果是多线程程序,可能会造成数据库连接之
 有时候做数据的中转,SQLServer和Oracle这些大型数据库有点“杀鸡用牛刀”,而且会增加维护成本,这时可以使用“Access”数据库,尤其是处理“Winform”的时候。下面简单说一下
Access的数据访问类的使用方法,该类为静态方法,如果是多线程程序,可能会造成“数据库”连接之间的竞争。比如一个线程打开了数据库连接,还没有处理完,另一个线程就要关闭,这时就不能使用这个类了。
1、类如下。
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Data.OleDb;
namespace Model
{
 /// 
 /// DataAccess 的摘要说明 C#操作Access实例解析 
 /// 
 public class DataAccess
 {
 protected static OleDbConnection conn = new OleDbConnection();
 protected static OleDbCommand comm = new OleDbCommand();
 public DataAccess()
 {
 //init C#操作Access实例解析 
 }
 private static void openConnection()
 {
 if (conn.State == ConnectionState.Closed)
 {
 conn.ConnectionString = @"Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + ConfigurationManager.AppSettings["myconn"];
 //web.config文件里设定。 
 comm.Connection = conn;
 try
 {
 conn.Open();
 }
 catch (Exception e)
 { throw new Exception(e.Message); }
}
}//打开数据库 C#操作Access实例解析
 private static void closeConnection()
 {
 if (conn.State == ConnectionState.Open)
 {
 conn.Close();
 conn.Dispose();
 comm.Dispose();
 }
 }//关闭数据库 C#操作Access实例解析 
 public static void excuteSql(string sqlstr)
 {
 try
 {
 openConnection();
 comm.CommandType = CommandType.Text;
 comm.CommandText = sqlstr;
 comm.ExecuteNonQuery();
 }
 catch (Exception e)
 {
 throw new Exception(e.Message);
 }
 finally
 { closeConnection(); }
 }//执行sql语句 C#操作Access实例解析 
 public static OleDbDataReader dataReader(string sqlstr)
 {
 OleDbDataReader dr = null;
 try
 {
 openConnection();
 comm.CommandText = sqlstr;
 comm.CommandType = CommandType.Text;
 dr = comm.ExecuteReader(CommandBehavior.CloseConnection);
 }
 catch
 {
 try
 {
 dr.Close();
 closeConnection();
 }
 catch { }
 }
 return dr;
 }
 //返回指定sql语句的OleDbDataReader对象,使用时请注意关闭这个对象。 
 public static void dataReader(string sqlstr, ref OleDbDataReader dr)
 {
 try
 {
 openConnection();
 comm.CommandText = sqlstr;
 comm.CommandType = CommandType.Text;
 dr = comm.ExecuteReader(CommandBehavior.CloseConnection);
 }
 catch
 {
 try
 {
 if (dr != null && !dr.IsClosed)
 dr.Close();
 } //C#操作Access实例解析
 catch
 {
 }
 finally
 {
 closeConnection();
 }
 }
 }
 //返回指定sql语句的OleDbDataReader对象,使用时请注意关闭 
 public static DataSet dataSet(string sqlstr)
 {
 DataSet ds = new DataSet();
 OleDbDataAdapter da = new OleDbDataAdapter();
 try
 {
 openConnection();
 comm.CommandType = CommandType.Text;
 comm.CommandText = sqlstr;
 da.SelectCommand = comm;
 da.Fill(ds);
 }
 catch (Exception e)
 {
 throw new Exception(e.Message);
 }
 finally
 {
 closeConnection();
 }
 return ds;
 }//返回指定sql语句的dataset C#操作Access实例解析 
 public static void dataSet(string sqlstr, ref DataSet ds)
 {
 OleDbDataAdapter da = new OleDbDataAdapter();
 try
 {
 openConnection();
 comm.CommandType = CommandType.Text;
 comm.CommandText = sqlstr;
 da.SelectCommand = comm;
 da.Fill(ds);
 }
 catch (Exception e)
 {
 throw new Exception(e.Message);
 }
 finally
 {
 closeConnection();
 }
 }//返回指定sql语句的dataset C#操作Access实例解析
 public static DataTable dataTable(string sqlstr)
 {
 DataTable dt = new DataTable();
 OleDbDataAdapter da = new OleDbDataAdapter();
 try
 {
 openConnection();
 comm.CommandType = CommandType.Text;
 comm.CommandText = sqlstr;
 da.SelectCommand = comm;
 da.Fill(dt);
 }
 catch (Exception e)
 {
 throw new Exception(e.Message);
 }
 finally
 {
 closeConnection();
 }
 return dt;
 }//返回指定sql语句的datatable 
 public static void dataTable(string sqlstr, ref DataTable dt)
 {
 OleDbDataAdapter da = new OleDbDataAdapter();
 try
 {
 openConnection();
 comm.CommandType = CommandType.Text;
 comm.CommandText = sqlstr;
 da.SelectCommand = comm;
 da.Fill(dt);
 }
 catch (Exception e)
 {
 throw new Exception(e.Message);
 }
 finally
 {
 closeConnection();
 }
 }//返回指定sql语句的datatable C#操作Access实例解析 
 public static DataView dataView(string sqlstr)
 {
 OleDbDataAdapter da = new OleDbDataAdapter();
 DataView dv = new DataView();
 DataSet ds = new DataSet();
 try
 {
 openConnection();
 comm.CommandType = CommandType.Text;
 comm.CommandText = sqlstr;
 da.SelectCommand = comm;
 da.Fill(ds);
 dv = ds.Tables[0].DefaultView;
 }
 catch (Exception e)
 {
 throw new Exception(e.Message);
 }
 finally
 {
 closeConnection();
 }
 return dv;
 }
 //返回指定sql语句的dataview C#操作Access实例解析 
}
}
2、配置文件中连接字符串
 
3、查询及判断数据存在
 string IsExistSQL = " select * from ETLSettings where ETLName='" + name + "'";
 if (DataAccess.dataTable(IsExistSQL).Rows.Count == 0)
 {}
4、创建表
 string ETLCreateSql = "Create TABLE " + name +
 " ( DANo VARCHAR NOT NULL, DATime DATETIME NOT NULL, LogTime DATETIME NOT NULL, MeterType VARCHAR NOT NULL, MeterNo VARCHAR NOT NULL, Qty Decimal(18,6) NOT NULL )";
DataAccess.excuteSql(ETLCreateSql);
5、增加及删除记录
 string ETLSql = " insert into ETLSettings values ('" + name + "','" + name + "'," + "1,0)";
ETLSql = " delete from ETLSettings where ETLName='" + name + "'";
6、删除表
 drop table test
7、Access里插入时间需要“#XXXXXXXX#”这样。
DataAccess.excuteSql("insert into " + etlname + " (DANo,DATime,LogTime,MeterType,MeterNo,Qty,Status) values ('"+model.DANo+"',#"+model.DATime+"#,#"+model.LogTime+"#,'"+model.MeterType+"','"+model.MeterNo+"',"+model.Qty+",0)");
8、Access的连接数
Access是允许同时有255个打开的连接,注意是打开,打开并不表示就一定在执行查询。如果要执行查询,那是另外的事,和理论支持“255个并发连接”不冲突。
Access的连接是串行执行,没有并行执行模式。
Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务