问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C# Winform 连接access

发布网友 发布时间:2022-04-12 10:26

我来回答

2个回答

懂视网 时间:2022-04-12 14:48

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

热心网友 时间:2022-04-12 11:56

private OleDbConnection dataConn()//建立连接
{
string connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + "数据库地址" + ";Persist Security Info=False";
OleDbConnection conn = new OleDbConnection(connstr);
return conn;
}

OleDbConnection conn = dataConn();
string sql = "SQL语句";
OleDbCommand myCommand = new OleDbCommand(sql, conn);
conn.Open();//打开表

OleDbDataReader reader = myCommand.ExecuteReader();
while (reader.Read())
MessageBox.Show(reader["字段"].ToString());//取值

大概是这样,慢慢理解吧
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
土狗一般多大开始懂人性 如何训练 小土狗怎么训练才听话 新手训狗的好方法 跑跑卡丁车故事模式哪一关还海盗船长(人物)奖励的,骨灰玩家说下._百 ... 跑跑卡丁车手游被遗忘的炮塔的宝藏在哪_跑跑卡丁车手游被遗忘的炮塔的... 跑跑卡丁车手游在被遗忘的炮塔附近搜寻宝藏怎么做?遗忘炮塔宝藏攻略... 跑跑卡丁车手游被遗忘炮塔宝藏在哪 炮塔附近搜寻宝箱位置详解-新手攻略... 跑跑卡丁车被遗忘的炮塔附近宝藏在哪里_跑跑卡丁车被遗忘的炮塔附近宝藏... 跑跑卡丁车手游在遗忘的炮塔附近搜寻宝藏在哪 遗忘炮塔宝藏位置详解 迅捷路由器使用问题 ...MATLAB7.0的,程序总是在打开后一会,就自动关闭了。希望能帮忙哦,感... 梦见自己把女人耳朵撕裂开了 梦见,小女孩耳朵被砍掉半个,然后我很难过,谢谢 我梦见我把我儿子的耳朵拽掉了'是什么兆头 真的手工活需要办理证件吗 梦见自己女儿在学校耳朵被撕开了 在工厂领手工外发出去需要注册公司吗? 梦见两次女儿的耳朵被别人拽下来,第一次是个小男孩,忘了见没见血,第二次是我朋友的孩子就比我女儿大三 自己几个人在家做手工生产还用办营业执照吗? 梦见女儿的耳朵例开了旦不流血是好是坏 请问我是一个公司的分厂,我只是在五楼做外发手工,有一个小厂房,要不要办理营业执照? 梦见女儿耳朵被我扯了一个 出血了 从厂里拿回家的手工活外放需要营业执照吗? 梦到女儿的耳朵掉了。 外发手工活有没有说要办营业执照和加工许可证的 我梦见我女儿的耳朵被我揪掉了一半怎么回事 笔记本电脑开机后风扇一直狂转? 鼻子老是冒油怎么办? 我的鼻子老是冒油怎么解决? 想把卡西欧fx-82CN X显示的分数改成小数,要怎样操作? 意大利饺应该怎样做? polo后视镜如何折叠?我试验过,但是没敢硬掰,有智者请告知,谢谢!! polo外后视镜怎么收 大众polo30周年纪念版怎么自动收后视镜 大众polo两厢2014款怎样调节外后视镜 大众polo1.4手动挡的倒车镜能自动收回吗 有谁知道大众polo1.4l手动舒适版有没有后视镜电动折叠功能? Polo外后视镜带有折叠功能吗? 2014款polo后视镜可以折叠吗 大众polo内后视镜底座怎么拆除??? 2012款 cross polo的后视镜可以折叠吗?如题,请问~ 糯米5手机怎么样? 糯米手机是杂牌吗?质量可靠吗? 糯米手机质量怎么样 小米糯米手机质量怎么样?参数各方面是不是真实的? 糯米手机怎样 手机糯米x5报价,质量怎么样? 糯米手机是国产机嘛?质量怎么样? 糯米手机怎么样? 糯米手机是小米旗下的吗?糯米手机怎么样?? 糯米手机怎么样啊?