2017-03-20 104 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(); 
    } 
}