讲解Unity3D 访问Access数据库

2015年03月17日 11:30 0 点赞 0 评论 更新于 2017-05-04 10:33

一、Access数据库简介

Access数据库是一个轻量级的数据库,在学习.NET应用开发时经常会接触到。在PC软件开发中,当存储的数据量不大时,很多开发者会选择Access数据库,主要原因在于它具有轻量级、易于部署的特点。若想了解更多关于Access数据库的详细信息,可以访问微软的官方网站。

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

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

三、创建Access数据库

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

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

以下是一个读取Access数据库的示例代码,其他的数据修改、添加等操作,主要是修改SQL语句。关于Access在.NET中进行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文件后,可能会遇到一些显示问题。在U3D中可以正常显示数据,但生成的程序却无法正常显示。这是因为在部署时,需要将数据库文件复制到生成的文件夹下,再次运行程序即可看到正确的效果。

六、注意事项

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

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

七、DLL文件下载

DLL文件下载链接:http://pan.baidu.com/s/1c06fwiO

作者信息

menghao

menghao

共发布了 332 篇文章