Unity3D 访问Access数据库
在开始这个小教程之前呢,其实在网上你已经可以找到相关的资料了,但是我还是要把我自己做练习的一点东西分享出来。写这个教程的主要原因呢,是一个朋友在u3d的官网论坛里,找到了这个demo,但是在他使用的过程中遇到了问题,我看了给他解决掉之后,为了其他朋友不至于发生同类的问题,特在此唠叨一番。在开始主题之前呢,我真的想说,北京的公交太不给力了,我这几天,每次等公交都要一个多小时,直接崩溃中。好,闲话不扯啦!下面开始我的教程之旅吧!
Access数据库呢,是一个轻量级的数据库,以前在学习.net应用开发的时候了解过。在pc的软件开发中,很多时候,我们存储的数据量不会很大的情况都会选择他,主要他轻量级,容易部署。更多Access的问题,可以去微软的官网查看。
在U3D中要访问Access数据库,我们需要用到两个dll,System.Data.dll和System.EnterpriseServices.dll,缺一不可。我们找到这两个dll放到u3d的Plugins文件夹下面。
- /* |——————————————-
- * |作者:Mr.野猪
- * |
- * |时间:2012/09/26 晚:23:56
- * |
- * |目的:用于技术交流
- * |——————————————
- */
- 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[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);
- }
- }