2017-03-20 107 views
0

我想從我一直在努力的統一項目中訪問Microsoft Access數據庫文件,但它一直拋出異常,因爲它無法找到該文件,並且一直沒有標準河流已被選中。ODBC連接到.accdb文件

驗證碼:

using UnityEngine; 
using UnityEngine.UI; 
using System; 
using System.Data; 
using System.Data.Odbc; 

public class AccDBReader : MonoBehaviour { 

public string FileName; 
public string Table_Name; 
public string Column_name; 
public DataTable Dt; 
public string text; 
public Text testtext; 

public void Start() 
{ 
    FileName = "FestoMES.accdb"; 
    Table_Name = "tblResource"; 
    Column_name = "ResourceName"; 

    ReadACCDB(Application.dataPath + "/" + FileName); 
} 

internal void ReadACCDB(string fileToReadFrom) 
{ 
    //string connection = "Driver = {FestoODBCTest}; Dbq = " + fileToReadFrom +"; Uid = ; Pwd = ;"; 
    string connection = "Driver ={ Microsoft Access Driver(*.mdb, *.accdb)}; Dbq = " + fileToReadFrom + ";"; 
    Debug.Log("The connection string"); 
    Debug.Log(connection); 
    string sqlQuery = "SELECT "+Column_name+" FROM "+Table_Name; 
    OdbcConnection con = new OdbcConnection(connection); 
    OdbcCommand cmd = new OdbcCommand(sqlQuery, con); 

    try{ 
     con.Open(); 
     OdbcDataReader reader = cmd.ExecuteReader(); 
     Dt.Load(reader); 
     reader.Close(); 
     con.Close(); 
    } 

    catch(Exception ex) 
    { 
     Debug.Log("Throws an exception"); 
     Debug.Log(ex.ToString()); 
    } 

    finally 
    { 
     if(con.State != ConnectionState.Closed) 
     { 
      con.Close(); 
     } 
     con.Dispose(); 
    } 
    if(Dt.Rows.Count > 0 && Dt.Columns.Count > 0) 
    { 
     Debug.Log(Dt.ToString()); 
     testtext.text = Dt.ToString(); 
    } 
    else 
    { 
     Debug.Log("Didnt find a table"); 
     testtext.text = "Didnt Find a table"; 
    } 
} 

}

這是控制檯日誌的程序試圖運行後:

The connection string 

Driver ={ Microsoft Access Driver(*.mdb, *.accdb)}; Dbq = C:/Users/ASJ/Desktop/ODBC connections and Access/Assets/FestoMES.accdb; 

System.Data.Odbc.OdbcException: Error [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified. at System.Data.Odbc.OdbcConnection.Open()[0x00000] in <filename unkown>:0 

Didnt find a table 

它似乎沒有能夠找到該文件,但該文件存在於那個位置,有沒有人有一個想法,爲什麼司機不工作在我的情況?

回答

0

想出一個辦法來解決它使用自定義系統DSN,而不是

internal void ReadACCDB() 
{ 
    OdbcConnection conn = new OdbcConnection(); 
    conn.ConnectionString = "FIL=MS ACCESS;DSN=FestoACCDBTest"; 

    try 
    { 
     conn.Open(); 
     OdbcCommand dbCommand = conn.CreateCommand(); 
     dbCommand.CommandText = "SELECT ONo FROM tblFinOrder"; 
     OdbcDataReader dbReader = dbCommand.ExecuteReader(); 
     for (int i = 1; i < dbReader.FieldCount; i++) 
     { 
      testtext.text += " | " + dbReader.GetName(i); 
     } 
    } 
    catch(Exception ex) 
    { 
     testtext.text = ex.ToString(); 
    } 
    finally 
    { 
     conn.Close(); 
    } 
}