Access数据库C#读写验证

1、数据库简介

      Access数据库是一个相当古老的文件型数据库,主打一个简单+方便,没有复杂的安装过程,没有庞大的后端管理,整个数据库就是一个文件。可以像普通文件一样复制和修改,可以同时读写。

    在小型系统中,还是有较多的存量系统在使用Access数据库,相对简单的文件存储,还是有很大的进步。Access是关系型数据库,数据是结构化存储,数据的关系和格式,相对文件严谨很多。

2、数据库定义

     定义数据库表Measurement,定义几个字段。

2、写入代码片段

using System.Data.OleDb;OleDbConnection odcConnection=null;
string fileName = "D:\\Tools\\Pascal.mdb";
//*********连接本地ACCESS数据库************************
String sAccessConnection = @"Provider = Microsoft.Jet.OLEDB.4.0; Data Source = " + fileName;
odcConnection = new OleDbConnection(sAccessConnection);
odcConnection.Open(); //打开连接Random ranValue = new Random();
int wdCount = 0;
int wdErrCount = 0;
private void WriteAccessData()
{int FieldCount = 0;Stopwatch sw = new Stopwatch();sw.Start();try{OleDbCommand odCommand = odcConnection.CreateCommand(); //建立SQL查询//3、输入查询语句string dtStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");double f = ranValue.NextDouble()*1000;string sqlCmd = $"INSERT INTO Measurement (站点名称,日期时间,Data_1,Data_2,Data_3,Data_4,Data_5) VALUES ('站点1','{dtStr}','{f}','{f}','{f}','{f}','{f}')";odCommand.CommandText = sqlCmd;odCommand.ExecuteNonQuery();  //建立读取//*********连接本地ACCESS数据库************************Console.WriteLine($"Write Count:{++wdCount},FieldCount:{FieldCount},Elapsed(s):{sw.Elapsed.TotalSeconds}");}catch (Exception ex){wdErrCount++;Console.WriteLine($"write err:{ex.Message}");}
}

通过定时写入观察,在数据量持续增加,数据文件到达100MB+后,数据的写入性能没有明显变化。

3、数据读取

OleDbConnection odcConnection = null;
private void GetAccessData()
{string rcStatus = "";int FieldCount = 0;Stopwatch sw = new Stopwatch();sw.Start();try{readCount++;//*********连接本地ACCESS数据库************************String sAccessConnection = @"Provider = Microsoft.Jet.OLEDB.4.0; Data Source = "+ fileName;if (odcConnection==null){odcConnection = new OleDbConnection(sAccessConnection);odcConnection.Open(); //2、打开连接}{string sqlCmd = "SELECT TOP 1 * FROM Measurement ORDER BY 日期时间 DESC";//查询数据,仅读取第一条记录using (OleDbCommand odCommand = odcConnection.CreateCommand()){odCommand.CommandText = sqlCmd;infoRunMsg = sqlCmd;using (DbDataReader odrReader = odCommand.ExecuteReader()){while (odrReader.Read()) //查询并显示数据{FieldCount = odrReader.FieldCount;for (int i = 0; i < odrReader.FieldCount; i++){var f = odrReader.GetName(i);var v = odrReader.GetValue(i);//Console.WriteLine($"{f}:{v}");}break;}}}}//*********连接本地ACCESS数据库************************rcStatus = "Ok";Console.WriteLine($"Read Count:{readCount},Err:{readErrCount},FieldCount:{FieldCount},Elapsed(s):{sw.Elapsed.TotalSeconds}");}catch (Exception ex){odcConnection?.Close();odcConnection = null;readErrCount++;rcStatus = ex.Message;Console.WriteLine("Read Err:"+ex.Message);}
}

   读取数据时,随着数据量的增加,性能有明显的下降,这点与其他数据库有点类似。

4、读取数据的优化

      读取数据的优化方面,Access和普通的数据库有点类似,可以尝试常规的方法来改进读取性能。

4.1 加上时间过滤条件优化        

        我们数据定义中有时间参数,加入时间过滤条件筛选SQL不需要的数据时,可以明显改善性能。比如将上面的SQL改为:

“SELECT TOP 1 * FROM Measurement where 日期时间>\"2024-01-01 12:00:00\" ORDER BY 日期时间 DESC”,性能提升明显。

4.2 使用具体列名称替代"*"

      继续优化,使用具体列名称替代SELECT *,新的SQL如下:

"SELECT TOP 1 站点名称,日期时间,Data_1,Data_2,Data_3,Data_4,Data_5 FROM Measurement where 日期时间>\"2024-01-01 12:00:00\" ORDER BY 日期时间 DESC",也有比较明显的改善。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/313389.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS 丝带形状效果

CSS 丝带形状效果如图&#xff1a; 通过CSS创建折叠丝带形状 这里代码应该比较清晰易懂&#xff0c;clip-path 的值应该也容易理解。要注意的是&#xff0c;我们使用了 color-mix() 函数&#xff0c;这个属性允许创建主颜色的深色版本。现在如果我们将元素旋转相反的方向&#…

web component - 使用HTML Templates和Shadow DOM构建现代UI组件

Web Component是一种用于构建可重用的UI组件的技术。它使用标准化的浏览器API&#xff0c;包括Custom Elements、Shadow DOM和HTML Templates来实现组件化开发方式。这些API都是现代浏览器原生支持的&#xff0c;因此不需要引入第三方库或框架即可使用。 在这篇博客中&#xf…

第7课 利用FFmpeg将摄像头画面与麦克风数据合成后推送到rtmp服务器

上节课我们已经拿到了摄像头数据和麦克风数据&#xff0c;这节课我们来看一下如何将二者合并起来推送到rtmp服务器。推送音视频合成流到rtmp服务器地址的流程如下&#xff1a; 1.创建输出流 //初始化输出流上下文 avformat_alloc_output_context2(&outFormatCtx, NULL, &…

极速文件搜索工具Everything结合内网穿透实现远程搜索本地文件

文章目录 前言1.软件安装完成后&#xff0c;打开Everything2.登录cpolar官网 设置空白数据隧道3.将空白数据隧道与本地Everything软件结合起来总结 前言 要搭建一个在线资料库&#xff0c;我们需要两个软件的支持&#xff0c;分别是cpolar&#xff08;用于搭建内网穿透数据隧道…

算法逆袭之路(1)

11.29 开始跟进算法题进度! 每天刷4题左右 ,一周之内一定要是统一类型 而且一定稍作总结, 了解他们的内在思路究竟是怎样的!! 12.24 一定要每天早中晚都要复习一下 早中午每段一两道, 而且一定要是同一个类型, 不然刷起来都没有意义 12.26/27&#xff1a; 斐波那契数 爬…

每日一题——LeetCode997

方法一 个人方法&#xff1a; 这题的意思就是1-n里面找到一个数&#xff0c;它不指向任何数&#xff0c;其他数都要指向它 找到没有指向任何数的那个idx&#xff0c;如果不存在这样的数那么就返回-1如果找到了这样的数&#xff0c;还要继续判断其它的所有数是否都指向它&…

适用于电脑的 8 款文件/软件迁移软件 – 快速安全地更换电脑!

将文件/软件从一台设备传输到另一台设备已成为我们日常生活的重要组成部分&#xff0c;无论是出于个人目的还是出于职业目的。在当今快节奏的世界中&#xff0c;我们经常需要在不同设备之间传输大文件&#xff0c;例如视频、照片、文档等。虽然云服务提供了一种共享文件的好方法…

2023-12-17 LeetCode每日一题(使用最小花费爬楼梯)

2023-12-17每日一题 一、题目编号 746. 使用最小花费爬楼梯二、题目链接 点击跳转到题目位置 三、题目描述 给你一个整数数组 cost &#xff0c;其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用&#xff0c;即可选择向上爬一个或者两个台阶。 你…

2024 React 后台系统 搭建学习看这一篇就够了(1)

年初&#xff0c;自己想写一篇关于 React 实战后台项目的 课程文章&#xff0c;也算是对自己 2023的前端学习做一个系统性总结&#xff0c;方便后续查阅&#xff0c;也方便自己浏览&#xff0c;还能增加自己的文笔 网上很多平台都不太稳定&#xff0c;所以用了阿里的语雀&…

Vue(三):Vue 生命周期与工程化开发

2023 的最后一篇博客&#xff0c;祝大家元旦快乐&#xff0c;新的一年一起共勉&#xff01; 06. Vue 生命周期 6.1 基本介绍 生命周期就是一个 Vue 示例从 创建 到 销毁 的整个过程&#xff0c;创建、挂载、更新、销毁 有一些请求是必须在某个阶段完成之后或者某个阶段之前执行…

前端:html+css+js实现CSDN首页

提前说一下&#xff0c;只实现了部分片段哈&#xff01;如下&#xff1a; 前端&#xff1a;htmlcssjs实现CSDN首页 1. 实现效果2. 需要了解的前端知识3. 固定定位的使用4. js 监听的使用4. 参考代码和运行结果 1. 实现效果 我的实现效果为&#xff1a; 原界面如下,网址为&…

Android 13 动态启用或禁用IPV6

介绍 客户想要通过APK来控制IPV6的启用和禁用&#xff0c;这里我们通过广播的方式来让客户控制IPV6。 效果展示 adb shell ifconfig 这里我们用debug软件&#xff0c;将下面节点置为1 如图ipv6已被禁用了 echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6 修改 接下来…