System.Data.OleDb.OleDbException:无法找到可安装的ISAM

问题描述:

我已经搜遍了网络,发现很多人问这个问题,但没有人确定我的答案。System.Data.OleDb.OleDbException:无法找到可安装的ISAM

我有一个连接类和一个在页面中使用该类的方法。

DataConn.cs

public static OleDbConnection ConnectExcel() 
{ 
    //Store the connection details as a string 
    string connstr = 
     String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=pricelist.xlsx;Extended Properties=Excel 12.0 Xml;HDR=YES"); 

    //Initialise the connection to the server using the connection string. 
    OleDbConnection oledbConn = new OleDbConnection(connstr); 

    //Open the connection, we do this here so we can instantly be able to use SQL commands in the code. 
    oledbConn.Open(); 

    return oledbConn; 
} 

public static void DisconnectExcel() 
{ 
    _oledbConn.Dispose(); 
    _oledbConn.Close(); 
} 

并调用它

protected void Page_Load(object sender, EventArgs e) 
{ 
    // Connection String 
    const string xlStr = "SELECT * FROM [Sheet2$]"; 

    // Create OleDbCommand object and select data from worksheet Food 
    OleDbCommand cmd = new OleDbCommand(xlStr, DataConn.ConnectExcel()); 

    // Create new OleDbDataAdapter 
    OleDbDataAdapter oleda = new OleDbDataAdapter(); 

    oleda.SelectCommand = cmd; 

    // Create a DataSet which will hold the data extracted from the worksheet. 
    DataSet ds = new DataSet(); 

    // Fill the DataSet from the data extracted from the worksheet. 
    oleda.Fill(ds); 

    // Bind the data to the GridView 
    gridPricelist.DataSource = ds; 
    gridPricelist.DataBind(); 
} 

是的,我仍然获得代码:

System.Data.OleDb.OleDbException:找不到可安装的ISAM。

任何人都可以请帮忙吗?

+0

在这个问题右边的相关栏目中,您会发现几十个与您的问题相同的问题。 – Steve 2012-07-19 13:53:28

如果您使用多个扩展属性,则必须引用值标记,否则驱动程序无法将它们与连接字符串中的其他非扩展属性区分开来;

...Extended Properties=""Excel 8.0;IMEX=1""" 

修改连接字符串

String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=pricelist.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=YES"""); 

参考: Could not find installable ISAM

+0

完美!感谢您的帮助。 :D – TheGeekZn 2012-07-19 18:03:13

+0

@NewAmbition欢迎你 – 2012-07-19 18:07:59

+0

仍然帮助afetr 1.5年 – 2014-02-06 06:58:08

如果已安装的LibreOffice寻找cli_basetypes.dll,cli_cppuhelper.dll,cli_oootypes.dll,cli_uno.dll ,cli_ure.dll,cli_uretypes.dll然后添加对您的项目的引用(与LibreOffice API一起工作),我还安装了“用于Word,Excel和PowerPoint Fil的Microsoft Office兼容包e格式“和”Microsoft Access数据库引擎2010可再发行组件“(要在没有完整Office安装的情况下获取ACE.OLEDB.12.O连接)。这是VB Sample的一部分,其中我连接到oledb以创建一些查询。

OpenFileDialog.Filter = "Spreadsheets (*.xls*)|*.xls*" 
    OpenFileDialog.Multiselect = False 
    Try 
     If (OpenFileDialog.ShowDialog() = System.Windows.Forms.DialogResult.OK) Then 
      objOffice = CreateObject("com.sun.star.ServiceManager") 'preparar instancia libreOffice (prepare libreOffice instance) 
      instOffice = objOffice.createInstance("com.sun.star.frame.Desktop") 
      Dim obj(-1) As Object 
      Dim myDoc = instOffice.loadComponentFromURL("file:///" & OpenFileDialog.FileName.Replace("\", "/"), "_default", 0, obj) 
      Dim hojas = myDoc.getSheets().getElementNames() 'Obtener nombres de las hojas de calculo (get Spreadsheet names) 
      System.Threading.Thread.Sleep(1000) 'Esperar a que termine la instancia Office (await libreOffice thread) 
      myDoc.Close(True) 

      Dim MyConnection As System.Data.OleDb.OleDbConnection 'Preparar conexión para realizar consulta tipo sql (preparing connection) 
      Dim DtSet As System.Data.DataSet 
      Dim MyCommand As System.Data.OleDb.OleDbDataAdapter 

      If OpenFileDialog.FileName.ToUpper.Contains(".XLSX") Then 
       MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & OpenFileDialog.FileName & "';Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1;'") 
      Else 
       MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & OpenFileDialog.FileName & "';Extended Properties='Excel 12.0;HDR=YES;IMEX=1'") 
      End If