C#实现对Access数据库的通用操作

这篇具有很好参考价值的文章主要介绍了C#实现对Access数据库的通用操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、实现效果

1.1、实现功能

  ①实现创建Access数据库;

  ②实现创建指定Access数据库的表;

  ③实现给Access数据库的指定表【插入、查询、更新、删除、分页查询】数据;

  ④实现获取Access数据库中的所有表名称及其表包含的所有列名称

1.2、效果图

C#实现对Access数据库的通用操作

二、实现核心

该项目的完整工程下载地址如下:Access数据库操作项目的完整工程下载地址https://download.csdn.net/download/xiaochenXIHUA/85163940

2.1、添加引用

  在项目中添加【Microsoft ActiveX Data Objects 6.0 Library】和【Microsoft ADO Ext.6.0 for DDL and Security】引用,如下图所示。

C#实现对Access数据库的通用操作

C#实现对Access数据库的通用操作

注意事项:

 引入这两个Com组件后,在使用【ADOX.CatalogClass】报如下图的错误时;只用选中【Interop.ADOX】,然后在属性下的【嵌入互操作类型-->修改为否】即可解决,如下图所示:

C#实现对Access数据库的通用操作

C#实现对Access数据库的通用操作

 C#实现对Access数据库的通用操作

2.2、Access数据帮助类

这里Access数据库帮助类的部分内容,如下所示:

/***
*	Title:"轻量数据库" 项目
*		主题:Access数据库的帮助类
*	Description:
*		功能:
*		    ①构造函数时可以创建Access指定的连接字符串
*		    ②创建Access的mdb类型数据库
*	Date:2022
*	Version:0.1版本
*	Author:Coffee
*	Modify Recoder:
*/

using LiteDBHelper.Model;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data.OleDb;
using System.IO;
using System.Text;

namespace LiteDBHelper
{
    public class AccessDBHelper
    {

        #region   基础参数
        //数据库连接字符串
        private string _ConnStr;

        //获取到数据库连接字符串
        public string ConnStr { get { return _ConnStr; } }

        #endregion 


        #region   构造函数
        /// <summary>
        /// mdb文件的连接字符串构造函数
        /// </summary>
        /// <param name="connnection"></param>
        public AccessDBHelper(string connnection)
        {
            if (string.IsNullOrEmpty(connnection)) return;

            _ConnStr = connnection;
        }

        /// <summary>
        /// mdb文件无用户名和密码构造函数
        /// </summary>
        /// <param name="mdbFilePathAndName">mdb文件的路径和名称(比如:@"D:\\HalmEL\\2022-4-11.mdb")</param>
        public AccessDBHelper(string mdbFilePathAndName,AccessDBType accessDBType)
        {
            if (string.IsNullOrEmpty(mdbFilePathAndName)) return;

            string strDriver = GetDirverOfAccessDBType(accessDBType);
            _ConnStr = $"{strDriver};Data source={mdbFilePathAndName};";

            InstanceSqlHelper(_ConnStr);
        }

        #endregion


        #region   创建Access数据库、表及其字段

        /// <summary>
        /// 创建Mdb数据库
        /// </summary>
        /// <param name="mdbFilePathAndName">mdb文件的路径和名称(比如:@"D:\\HalmEL\\2022-4-11.mdb")</param>
        /// <returns>返回创建结果</returns>
        public ResultInfo CreateMdbDataBase(string mdbFilePathAndName)
        {
            ResultInfo resultInfo = new ResultInfo();

            if (File.Exists(mdbFilePathAndName))
            {
                resultInfo.ResultStatus = ResultStatus.Success;
                resultInfo.Message = $"{mdbFilePathAndName} 文件已经存在!";
            }
            try
            {
                //如果目录不存在,则创建目录
                string folder = Path.GetDirectoryName(mdbFilePathAndName);
                if (!Directory.Exists(folder))
                {
                    Directory.CreateDirectory(folder);
                }
                //创建Catalog目录类
                ADOX.CatalogClass catalog = new ADOX.CatalogClass();

                //根据联结字符串使用Jet数据库引擎创建数据库
                catalog.Create(_ConnStr);
                catalog = null;

                resultInfo.ResultStatus = ResultStatus.Success;
                resultInfo.Message = $"{mdbFilePathAndName} 文件创建成功!";
            }
            catch (Exception ex)
            {
                resultInfo.ResultStatus = ResultStatus.Error;
                resultInfo.Message = $"{ex.Message}";
            }

            return resultInfo;
        }

