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