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

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 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



相关文章
|
1月前
|
存储 安全 算法
C#一分钟浅谈:数据加密与解密技术
【10月更文挑战第3天】在数字化时代,信息安全至关重要。数据加密作为保障信息不被未授权访问的有效手段,通过特定算法将明文转换为密文,确保即使数据被截获也难以解读。本文从基础概念入手,介绍C#中实现数据加密的方法,涵盖对称加密(如AES、DES)与非对称加密(如RSA),并通过具体示例代码演示如何使用`System.Security.Cryptography.Aes`类完成AES加密和解密过程。此外,还强调了密钥管理及安全策略的重要性。
55 4
|
1月前
|
安全 算法 Java
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
本文提供了在数据库中对密码等敏感信息进行加盐加密的详细教程,包括手写MD5加密算法和使用Spring Security的BCryptPasswordEncoder进行加密,并强调了使用BCryptPasswordEncoder时需要注意的Spring Security配置问题。
140 0
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
|
1月前
|
SQL 缓存 大数据
C#高效处理大数据的批次处理,以及最好的数据库设计
C#高效处理大数据的批次处理,以及最好的数据库设计
61 0
|
2月前
|
SQL 存储 关系型数据库
C#一分钟浅谈:使用 ADO.NET 进行数据库访问
【9月更文挑战第3天】在.NET开发中,与数据库交互至关重要。ADO.NET是Microsoft提供的用于访问关系型数据库的类库,包含连接数据库、执行SQL命令等功能。本文从基础入手,介绍如何使用ADO.NET进行数据库访问,并提供示例代码,同时讨论常见问题及其解决方案,如连接字符串错误、SQL注入风险和资源泄露等,帮助开发者更好地利用ADO.NET提升应用的安全性和稳定性。
267 6
|
3月前
|
关系型数据库 Java MySQL
C#winform中使用SQLite数据库
C#winform中使用SQLite数据库
193 3
C#winform中使用SQLite数据库
|
3月前
|
关系型数据库 MySQL 大数据
C#使用SqlSugar操作MySQL数据库实现简单的增删改查
C#使用SqlSugar操作MySQL数据库实现简单的增删改查
260 2
|
3月前
|
SQL 安全 网络安全
"守护数据王国,揭秘SQL权限管理与安全配置秘籍!从创建用户到加密技术,全方位打造铜墙铁壁,让你的数据库安全无忧,远离黑客侵扰!"
【8月更文挑战第31天】数据库是信息系统的核心,存储了大量敏感数据,因此确保其安全至关重要。本文详细介绍了SQL权限管理与安全配置的方法,包括理解权限类型、创建用户和角色、分配权限、实施密码策略、使用加密技术、配置防火墙、定期审计备份及防止SQL注入等,帮助你全面保护数据库安全。通过这些步骤,你可以有效管理和配置数据库权限,防范潜在威胁,确保数据隐私和完整性。
80 0
|
4月前
|
SQL 关系型数据库 MySQL
云服务器 ECS产品使用问题之出现“1044 - Access denied for user ‘root‘@‘%‘ to database ‘数据库名称‘”这样的错误,该怎么办
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
3月前
|
Java C# 数据安全/隐私保护
如何 使 Java、C# md5 加密的值保持一致
如何 使 Java、C# md5 加密的值保持一致
47 0
|
3月前
|
C# 图形学 数据安全/隐私保护
Unity数据加密☀️ 二、使用Rider将C#代码生成DLL文件
Unity数据加密☀️ 二、使用Rider将C#代码生成DLL文件
下一篇
无影云桌面