我正在尝试使用我的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
答案 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
{
}
}