我在使用一款工具时遇到了奇怪的问题,该工具应该能够从Excel文件中读取数据并将其写入SQL数据库。
string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source=" + filename + ";" +
"Extended Properties=\"Excel 12.0 Xml;HDR=YES\"";
DataTable dt;
OleDbDataAdapter dataAdapter;
dataAdapter = new OleDbDataAdapter("SELECT * FROM [" + sheet + "$]", strConn);
dt = new DataTable();
try
{
dataAdapter.Fill(dt); //Programm reagiert nicht mehr
}
catch(Exception ex)
{
Logger("Problem filling Adapter: " + ex.ToString());
return null;
}
在dataAdapter.Fill(dt)处出现以下异常:
填充适配器时出现问题:System.AccessViolationException:尝试读取或写入受保护的内存。这通常是其他内存损坏的指示。 at System.Data.OleDb.DataSourceWrapper.InitializeAndCreateSession(OleDbConnectionString constr, SessionWrapper& sessionWrapper) at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) at System.Data.OleDb.OleDbConnection.Open() at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) at System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior) at System.Data.Common.DbDataAdapter.Fill(DataTable dataTable) at ExcelExportWindowsForms.Program.ReadExcel(String filename, String sheet)
有趣的是,在我的电脑上(Excel 2013)完美运行,但在安装了Excel 2003的服务器上却无法运行。这可能是原因吗?
Extended Properties="Excel 8.0;
。 - HoneyBadger