开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

教程分享

关注:620

当前位置:游戏蛮牛 技术专区 教程分享

查看: 775|回复: 4

[基础知识] Unity访问Access数据库

[复制链接]  [移动端链接]
7日久生情
4246/5000
排名
2112
昨日变化

1638

主题

1649

帖子

4246

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
132510
好友
17
蛮牛币
51284
威望
0
注册时间
2015-12-24
在线时间
347 小时
最后登录
2017-5-27
发表于 2016-9-8 11:08:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
  首先,准备工作:

  创建一个Access 数据库,命名AccessTest.accdb,添加一些数据用于测试

20160204124535695.png

  准备System.Data.dll与System.EnterpriseServices.dll两个插件,这是访问Access数据需要引用的dll

  如果完成后需要在其他电脑上访问,并且该电脑没有安装Office,就可以要求他安装access访问组件,然后就可以运行了,所有的相应组件与代码,后面都会给一个网盘链接

  然后开始创建Unity工程

  1.在unity工程文件夹Assets同级目录下创建一个SQLData文件夹用来存放Access数据库文件AccessTest.accdb

  2.在unity工程文件夹Assets目录下创建一个Plugins文件夹用来存放System.Data.dll与System.EnterpriseServices.dll两个dll文件

  3.创建一个功能脚本AccessData.cs,用来访问Access数据库

  [csharp] view plain copy 在CODE上查看代码片派生到我的代码片

  using System.Data.Odbc;

  using System.Data;

  using System;

  /****************************************

  * 功能:访问access数据库.

  * 创建: 2015-10-19 _D

  *

  * *************************************/

  public class AccessData

  {

  /// <summary>

  /// 本类对象

  /// </summary>

  private static AccessData accessData;

  /// <summary>

  /// 连接对象

  /// </summary>

  private OdbcConnection con;

  /// <summary>

  ///初始化并返回本类对象

  /// </summary>

  /// <returns></returns>

  public static AccessData getInstance()

  {

  if (accessData == null)

  {

  accessData = new AccessData();

  accessData.con = new OdbcConnection();

  }

  return accessData;

  }

  /// <summary>

  /// 数据库连接函数

  /// </summary>

  /// <param name="accessPath">access数据库路径</param>

  public void Connection(string accessPath)

  {

  string connection = "Driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=" + accessPath;

  con.ConnectionString = connection;

  try

  {

  if(con.State==ConnectionState.Closed)

  con.Open();

  }

  catch (Exception e)

  {

  throw new Exception(e.Message);

  }

  }

  /// <summary>

  /// 断开与数据库的连接

  /// </summary>

  public void Colse()

  {

  if (con.State != ConnectionState.Closed)

  {

  con.Close();

  }

  }

  /// <summary>

  /// 操作数据库

  /// </summary>

  /// <param name="sql">sql语句</param>

  /// <param name="dataTableName">返回的DataTable的名称</param>

  /// <returns></returns>

  public DataTable OperateAccess(string sql, string dataTableName)

  {

  OdbcCommand cmd = new OdbcCommand(sql,con);

  DataTable dt = new DataTable(dataTableName);

  OdbcDataReader reader = cmd.ExecuteReader();

  dt.Load(reader);

  reader.Close();

  return dt;

  }

  }

  4.创建一个测试脚本Test.cs,用来具体操作Access数据库

  [csharp] view plain copy 在CODE上查看代码片派生到我的代码片

  using UnityEngine;

  using System.Collections;

  using System.Data;

  public class Test : MonoBehaviour {

  /// <summary>

  /// Access数据库路径

  /// </summary>

  private string accessPath;

  // Use this for initialization

  void Start () {

  accessPath = Application.dataPath;

  int num=accessPath.LastIndexOf("/");

  accessPath = accessPath.Substring(0, num);

  accessPath += "/SQLData/AccessTest.accdb";

  AccessData.getInstance().Connection(accessPath);

  }

  string text = "";

  // Update is called once per frame

  void OnGUI () {

  if (GUI.Button(new Rect(0, 0, 100, 30), "查询"))

  {

  string sql = "select * from t_First";

  DataTable dt = AccessData.getInstance().OperateAccess(sql, "select_t_First");

  for (int i = 0; i < dt.Rows.Count; i++)

  {

  for (int j = 0; j < dt.Columns.Count; j++)

  {

  text +=dt.Columns[j].ColumnName + ":" + dt.Rows[dt.Columns[j].ColumnName]+" ";

  }

  text += "\n";

  }

  }

  GUI.Label(new Rect(0, 60, 200, 60), text);

  }

  }

  5.将Test脚本绑定在场景物体中,运行测试


回复

使用道具 举报

5熟悉之中
843/1000
排名
23000
昨日变化
12

10

主题

483

帖子

843

积分

Rank: 5Rank: 5

UID
158776
好友
0
蛮牛币
21
威望
0
注册时间
2016-7-26
在线时间
340 小时
最后登录
2017-5-29
发表于 2016-9-13 14:16:02 | 显示全部楼层
楼主不是给个盘链接吗?在哪里呀?

回复 支持 反对

使用道具 举报

排名
46663
昨日变化
22

0

主题

16

帖子

18

积分

Rank: 1

UID
173608
好友
0
蛮牛币
3
威望
0
注册时间
2016-10-6
在线时间
3 小时
最后登录
2016-10-6
QQ
发表于 2016-10-6 11:13:42 | 显示全部楼层
[基础知识] Unity访问Access数据库

回复 支持 反对

使用道具 举报

排名
18724
昨日变化
6

0

主题

19

帖子

47

积分

Rank: 1

UID
161748
好友
0
蛮牛币
68
威望
0
注册时间
2016-8-11
在线时间
12 小时
最后登录
2016-11-29
发表于 2016-11-16 13:53:03 | 显示全部楼层
报错呢,Exception: ERROR [IM002] [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
AccessData.Connection (System.String accessPath) (at Assets/Scripts/AccessData.cs:53)
Test.Start () (at Assets/Scripts/Test.cs:15)

回复 支持 反对

使用道具 举报

5熟悉之中
501/1000
排名
4202
昨日变化
2

0

主题

98

帖子

501

积分

Rank: 5Rank: 5

UID
119648
好友
0
蛮牛币
890
威望
0
注册时间
2015-8-25
在线时间
163 小时
最后登录
2017-5-19
QQ
发表于 2017-5-19 11:20:15 | 显示全部楼层
在Unity5.4.0f3(64位) 里面报null  请问楼主遇到过吗

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表