欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

Winform操作Access

程序员文章站 2022-05-23 08:09:36
...

有时候做数据的中转,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的连接是串行执行,没有并行执行模式。