C#实用技巧:创建并操作access数据库(可无密,也可加密)

简介: C#实用技巧:创建并操作access数据库(可无密,也可加密)

原博主博客地址:https://blog.csdn.net/qq21497936

本文章博客地址:https://blog.csdn.net/qq21497936/article/details/84309255

 

需求

       C#使用小型数据库,access和sqlite是首选,推荐使用access,可操作,建表可视化,最大的好处在于可以加密。

 

说明

       access数据库是office办公套件里的Access创建的,依据office版本不同建立的数据库有多种后缀名,如下图:

 

      为了版本通用统一建立后缀名为.mdb(与access2000兼容)的数据库文件。(电脑未装access的,需要装一下access,要用其建立数据库)。

 

建立access数据库

  • 步骤一:打开access,建立空白数据库

   

  • 步骤二:设计建立表

     可建数据格式如下左图,我们见表如下右图,并将该数据库保存为students.mdb

     

   

  • 步骤三:保存为stduents.db

 

 

使用vs获取access连接字符串

  • 步骤一:使用vs工具获取连接字符串

       

     

  • 步骤二:点击下一步,选择数据库文件的文件(此处未设密码保护,也可设置密码保护,请自行百度,若设置了密码保护,则需要填入密码,用户名无所谓),左图为未设置密码的,右图为设置密码保护的:

         

  • 步骤三:点击“测试连接”,如下图:

     

  • 步骤四:点击“高级”,如下图红矩形内的,就是我们要的连接字符串(设置密码和未设置密码的连接字符串是一样的,但是在C#连接时,需要加上密码,access数据库密码登陆无所谓用户名)

     

Provider=Microsoft.Jet.OLEDB.4.0; 
Data Source=D:\wpfproject\Demo16\Demo16\bin\Debug\students.mdb

 加密的字符串(包含密码),验证可以连接上加密的access数据库

Provider=Microsoft.Jet.OLEDB.4.0; 
Data Source=D:\wpfproject\Demo16\Demo16\bin\Debug\students.mdb; 
Jet OLEDB:Password=a1234567

 加密的字符串(包含用户名和密码)验证可以连接上加密的access数据库

Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=D:\wpfproject\Demo16\Demo16\bin\Debug\students.mdb;
User Id=Admin; 
Jet OLEDB:Password=a1234567

C#操作access数据库(包括非加密和加密)

 操作代码如下:

_accessServer = new AccessServer();
_accessServer.DataBaseName = "students_.mdb";
_accessServer.PASSWORD = "a1234567";
_accessServer.connectToAccess();
string cmd = "";
// 建表,Access通过vs2017验证,报不支持create table sql语句,但是实际见表成功
// 具体细节,还需要进一步研究
//cmd = "CREATE TABLE student2(" +
        //"no VARCHAR(2) NOT NULL," +
        //"name VARCHAR(12) NOT NULL," +
        //"age INT NOT NULL)";
//if (!_accessServer.doQuery(cmd))
//{
    //MessageBox.Show(string.Format("执行失败:{0}", cmd), "错误");
//}
// 插入数据
cmd = "INSERT INTO student VALUES('4','yang4',34,'2018-03-04')";
if (!_accessServer.doQuery(cmd))
{
    MessageBox.Show(string.Format("执行失败:{0}", cmd), "错误");
}
cmd = "INSERT INTO student VALUES('5','yang4',35,'2018-03-05')";
if (!_accessServer.doQuery(cmd))
{
    MessageBox.Show(string.Format("执行失败:{0}", cmd), "错误");
}
cmd = "INSERT INTO student VALUES('6','yang4',36,'2018-03-06')";
if (!_accessServer.doQuery(cmd))
{
    MessageBox.Show(string.Format("执行失败:{0}", cmd), "错误");
}
cmd = "SELECT * FROM student";
// 返回数据集
OleDbDataReader rd = _accessServer.doQueryReturnData(cmd);
if (rd == null)
{
    MessageBox.Show(string.Format("执行失败:{0}", cmd), "错误");
}
else
{
    while (rd.Read())
    {
        MessageBox.Show(string.Format("ID:{0}, 姓名:{1}, 年龄:{2}, 日期:{3}",
                        rd["ID"].ToString(), rd["姓名"].ToString(), 
                        rd["年龄"].ToString(), rd["日期"].ToString()), "查询结果");
    }
}
// 关闭数据库
_accessServer.disconnectFromAccess();

 

C#操作Access封装类代码如下:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Demo16
{
    class AccessServer
    {
        private bool _connecting = false;
        private OleDbConnection _oleDbConnection = null;
        private string _connectStr = "Provider=Microsoft.Jet.OLEDB.4.0;" 
                    + "Data Source={0};User Id=Admin;Jet OLEDB:Database Password={1};";
        // 数据库名
        private string _databaseName = "";
        public string DataBaseName { get => _databaseName; set => _databaseName = value; }
        // 数据库密码
        private string _password = "";
        public string PASSWORD { get => _password; set => _password = value; }
        public AccessServer()
        {
        }
        // 连接到数据库
        public bool connectToAccess()
        {
            try
            {
                string connectStr = string.Format(_connectStr, _databaseName, _password);
                _oleDbConnection = new OleDbConnection(connectStr);
                _oleDbConnection.Open();
                _connecting = true;
                return true;
            }
            catch
            {
                return false;
            }
        }
        // 执行数据库指令(无需返回的)
        public bool doQuery(string cmd)
        {
            if (!_connecting)
            {
                return false;
            }
            try
            {
                OleDbCommand sqlCom = new OleDbCommand(cmd, _oleDbConnection);
                sqlCom.ExecuteNonQuery();
                return true;
            }
            catch
            {
                return false;
            }
        }
        // 执行数据库指令(返回数据记录的)
        /*  补充:如何操作 SQLiteDataReader 查看数据,
         *    SQLiteDataReader只能ToString()
         *    while(oleDbDataReader.Read())
         *    {
         *      string number = dr["ID"].ToString();
         *      string name = dr["姓名"].ToString();
         *      int age = Convert.ToInt32(dr["年龄"].ToString());
         *      string data = dr["日期"].ToString();
         *    } 
        */
        public OleDbDataReader doQueryReturnData(string cmd)
        {
            if (!_connecting)
            {
                return null;
            }
            try
            {
                OleDbCommand sqlCom = _oleDbConnection.CreateCommand();
                sqlCom.CommandText = cmd;
                OleDbDataReader oleDbDataReader = sqlCom.ExecuteReader();
                return oleDbDataReader;
            }
            catch
            {
                return null;
            }
        }
        // 断开与数据库的连接
        public void disconnectFromAccess()
        {
            if (!_connecting)
                return;
            try
            {
                _oleDbConnection.Dispose();
                _connecting = false;
            }
            catch
            {
                _connecting = false;
            }
        }
    }
}

 

原博主博客地址:https://blog.csdn.net/qq21497936

本文章博客地址:https://blog.csdn.net/qq21497936/article/details/84309255



相关文章
|
7月前
|
SQL 数据库 数据安全/隐私保护
数据库数据恢复——sql server数据库被加密的数据恢复案例
SQL server数据库数据故障: SQL server数据库被加密,无法使用。 数据库MDF、LDF、log日志文件名字被篡改。 数据库备份被加密,文件名字被篡改。
|
2月前
|
存储 弹性计算 安全
现有数据库系统中应用加密技术的不同之处
本文介绍了数据库加密技术的种类及其在不同应用场景下的安全防护能力,包括云盘加密、透明数据加密(TDE)和选择列加密。分析了数据库面临的安全威胁,如管理员攻击、网络监听、绕过数据库访问等,并通过能力矩阵对比了各类加密技术的安全防护范围、加密粒度、业务影响及性能损耗。帮助用户根据安全需求、业务改造成本和性能要求,选择合适的加密方案,保障数据存储与传输安全。
|
5月前
|
安全 Java 数据库
Jasypt加密数据库配置信息
本文介绍了使用 Jasypt 对配置文件中的公网数据库认证信息进行加密的方法,以提升系统安全性。主要内容包括:1. 背景介绍;2. 前期准备,如依赖导入及版本选择;3. 生成密钥并实现加解密测试;4. 在配置文件中应用加密后的密码,并通过测试接口验证解密结果。确保密码安全的同时,保障系统的正常运行。
362 3
Jasypt加密数据库配置信息
|
9月前
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
1040 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
10月前
|
安全 网络安全 数据库
Access denied for user ‘qingtingstpublic’@’171.213.253.88’ (using password: YES)宝塔数据库远程无法连接-宝塔数据远程无法连接的正确解决方案-优雅草央千澈-问题解决
Access denied for user ‘qingtingstpublic’@’171.213.253.88’ (using password: YES)宝塔数据库远程无法连接-宝塔数据远程无法连接的正确解决方案-优雅草央千澈-问题解决
171 28
|
11月前
|
SQL Oracle 数据库
使用访问指导(SQL Access Advisor)优化数据库业务负载
本文介绍了Oracle的SQL访问指导(SQL Access Advisor)的应用场景及其使用方法。访问指导通过分析给定的工作负载,提供索引、物化视图和分区等方面的优化建议,帮助DBA提升数据库性能。具体步骤包括创建访问指导任务、创建工作负载、连接工作负载至访问指导、设置任务参数、运行访问指导、查看和应用优化建议。访问指导不仅针对单条SQL语句,还能综合考虑多条SQL语句的优化效果,为DBA提供全面的决策支持。
267 11
|
12月前
|
Linux 数据库 数据安全/隐私保护
GBase 数据库 加密客户端---数据库用户口令非明文存放需求的实现
GBase 数据库 加密客户端---数据库用户口令非明文存放需求的实现
|
2月前
|
XML 前端开发 C#
C#编程实践:解析HTML文档并执行元素匹配
通过上述步骤,可以在C#中有效地解析HTML文档并执行元素匹配。HtmlAgilityPack提供了一个强大而灵活的工具集,可以处理各种HTML解析任务。
170 19
|
3月前
|
监控 算法 C#
C#与Halcon联合编程实现鼠标控制图像缩放、拖动及ROI绘制
C#与Halcon联合编程实现鼠标控制图像缩放、拖动及ROI绘制
502 0
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
245 3

热门文章

最新文章