博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转载]Unity3D 访问Access数据库
阅读量:5103 次
发布时间:2019-06-13

本文共 4014 字,大约阅读时间需要 13 分钟。

在开始这个小教程之前呢,其实在网上你已经可以找到相关的资料了,但是我还是要把我自己做练习的一点东西分享出来。写这个教程的主要原因呢,是一个朋友在u3d的官网论坛里,找到了这个demo,但是在他使用的过程中遇到了问题,我看了给他解决掉之后,为了其他朋友不至于发生同类的问题,特在此唠叨一番。在开始主题之前呢,我真的想说,北京的公交太不给力了,我这几天,每次等公交都要一个多小时,直接崩溃中。好,闲话不扯啦!下面开始我的教程之旅吧!

 
Access数据库呢,是一个轻量级的数据库,以前在学习.net应用开发的时候了解过。在pc的软件开发中,很多时候,我们存储的数据量不会很大的情况都会选择他,主要他轻量级,容易部署。更多Access的问题,可以去微软的官网查看。
 
在U3D中要访问Access数据库,我们需要用到两个dll,System.Data.dll和System.EnterpriseServices.dll,缺一不可。我们找到这两个dll放到u3d的Plugins文件夹下面。

下面我们创建一个Access数据库版本是07样式是*.accdb(03版本的Access数据库的样式为*.mdb)在我们进行code的时候,要根据不同的版本进行判断啦,对于不同的Access数据库版本,我们要对应不懂的文件后缀名。要不然会提示你数据库文件是未知文件。
下面是读取Access的一个demo,其他的修改,添加数据都是在修改他的sql语句啦,相关的知识,可以查看Access在.net中如何对Access进行CURD操作的。简单的代码如下:
/* |------------------------------------------- * |作者:Mr.野猪 * | * |时间:2012/09/26  晚:23:56 * | * |目的:用于技术交流 * |------------------------------------------ */using UnityEngine;using System.Collections;//引入命名空间using System;using System.Data;using System.Data.Odbc;public class RaderData : MonoBehaviour {    ///     /// 声明一个接受读取数据字段值的变量    ///     string text = string.Empty;    public void Start()    {        //读取数据文件。        ReadStudent(Application.dataPath + "/Wild boar.accdb");    }    ///     /// 读取表数值的函数    ///     /// 数据文件的路径    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[dt.Columns[0].ColumnName].ToString() + "  |  " + dt.Columns[1].ColumnName + " : " + dt.Rows[dt.Columns[1].ColumnName].ToString() + "  |  " + dt.Columns[2].ColumnName + " : " + dt.Rows[dt.Columns[2].ColumnName].ToString() + "  |  " + dt.Columns[3].ColumnName + " : " + dt.Rows[dt.Columns[3].ColumnName].ToString();                Debug.Log(dt.Columns[0].ColumnName + " : " + dt.Rows[dt.Columns[0].ColumnName].ToString() + "  |  " + dt.Columns[1].ColumnName + " : " + dt.Rows[dt.Columns[1].ColumnName].ToString() + "  |  " + dt.Columns[2].ColumnName + " : " + dt.Rows[dt.Columns[2].ColumnName].ToString() + "  |  " + dt.Columns[3].ColumnName + " : " + dt.Rows[dt.Columns[3].ColumnName].ToString());            }        }    }    public void OnGUI()    {        GUI.Label(new Rect(10,10,500,200),text);    }}
下一步,我们生成exe文件.执行完毕之后,我们打开生成的程序截图如下:
为什么会出现这个问题。我在u3d里面看到了他的显示啊,如下:
其实呢,我们在部署的时候,要把数据库文件,copy到生成的文件夹下就可以啦!
再次运行程序,查看效果。如下:
 
好,看到这里,你应该知道了,我今天重点要说的就是这个问题啦!
下面是我在制作demo时,遇到的问题还有些是我特意测试需要注意的地方:
注意:
1. 一定要记住的是,访问Access数据库时,那两个dll缺一不可,缺少就会出现问题。
2. 在带有dll动态链接库的项目,要在打包时设置他的API兼容层级为.NET 2.0。
3. 使用不同版本的Access数据库要对应不同版本相对应的后缀名。
4. 如果想单独创建一个存放Access数据库的文件夹,你需要在code时,找到这个文件夹,然后打包之后,把你的Access数据库放到与code相对应的位置。要不然,检测不到数据库。
5. 在创建数据库时要认真,嘿嘿,有可能是你的文件名字和后缀名之间多个空格,你的数据也会读不出,在u3d中运行,会提示你未知文件。
6. 就是老生常谈的话题了,sql查询语句一定要记住,拼写正确,标点符号也要对应起来,要不然,出现个小问题,会让你DT好久。曾经在做应用时,也DT过。嘿嘿!
 
就先总结这几点吧!有什么问题,我们在一块交流进步啦!
最后还想说,在我逃离IT之前,我会努力的前行,为了我可以早点离开!
 
DLL下载
http://pan.baidu.com/s/1jGwU8Wu

转载于:https://www.cnblogs.com/iack/p/3575734.html

你可能感兴趣的文章
Groovy中那些神奇注解之ToString
查看>>
如何在IDEA 中使用Git
查看>>
宇宙第一开发工具:vs2019 开发Python
查看>>
Tomcat Https配置
查看>>
百度地图 android SDKv2.2.0
查看>>
[贪心][模拟] Jzoj P5811 简单的填数
查看>>
react样式
查看>>
document.body
查看>>
大话存储系列21——存储系统内部IO 上
查看>>
检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法
查看>>
关于mybatis中基本类型条件判断问题
查看>>
RDD之二:原理
查看>>
Struts2.0 xml文件的配置(package,namespace,action)
查看>>
转载:【Oracle 集群】RAC知识图文详细教程(四)--缓存融合技术和主要后台进程
查看>>
2018-2019-2 网络对抗技术 20165301 Exp 9 Web安全基础
查看>>
将20180608141920转成date格式
查看>>
位操作
查看>>
待续--mysql中key 、primary key 、unique key 与index区别
查看>>
Day19内容回顾
查看>>
【bzoj1050】[HAOI2006]旅行comf 并查集
查看>>