当前位置: 首页 > news >正文

C#使用Access数据库使用总结

话说这Access数据库确实是有点年代了,前面在深圳的一家放射医疗公司,数据库用的Access,后面在我的建议下,换成了SQLite。用SQLite多舒服,不用装Runtime,还可以用EF。Access得装Runtime,也用不了EF。

回到长沙后,找了一家工业仪器的公司,发现也是用的Access数据库。

结果模糊查询 的时候,发现不对劲,这里总结几点C#在使用Access数据库时可能会遇到的问题

1、连接字符串

Access 2007 (文件后缀为.accdb)

没有密码的情况

Provider = Microsoft.Ace.OleDb.12.0;Data Source={0};Persist Security Info=False;

有密码的情况

Provider = Microsoft.Ace.OleDb.12.0;Data Source={0};Jet OleDb:DataBase Password='{1}';

说明:实际使用时,用string.Format()函数将{0}替换成数据库路径,{1}替换成密码即可

实际如下:

Provider = Microsoft.Ace.OleDb.12.0;Data Source=D:\test.accdb;Jet OleDb:DataBase Password='123';

Access 2003 (文件后缀为.mdb)

将Provider替换为Microsoft.Jet.OleDb.4.0即可,如下

Provider=Microsoft.Jet.OleDb.4.0;Data Source=D:\test.accdb;Jet OleDb:DataBase Password='123';
 

2、不使用OleDbParameter时,日期需要使用##包起来

有时候可能查询的语句比较简单,就不想使用参数的形式的,直接去拼SQL语句,如果判断的条件是日期,就要用##将日期包起来,不然会报错,如下

var sql = "Select * From Test Where  Date BETWEEN #2021/03/13# AND #2021/03/14#";

使用了参数,就可以不用带#。如下

 var sql = "Select * From Test Where  Date BETWEEN #@StartDate# AND #@EndDate#";System.Data.OleDb.OleDbParameter[] parameters = new System.Data.OleDb.OleDbParameter[]{new System.Data.OleDb.OleDbParameter("@StartDate","2021/03/13"),new System.Data.OleDb.OleDbParameter("@EndDate","2021/03/14")};

3、使用OleDbParameter时,日期需要传字符串

上面已经使用过参数了,这里需要注意的时,不能直接传DateTime类型,而是需要传入字符串,不然会报错。这次就是在公司遇到这个问题,调试了好久,因为太久没用Access,不记得了。

4、在Access里执行查询时,通配符使用* ,在C#中,使用%

例如在Access中直接执行模糊查询语句,查询包含z的姓名

Select * from Test Where Name Like '*z*';

在C#中需要将*替换成%,如下:

var sql = Select * from Test Where Name Like '%z%';

5、使用Where false可以查询表结构

var sql = "Select * from Test Where false";

这操作我以前还不知道,试了下SQL Server是不支持这操作的。 

6、查询语句包含单引号' 时,需要用两个单引号 ''

如:

Select * from xx where Des = 'what's'

要写成

Select * from xx where Des = 'what''s'

 7、判断表是否存在

调用OleDbConnectionGetOleDbSchemaTable函数,如下:

tableName就是要查询的表名

 OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=a.mdb");con.Open();var dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, tableName, "TABLE" });

GetOleDbSchemaTable会返回一个数据源架构信息的DataTable,再判断DataTable的行数是否大于0即可判断指定的表是否存在

 if(dt.Rows.Count > 0){Console.WriteLine("Exist")  }else{Console.WriteLine("Not exist")  }

通过这种方式也可以查询某个表是否存在某一列

tableName是要查询的表名,columnName是要查询的列名

 con.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, tableName, columnName });

到新公司也没写啥项目,目前就遇到这几个问题吧,做个总结。

相关文章:

C#使用Access数据库使用总结

话说这Access数据库确实是有点年代了,前面在深圳的一家放射医疗公司,数据库用的Access,后面在我的建议下,换成了SQLite。用SQLite多舒服,不用装Runtime,还可以用EF。Access得装Runtime,也用不了…...

使用Dataherald组件进行数据分析:从安装到查询的完整指南

使用Dataherald组件进行数据分析:从安装到查询的完整指南 引言 在当今数据驱动的世界中,能够快速、准确地从数据中获取洞察变得越来越重要。Dataherald是一个强大的工具,它可以帮助开发者和数据分析师更轻松地进行数据查询和分析。本文将详…...

sqlx1.3.4版本的问题

sqlx1.3.4版本存在问题,在调用sqlx的Select方法时,如果传入的dest是一个slice且slice不为空,查询结果将会追加在这个slice已有的元素后面。这位用户认为这个行为是“a little surprising”的,且与json 反序列化的表现不一致&#…...

Rust 编译器使用的 C++ 编译器吗?

Rust编译器并不直接使用C编译器,但它们之间可以存在交互,尤其是在Rust与C进行混合编程时。以下是关于Rust编译器和C编译器之间关系的详细解释: 1. Rust编译器的选择 Rust是一种现代化的系统级编程语言,它需要一个可靠的编译器来…...

Python计算机视觉 第10章-OpenCV

Python计算机视觉 第10章-OpenCV OpenCV 是一个C 库,用于(实时)处理计算视觉问题。实时处理计算机视觉的 C 库,最初由英特尔公司开发,现由 Willow Garage 维护。OpenCV 是在 BSD 许可下发布的开源库,这意味…...

