Unity3D 访问Access数据库

2015年03月14日 11:26 0 点赞 0 评论 更新于 2025-11-21 17:01

一、Access数据库简介

Access数据库是一个轻量级的数据库,在学习.NET应用开发时会有所接触。在PC的软件开发中,当存储的数据量不大时,很多开发者会选择使用Access数据库,主要原因在于它轻量级且易于部署。关于Access数据库的更多信息,可以前往微软的官网进行查看。

二、Unity3D访问Access数据库的准备工作

在Unity3D(U3D)中访问Access数据库,需要用到两个必要的DLL文件,分别是System.Data.dllSystem.EnterpriseServices.dll。将这两个DLL文件找到并放置到U3D项目的Plugins文件夹下。

三、创建Access数据库

创建一个Access数据库,这里以07版本为例,其文件样式为*.accdb(03版本的Access数据库文件样式为*.mdb)。在编写代码时,需要根据不同的Access数据库版本,对应使用不同的文件后缀名。否则,程序会提示数据库文件为未知文件。

四、读取Access数据库的示例代码

以下是一个读取Access数据库的示例代码,其他的修改、添加数据等操作主要是修改SQL语句。关于在.NET中对Access进行CURD操作的相关知识,可以进一步查阅资料。

using UnityEngine;
using System.Collections;
// 引入命名空间
using System;
using System.Data;
using System.Data.Odbc;

public class RaderData : MonoBehaviour
{
/// <summary>
/// 声明一个接受读取数据字段值的变量
/// </summary>
string text = string.Empty;

public void Start()
{
// 读取数据文件
ReadStudent(Application.dataPath + "/Wild boar.accdb");
}

/// <summary>
/// 读取表数值的函数
/// </summary>
/// <param name="filetoread">数据文件的路径</param>
internal void ReadStudent(string filetoread)
{
// 声明连接数据库的字段
string connection = "Driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=" + filetoread;

// 从表中查询所有数据
string sqlQuery = "select * from Student";

// 打开数据库
OdbcConnection con = new OdbcConnection(connection);

// 对数据库进行操作
OdbcCommand cmd = new OdbcCommand(sqlQuery, con);

// 根据表名,读取数据到一个临时表
DataTable dt = new DataTable("Student");

// 使用try-catch-finally进行异常处理,这是一个良好的编程习惯
try
{
// 打开数据库
con.Open();

// 读取数据
OdbcDataReader reader = cmd.ExecuteReader();

// 把数据加载到临时表
dt.Load(reader);

// 在使用完毕之后,一定要关闭,否则会出现问题
reader.Close();

// 关闭数据库
con.Close();
}
catch (Exception ex)
{
Debug.Log(ex.ToString());
}
finally
{
// 判断数据库是否打开,如果打开则关闭
if (con.State != ConnectionState.Closed)
{
con.Close();
}

// 释放数据库资源
con.Dispose();
}

if (dt.Rows.Count > 0)
{
// 读取数据
for (int i = 0; i < dt.Rows.Count; i++)
{
text = $"{dt.Columns[0].ColumnName} : {dt.Rows[i][dt.Columns[0].ColumnName].ToString()}  |  {dt.Columns[1].ColumnName} : {dt.Rows[i][dt.Columns[1].ColumnName].ToString()}  |  {dt.Columns[2].ColumnName} : {dt.Rows[i][dt.Columns[2].ColumnName].ToString()}  |  {dt.Columns[3].ColumnName} : {dt.Rows[i][dt.Columns[3].ColumnName].ToString()}";
Debug.Log(text);
}
}
}

public void OnGUI()
{
GUI.Label(new Rect(10, 10, 500, 200), text);
}
}

五、生成EXE文件及部署

生成EXE文件后,打开生成的程序。在部署时,需要将数据库文件复制到生成的文件夹下。再次运行程序,查看效果。

六、注意事项

在制作示例项目时,有以下一些需要注意的问题:

  1. DLL文件的必要性:访问Access数据库时,System.Data.dllSystem.EnterpriseServices.dll这两个DLL文件缺一不可,缺少任何一个都会出现问题。
  2. API兼容层级设置:在带有DLL动态链接库的项目中,打包时需要将API兼容层级设置为.NET 2.0
  3. 数据库版本与后缀名:使用不同版本的Access数据库要对应不同的后缀名,如03版本对应.mdb,07版本对应.accdb
  4. 数据库文件夹设置:如果想单独创建一个存放Access数据库的文件夹,在编写代码时需要找到这个文件夹,打包后将Access数据库放到与代码中相对应的位置,否则程序将检测不到数据库。
  5. 数据库文件命名:创建数据库时要认真,文件名字和后缀名之间不能有多余的空格,否则在U3D中运行时会提示未知文件,导致数据无法读取。
  6. SQL查询语句:SQL查询语句的拼写要正确,标点符号也要对应准确,一个小错误可能会导致程序出现问题,排查起来会比较麻烦。

七、DLL文件下载

用到的DLL文件下载链接:http://pan.baidu.com/s/1ntHsnzF

作者信息

boke

boke

共发布了 3994 篇文章