试图查询Excel文件的问题......“Microsoft Office Access数据库引擎找不到对象'Sheet1 $'..”

时间:2014-05-29 22:13:05

标签: c# excel oledb

我正在尝试使用我的C#应用​​程序从Excel工作表中查询数据。我现在似乎能够连接到该文件,但我得到以下异常......

The Microsoft Office Access database engine could not find the object 'Sheet1$'.

我正在使用类似于Excel connection strings

的连接字符串

这是我的代码......

代码基本上是一个方法(隐藏在一个类中),它使用参数变量根据另一个列中提供的数据从一列返回数据....这个方法适用于我的其他应用程序中的SQL连接。这是我在excel表上的第一次摇摆,但是..

public static string ReturnDefinition(string remCode)
    {
        string strReturnMessage = "";
        string excelConnectString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=MEDICARE.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=YES""";

        OleDbConnection objConn = new OleDbConnection(excelConnectString);
        OleDbCommand objCmd = new OleDbCommand("Select * from [Sheet1$] where Code = @remCode", objConn);
        objCmd.Parameters.AddWithValue("@remCode", remCode);

        try
        {
            objConn.Open();
            OleDbDataReader ExcelDataReader = objCmd.ExecuteReader(CommandBehavior.CloseConnection);
            if (ExcelDataReader.HasRows)
            {
                while (ExcelDataReader.Read())
                {
                    if (string.IsNullOrEmpty((string)ExcelDataReader["Description"]))
                    {
                        strReturnMessage = "** ERROR **";
                    }
                    else
                    {
                        strReturnMessage = ExcelDataReader["Description"].ToString();
                    }
                }
            }
            else
            {
                strReturnMessage = "** ERROR **";
            }
            ExcelDataReader.Close();
            return strReturnMessage;

        }
        catch (Exception ex)
        {
            return "** ERROR **: " + ex.Message;
        }
        finally
        {

        }
    }

5/30

我意识到那里有文献涵盖了使用OLEDB与Excel的连接,但我想我已经把这个问题归结为自己的工作表中的阅读问题。再次,这是我第一次尝试连接到Excel。我的HDR设置为true,因为我打算将表格视为SQL表。

在扩展属性中将Excel更改为v.14.0

我可能一直在针对错误的excel版本。具体来说,Excel工作表是使用Office 2010创建的。使用This Article作为参考,我将版本从12.0更改为14.0。

现在我得到Could not find installable ISAM

1 个答案:

答案 0 :(得分:0)

嗯,我想我现在已经弄明白了。 至少我可以到达工作表。

我只需要弄清楚我的数据类型是怎么回事。 我现在得到Data type mismatch in criteria expression.

从我的参数变量传递的数据是一个字符串,但我试图访问的列名(“代码”)包含某些行中的字符串,而其他行中包含int32。如果是SQL,我会说这个列的类型是CHAR(无论如何)。在这种情况下我不知道。

无论如何,这是我自己的决议......似乎我需要做的就是将工作表名称分配给变量,然后在我的查询中包含该变量。

enter public static string ReturnDefinition(string remCode)
    {
        string strReturnMessage = "";
        string excelConnectString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=MEDICARE.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=YES""";
        string excelSheet = "Sheet1$";

        OleDbConnection objConn = new OleDbConnection(excelConnectString);
        OleDbCommand excelCmd = new OleDbCommand("Select * from ["+ excelSheet + "] where Code = @remCode", objConn);
        excelCmd.Parameters.AddWithValue("@remCode", remCode);

        try
        {
            objConn.Open();
            OleDbDataReader ExcelDataReader = excelCmd.ExecuteReader(CommandBehavior.CloseConnection);
            if (ExcelDataReader.HasRows)
            {
                while (ExcelDataReader.Read())
                {
                    if (string.IsNullOrEmpty((string)ExcelDataReader["Description"]))
                    {
                        strReturnMessage = "** ERROR **";
                    }
                    else
                    {
                        strReturnMessage = ExcelDataReader["Description"].ToString();
                    }
                }
            }
            else
            {
                strReturnMessage = "** ERROR **";
            }
            ExcelDataReader.Close();
            return strReturnMessage;

        }
        catch (Exception ex)
        {
            return "** ERROR **: " + ex.Message;
        }
        finally
        {

        }
    }