Microsoft Access Database C# Connect

Hey everyone,

I am trying to connect to a Microsoft Access database .mdb can this be done?

I would normally connect to an Sql database but due to project limitations I cant,

I came across this script a while ago what modifications will it need to run in Unity? It also has to be compatible to run under UWP,

Thanks in advance,

  • publicstringFinalDatabasePath=“”;
  • publicstringMydatabaseName=“Database1.mdb”;
  • publicstring myFinalResult=“null”;
  • voidStart()
  • {
  • StartCoroutine(CopyFileAsyncOnAndroid());
  • }
  • internalvoid 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 =newOdbcConnection(con);
  • // our command object
  • OdbcCommand oCmd =newOdbcCommand(yourQuery, oCon);
  • // table to hold the data
  • DataTable dtYourData =newDataTable(“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*[dtYourData.Columns[0].ColumnName].ToString()+*
    - " | “+ dtYourData.Columns[1].ColumnName+” : "+ dtYourData.Rows*[dtYourData.Columns[1].ColumnName].ToString()+*
    - " | “+ dtYourData.Columns[2].ColumnName+” : "+ dtYourData.Rows*[dtYourData.Columns[2].ColumnName].ToString()+*
    - " | “+ dtYourData.Columns[3].ColumnName+” : "+ dtYourData.Rows*[dtYourData.Columns[3].ColumnName].ToString()*
    - - );*
    - - myFinalResult = dtYourData.Rows[2][dtYourData.Columns[1].ColumnName].ToString();*
    - - }*
    - - }*
    - - }*
    - - IEnumeratorCopyFileAsyncOnAndroid()*
    - - {*
    - - string fromPath =Application.streamingAssetsPath +“/”;*
    - - //In Android = “jar:file://” + Application.dataPath + “!/assets/”*
    - - string toPath =Application.persistentDataPath +“/”;*
    - - string[ ] filesNamesToCopy =newstring[ ]{“Database1.mdb”};*
    - - foreach(string fileName in filesNamesToCopy)*
    - - {*
    - - WWW www1 =new WWW( fromPath +fileName);*
    - - yieldreturn www1;*
    - - File.WriteAllBytes(toPath+ fileName, www1.bytes);*
    - - }[/I][/I][/I][/I]*
    }
    void OnGUI() { if (GUI.Button(new Rect(10,20,50,50),“calc”))

- {
- readMDB(Application.persistentDataPath);
- }
- GUI.Label(newRect(100,150,100,100),myFinalResult);
- }
}

Ugh that code formatting dont know whats happened there…

Maybe you should try to remove the line numbers?

publicstringFinalDatabasePath="";
publicstringMydatabaseName="Database1.mdb";
publicstring myFinalResult="null";
voidStart()
{
StartCoroutine(CopyFileAsyncOnAndroid());
}
internalvoid 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 =newOdbcConnection(con);
// our command object
OdbcCommand oCmd =newOdbcCommand(yourQuery, oCon);
// table to hold the data
DataTable dtYourData =newDataTable("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();
}
}
}
IEnumeratorCopyFileAsyncOnAndroid()
{
string fromPath =Application.streamingAssetsPath +"/";
//In Android = "jar:file://" + Application.dataPath + "!/assets/"
string toPath =Application.persistentDataPath +"/";
string[] filesNamesToCopy =newstring[]{"Database1.mdb"};
foreach(string fileName in filesNamesToCopy)
{
WWW www1 =new WWW( fromPath +fileName);
yieldreturn www1;
File.WriteAllBytes(toPath+ fileName, www1.bytes);
}
1 Like

Voila!

Hey im struggling to read and write any year version of an MDB without errors inside unity. How did you manage to get it to work properly? Thanks!

Hi,
I know this thread is a bit dusty, but i’m doing a unity project for coursework and due to specification limitations, i need to use a .mdb Access database.
Did you ever get it working?

Thanks