        /// <summary>
        /// 创建mdb表(字段都是短文本类型)
        /// </summary>
        /// <param name="mdbFilePathAndName">mdb文件的路径和名称(比如:@"D:\\HalmEL\\2022-4-11.mdb")</param>
        /// <param name="tableName">表名称</param>
        /// <param name="fieldNameList">表字段名称列表</param>
        /// <returns></returns>
        public ResultInfo CreateMdbTable(string mdbFilePathAndName, string tableName, List<string> fieldNameList)
        {
            ResultInfo resultInfo = new ResultInfo();

            if (string.IsNullOrEmpty(mdbFilePathAndName) || string.IsNullOrEmpty(tableName)
                || fieldNameList == null || fieldNameList.Count < 1)
            {
                resultInfo.SetContent(ResultStatus.Error, "内容为空,请检查!", null);

                return resultInfo;
            }


            ADOX.CatalogClass catalog = new ADOX.CatalogClass();
            ADODB.Connection connection = new ADODB.Connection();

            try
            {
                //打开数据库连接
                connection.Open(_ConnStr, null, null, -1);
                catalog.ActiveConnection = connection;

                //新建一个表
                ADOX.TableClass table = new ADOX.TableClass();
                table.ParentCatalog = catalog;
                table.Name = tableName;

                int fieldCount = fieldNameList.Count;
                for (int i = 0; i < fieldCount; i++)
                {
                    //增加一个文本字段
                    string fieldName = fieldNameList[i].ToString();
                    ADOX.ColumnClass column = new ADOX.ColumnClass();
                    column.ParentCatalog = catalog;
                    column.Name = fieldName;
                    column.Properties["Jet OLEDB:Allow Zero Length"].Value = false;
                    //table.Columns.Append(column, ADOX.DataTypeEnum.adLongVarChar, 100);
                    table.Columns.Append(fieldName, ADOX.DataTypeEnum.adVarWChar, 106);

                }

                //将创建的表加入数据库
                catalog.Tables.Append(table);
                table = null;
                catalog = null;

                resultInfo.SetContent(ResultStatus.Success, $"创建:{tableName} 表成功", null);
            }
            catch (Exception ex)
            {
                resultInfo.SetContent(ResultStatus.Error, $"{ex.Message}", null);
            }
            finally
            {
                //关闭连接
                connection.Close();
            }

            return resultInfo;
        }

        #endregion



        #region   私有方法

        /// <summary>
        /// 根据Access类型返回对应的驱动
        /// </summary>
        /// <param name="accessDBType">Access数据库类型</param>
        /// <returns></returns>
        private string GetDirverOfAccessDBType(AccessDBType accessDBType)
        {
            string connStr = $"Microsoft.ACE.OLEDB.12.0";

            switch (accessDBType)
            {
                case AccessDBType.Is2007AndLater:
                    connStr = $"Provider=Microsoft.ACE.OLEDB.12.0";
                    break;
                case AccessDBType.Is2003AndBefore:
                    connStr = $"Provider=Microsoft.Jet.OLEDB.4.0";
                    break;
                default:
                    break;
            }

            return connStr;
        }

        #endregion 


    }//Class_end


    /// <summary>
    /// Access数据库类型
    /// </summary>
    public enum AccessDBType
    {
        //2007及其更高的版本
        Is2007AndLater,
        //2003等之前的版本
        Is2003AndBefore,

    }


}

2.3、关于未注册Microsoft.ACE.OLEDB.12.0解决办法

程序报错“未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序”解决办法https://blog.csdn.net/xiaochenXIHUA/article/details/124031921?spm=1001.2014.3001.5501文章来源地址https://www.toymoban.com/news/detail-481881.html

三、其他的相关资料

DataTypeEnum - ActiveX Data Objects (ADO) | Microsoft Docshttps://docs.microsoft.com/zh-cn/sql/ado/reference/ado-api/datatypeenum?view=sql-server-ver15Access 桌面数据库的数据类型 (microsoft.com)https://support.microsoft.com/zh-cn/office/access-%E6%A1%8C%E9%9D%A2%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B-df2b83ba-cef6-436d-b679-3418f622e482#ID0EBBD=Office_2007_-_2010INSERT INTO 语句 (Microsoft Access SQL) | Microsoft Docshttps://docs.microsoft.com/zh-cn/office/client-developer/access/desktop-database-reference/insert-into-statement-microsoft-access-sql概念(Access VBA 参考) | Microsoft Docshttps://docs.microsoft.com/zh-cn/office/vba/access/concepts/miscellaneous/concepts-access-vba-reference\t \r \n转义字符https://www.cnblogs.com/lsqbk/p/10259044.html

