- Home /
how to read a Microsoft access database in unity 3d
I want to read a .mdb(Access 2003)in unity3d for reading in android Platform,I dont want use SQLite then please dont suggest using that , just give a tested example which work in android completely it its not important how much your file is simple. i try to write my database copy from streamingAssets to perssistentdata path then over there read my database.(i use this style in .txt file and it is working well)then i think i have problem in opening database in android platform.
using UnityEngine; using System.Collections; using System; using System.IO; using System.Data; using System.Data.Odbc;
public class ACCESSREADER : MonoBehaviour {
public string FinalDatabasePath="";
public string MydatabaseName="Database1.mdb";
public string myFinalResult="null";
void Start ()
{
StartCoroutine(CopyFileAsyncOnAndroid());
}
internal void readMDB( string filetoread)
{
string con = "Driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ="+ filetoread + "/Database1.mdb";
Debug.Log(con);
string yourQuery = "SELECT * FROM PlayersQuery";
// our odbc connector
OdbcConnection oCon = new OdbcConnection(con);
// our command object
OdbcCommand oCmd = new OdbcCommand(yourQuery, oCon);
// table to hold the data
DataTable dtYourData = new DataTable("YourData");
try
{
oCon.Open();
OdbcDataReader rData = oCmd.ExecuteReader();
dtYourData.Load(rData);
rData.Close();
oCon.Close();
}
catch (Exception ex)
{
Debug.Log(ex.ToString());
}
finally
{
if (oCon.State != ConnectionState.Closed)
oCon.Close();
oCon.Dispose();
}
if(dtYourData.Rows.Count > 0)
{
for (int i = 0; i < dtYourData.Rows.Count; i++)
{
// for giggles, lets see the column name then the data for that column!
Debug.Log(dtYourData.Columns[0].ColumnName + " : " + dtYourData.Rows[i][dtYourData.Columns[0].ColumnName].ToString() +
" | " + dtYourData.Columns[1].ColumnName + " : " + dtYourData.Rows[i][dtYourData.Columns[1].ColumnName].ToString() +
" | " + dtYourData.Columns[2].ColumnName + " : " + dtYourData.Rows[i][dtYourData.Columns[2].ColumnName].ToString() +
" | " + dtYourData.Columns[3].ColumnName + " : " + dtYourData.Rows[i][dtYourData.Columns[3].ColumnName].ToString()
);
myFinalResult = dtYourData.Rows[2][dtYourData.Columns[1].ColumnName].ToString();
}
}
}
IEnumerator CopyFileAsyncOnAndroid()
{
string fromPath = Application.streamingAssetsPath +"/";
//In Android = "jar:file://" + Application.dataPath + "!/assets/"
string toPath = Application.persistentDataPath +"/";
string[] filesNamesToCopy = new string[] { "Database1.mdb"};
foreach (string fileName in filesNamesToCopy)
{
WWW www1 = new WWW( fromPath +fileName);
yield return www1;
File.WriteAllBytes(toPath+ fileName, www1.bytes);
}
}
void OnGUI() { if (GUI.Button(new Rect(10,20,50,50),"calc"))
{
readMDB(Application.persistentDataPath);
}
GUI.Label(new Rect(100,150,100,100),myFinalResult);
}
}
Your answer
Follow this Question
Related Questions
Read boolean from parent's script 2 Answers
Read/Write attachments from MS AccessDB 0 Answers
SqliteException: Unable to open the database file - Ready-made DB Provided To Access 0 Answers
save and load firebase 0 Answers
How to access Android music library? 0 Answers