原博主博客地址: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