• 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
    {
    /// <summary>
    /// DataAccess 的摘要说明 C#操作Access实例解析
    /// </summary>
    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、配置文件中连接字符串
    <add key="myconn" value="ETLDatas.mdb;"/>


    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的连接是串行执行,没有并行执行模式。

  • 相关阅读:
    Reinforcement Learning Qlearning 算法学习3 AI
    2012年末工作中遇到的问题总结及感悟
    对JMS的一些认识
    readme
    数据库表扩展字段设计思路
    对网络安全性和apache shiro的一些认识
    JDK版本的了解
    下拉框“数据字典”设计
    缓存学习总结
    apache commons包简介
  • 原文地址:https://www.cnblogs.com/ssol/p/2846482.html
Copyright © 2020-2023  润新知