多层感知机 (Multilayer Perceptron, MLP)

多层感知机 (Multilayer Perceptron, MLP) 通俗易懂算法 多层感知机(Multilayer Perceptron,MLP)是一种前馈人工神经网络。它的主要特点是由多层神经元(或节点)组成,包括至少一个隐藏层。MLP 是监督学习的…...

reg和wire的区别 HDL语言

文章目录 数据类型根本区别什么时候要定义wire小结 数据类型 HDL语言有三种数据类型:寄存器数据类型(reg)、线网数据类型(wire)、参数数据类型(parameter)。 根本区别 reg: 寄存器…...

前置声明和头文件之间的关系 问题

出现这些问题的原因是 ORB_SLAM3::MultiGraph 被前置声明了,但在使用的时候,编译器并没有看到 MultiGraph 类的完整定义。前置声明只能用于指针和引用,但如果要访问其成员函数或变量,必须包含完整的类定义。 解决方案步骤&#x…...

Linux02

1.相对路径和绝对路径 cd用于切换目录,对于路径可以用相对路径和绝对路径 例如:cd /home/user/public和cd public效果一样,都是将目录切换到HOME文件夹下的public文件夹 2.特殊路径符 .表示当前目录 ..表示上级目录 ~表示HOME目录 3.m…...

df 命令:显示磁盘空间使用情况

一、df 命令简介 ​df​命令用于显示文件系统的磁盘空间利用情况,包括文件系统的总空间、已用空间、可用空间以及挂载点信息。通过df​命令,用户可以快速了解系统中各个文件系统的空间使用情况。 ‍ 二、df 命令参数 df [选项] [目录/驱动器]选项&am…...

深入解析Go语言的容器包

在Go语言中,container标准包为开发者提供了三个非常有用的数据结构:堆(heap)、链表(list)和环(ring)。这些数据结构的实现分别位于container/heap、container/list和container/ring中…...

STM32 + W5500 实现HTTPS !

两点: 1. 让我们先站在操作系统之上的网络协议栈再之上来思考…… 2. 我们先简单粗暴地理解为:http + (加密)= https 先弄一个简单的HTTP网络客户端,连接服务器并读取默认页面。该应用程序可能如下所示: #include <sys/types.h> #include <sys/socket.h> …...

使用DuckDuckGo搜索API进行高效信息检索:Python实践指南

使用DuckDuckGo搜索API进行高效信息检索&#xff1a;Python实践指南 引言 在当今信息爆炸的时代&#xff0c;快速准确地获取所需信息变得越来越重要。DuckDuckGo作为一个注重隐私的搜索引擎&#xff0c;提供了强大的搜索API&#xff0c;让开发者能够轻松地将搜索功能集成到自…...

UE4_后期处理_后期处理材质四—场景物体描边

一、效果如下图&#xff1a; 二、分析&#xff1a; 回顾复习&#xff1a;在后期处理材质三中&#xff0c;我们通过计算开启自定义深度通道物体的像素点上下左右4个像素SceneTextureCustomDepth深度之和来判断物体的外部&#xff08;包含物体的边&#xff09;和内部&#xff0c…...

华为OD机试 - 推荐多样性(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…...

梧桐数据库(WuTongDB):CBO(Cost-Based Optimizer)基于代价的优化器技术简介

CBO&#xff08;基于代价的优化器&#xff0c;Cost-Based Optimizer&#xff09;是现代数据库系统中最广泛使用的查询优化器之一。它通过计算执行查询时可能消耗的资源&#xff08;如CPU、内存、I/O&#xff09;来选择最优的执行计划&#xff0c;以提高查询性能。 1. CBO 的工…...

深入探索Go语言中的函数:匿名函数、指针参数与函数返回

1. Go语言中的函数 函数是任何编程语言中的核心元素&#xff0c;它们帮助我们将大型程序分解为更小的、易于管理的部分。在Go语言中&#xff0c;函数是通过 func 关键字定义的。理想的函数应当是独立的&#xff0c;完成单一任务。如果你发现某个函数正在执行多个任务&#xff…...

Android12_13左上角状态栏数字时间显示右移动

文章目录 问题场景解决问题 一、基础资料二、代码追踪三、解决方案布局的角度解决更改paddingStart 的默认值设置marginLeft 值 硬编码的角度解决 问题场景 1&#xff09;早期一般屏幕都是方形的&#xff0c;但是曲面屏&#xff0c;比如&#xff1a;好多车机Android产品、魔镜…...

望繁信科技携流程智能解决方案亮相CNDS 2024新能源产业数智峰会

9月13日&#xff0c;CNDS 2024中国新能源产业数智峰会在北京圆满落幕。本次峰会以“走向数字新能源”为主题&#xff0c;汇聚了来自新能源领域的顶尖领袖、专家学者及知名企业代表&#xff0c;共同探讨数字化技术在新能源行业中的创新应用和发展趋势。上海望繁信科技有限公司&a…...

nginx负载均衡(轮询与权重)

文章目录 1. nginx的介绍2. nginx使用场景3. nginx在windows的下载与安装4. nginx的简单使用5. nginx进行轮询测试6. nginx进行权重测试7. 总结 1. nginx的介绍 Nginx&#xff08;engine x&#xff09;是一个高性能的HTTP和反向代理web服务器&#xff0c;同时也是一个开源的、…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...