我们组织中的生产应用程序使用Excel 2003文件通过Web应用程序处理用户提交的数据。此应用程序大多数时间都可靠地运行。最近,当调用OleDbConnection.Open()方法时,应用程序已经开始间歇性地抛出“System.Data.OleDb.OleDbException:Unspecified error”。错误一直持续到应用程序池被回收,此时一切都按预期再次运行。在Windows应用程序事件日志中没有捕获任何错误。
ASP.NET Web应用程序托管在Windows Server 2003 32位计算机上的WSS 3.0中的Web部件中。该应用程序旨在防止任何并发问题。系统功能ID是唯一可以访问临时文件存储的帐户,并且内置了一些机制,以确保在使用唯一命名约定和上载跟踪子系统处理期间,另一个上载不会覆盖该文件。
非常感谢任何见解。
我们使用以下代码从Excel 2003文件中检索数据:
public static DataTable GetWorksheetData(string filePath)
{
OleDbConnectionStringBuilder builder = new OleDbConnectionStringBuilder { DataSource = filePath };
builder.Provider = "Microsoft.Jet.OLEDB.4.0";
builder["Extended Properties"] = "Excel 8.0;IMEX=1;HDR=YES";
DataTable table = new DataTable();
try
{
// Creates an OleDbConnection for the excel file
using (OleDbConnection connection = new OleDbConnection(builder.ConnectionString))
{
connection.Open();
string sheetName = GetWorksheet(connection, "Template");
if (!string.IsNullOrEmpty(sheetName))
{
using (OleDbCommand command = connection.CreateCommand())
{
try
{
command.CommandText = string.Format("SELECT * FROM [{0}]", sheetName);
using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
using (DataSet dataSet = new DataSet())
{
adapter.Fill(dataSet);
table = dataSet.Tables[0];
}
}
finally
{
connection.Close();
}
}
}
else
{
throw new InvalidWorksheetException();
}
}
}
catch (Exception ex)
{
Logger.Write(LogMsgSeverity.Error, ex);
throw;
}
return table;
}
private static string GetWorksheet(OleDbConnection connection, string sheetName)
{
string validSheetName = string.Empty;
using (DataTable tables = connection.GetSchema("Tables"))
{
DataRowCollection rows = tables.Rows;
if (rows.Count > 0)
{
foreach (DataRow row in rows)
{
if (row["Table_Name"].ToString().Contains(sheetName))
{
validSheetName = sheetName;
}
}
}
}
return validSheetName;
}