到了这里,关于C#实现对Access数据库的通用操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言通过ODBC函数操作Access数据库(mdb和accdb格式)(char字符数组)

    编译环境:Windows XP + Visual Studio 2010 数据库:Access 2010,accdb格式 本例程只使用char[]字符数组,不使用wchar_t[]字符数组,更适合C语言初学者。 如果读取字符串时,db_bind_str提供的字符数组空间小了,db_fetch会执行失败返回-2。 由于Windows系统设计原因,char[]字符数组只能存储G

    2024年02月02日
    浏览(50)
  • C# Dapper 操作Oracle数据库

    nuget安装内容   1.配置连接字符串 OracleConnectionString这个可用  2.读取配置文件类 3.Dapper数据库操作类  4.操作数据实例 

    2024年02月10日
    浏览(49)
  • C#操作MSSQL数据库 -增删改查

    要在C#中连接到Microsoft SQL Server数据库(MSSQL),你可以使用.NET Framework提供的System.Data.SqlClient命名空间中的类。 以下是一个简单的示例代码,展示了如何在C#中使用MSSQL数据库链接: 在上述代码中,你需要替换 serverName 、 databaseName 、 userName 和 password 为你实际的数据库服务器

    2024年02月10日
    浏览(38)
  • ES 实现数据库or查询效果

    ES :有两种常用查询           must   必须满足查询条件         should 非必须满足查询条件  如果想实现类似与mysql中的or 查询效果,必须使用should查询。但是shuold 会查询出不满足条件的数据 ,这必须加一个属性 \\\"minimum_should_match\\\": \\\"1\\\" 必须满足should条件中的一个查询

    2024年02月11日
    浏览(39)
  • 实现数据库增删改查+界面效果-----jsp

    1.通过连接数据库完成用户登录模块。 2.登录成功后查询出一张数据库表中的内容;登录不成功返回登录页面。 3.页面面端要有空值和非法字符验证。 4.登录成功后对一张表中数据进行增加、删除、修改和查询操作。 创建数据库 名字为jdbcHomework,字符编码为utf8 数据库创建表

    2024年02月06日
    浏览(44)
  • 【C# .NET 】使用 Entity Framework Core 操作sqlite数据库

    添加包 EF Core design package   NuGet Gallery | Home 使用用于 EF Core 迁移和现有数据库中的反向工程(基架)的工具需要安装相应的工具包: 可在 Visual Studio 包管理器控制台中使用的 PowerShell 工具的 Microsoft.EntityFrameworkCore.Tools 跨平台命令行工具的 dotnet-ef 和 Microsoft.EntityFramewor

    2024年02月14日
    浏览(53)
  • MySQL 5.7详细下载安装配置以及C# MySQL数据库操作教程

    MySQL 5.7详细下载安装配置以及C# MySQL数据库操作教程 最近有个项目使用MySQL5.7,在安装MySQL的时候会遇到很多问题,博客上其实也有很多解决问题的办法,在这里我操作记录一下,方便后续使用时查看。 以下MySQL 5.7.43 详细下载安装配置教程。 访问官方网站:https://www.mysql.co

    2024年02月09日
    浏览(51)
  • PG数据库实现高可用方案(包括通用型方案Corosync+pacemaker协作)

    系列文章 keepalived学习记录:对其vip漂移过程采用gdb跟踪 Keepalived与HaProxy的协调合作原理分析 Oracle实现高可用性的工具(负载均衡/故障切换) 达梦实现高可用性的实现(failover功能/负载均衡/虚拟ip透明切换) PG数据库实现高可用方案(包括通用型方案Corosync+pacemaker协作) 在

    2024年02月06日
    浏览(66)
  • C#实现SqlServer数据库同步

    实现效果: 设计思路: 1. 开启数据库及表的cdc,定时查询cdc表数据,封装sql语句(通过执行类型,主键;修改类型的cdc数据只取最后更新的记录),添加到离线数据表; 2. 线程定时查询离线数据表,更新远程库数据; 3. 远程库数据被更改又会产生cdc数据,对此数据进行拦截;

    2024年02月13日
    浏览(40)
  • C#调用SqlSugar操作达梦数据库报错“无效的表或视图名”

      安装达梦数据库后,使用SqlSugar连接测试数据库并基于DBFirst方式创建数据库表对应的类,主要代码如下:   运行到CreateClassFile函数时报如下错误:   通过达梦管理工具查看数据库,PERSON数据库下有ADDRESS表,不清楚为什么报错。   百度错误信息,检索结果中介绍可

    2024年01月25日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包