내 컴퓨터에서 Excel 파일에 성공적으로 연결하는 다음 코드 (Windows Form의 일부)가 있지만 다른 상자에서는 실패합니다.OleDbException (0x80004005) : 알 수 없음
var fd = new OpenFileDialog();
if (fd.ShowDialog() == DialogResult.OK)
{
var extendedProperties = string.Empty;
if (fd.FileName.Contains(".xlsx"))
{
// excel 2007 xml format file, IMEX = import data as text avoids data conversion errors
extendedProperties = "Excel 12.0 Xml;IMEX=1";
}
else if (fd.FileName.Contains(".xls"))
{
// excel 2003 format file, IMEX: import data as text avoids data conversion errors
extendedProperties = "Excel 8.0;IMEX=1";
}
var connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + fd.FileName + "';Extended Properties='" + extendedProperties + "'";
using (var objXConn = new OleDbConnection(connectionString))
{
objXConn.Open();
var selectStatement = string.Format("SELECT * FROM [tabName$] WHERE FormType IS NOT NULL");
var dataTable = new DataTable("test");
using (var objCommand = new OleDbCommand(selectStatement, objXConn))
{
var dataReader = objCommand.ExecuteReader();
if (dataReader != null)
{
dataTable.Load(dataReader);
}
}
using (var stringWriter = new StringWriter())
{
dataTable.WriteXml(stringWriter);
this.textBox1.Text = stringWriter.ToString();
}
}
}
동작은 OleDbCommand.ExecuteReader()
보다는 OleDbDataAdapter
를 사용하여 재현.
using (var dataAdapter = new OleDbDataAdapter(selectStatement, objXConn))
{
dataAdapter.Fill(dataTable);
}
실패하면, 내가/실행하는 x86 구성으로 프로그램을 작성할 때 다음과 같은 오류가 줄 dataTable.Load(dataReader);
에서 발생 점점 의미, 나는 다음과 같은 오류가 발생합니다.
System.Data.OleDb.OleDbException (0x80004005): Unknown
at System.Data.OleDb.OleDbDataReader.ProcessResults(OleDbHResult hr)
at System.Data.OleDb.OleDbDataReader.GetRowHandles()
at System.Data.OleDb.OleDbDataReader.ReadRowset()
at System.Data.OleDb.OleDbDataReader.Read()
at System.Data.Common.DataAdapter.FillLoadDataRow(SchemaMapping mapping)
at System.Data.Common.DataAdapter.FillFromReader(DataSet dataset, DataTable datatable, String srcTable, DataReaderContainer dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)
at System.Data.Common.DataAdapter.Fill(DataTable[] dataTables, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
at System.Data.Common.LoadAdapter.FillFromReader(DataTable[] dataTables, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
at System.Data.DataTable.Load(IDataReader reader, LoadOption loadOption, FillErrorEventHandler errorHandler)
at ExcelTest.Form1.button1_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
AnyCPU/x64 구성으로 프로그램을 실행/빌드 할 때 두 컴퓨터에서 다음 오류가 발생합니다.
테스트에 사용되는 Excel 파일은 두 컴퓨터에서 같은 파일입니다. 여러 파일 (모두 .xls
ans .xlsx
)을 사용하여 문제를 재현 할 수있었습니다.
문제점을 해결하기 위해 다음 사항을 시도했습니다.
- 프로젝트를 구성
- 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine에 설명 된 구성 요소 설치 86/64
- 제거 및 2007 Office System Driver: Data Connectivity Components
- 제거 재설치 내가 troublehsoot하기 위해 취할 수있는 추가적인 어떤 조치 Microsoft Access Database Engine 2010 Redistributable
다시 설치 이 문제를 해결 하시겠습니까?
그래서 내가 뭔가 비슷한 지난주, 지난 우연히 내가 86을 실행하는 anycpu를에서 내 프로젝트 속성을 변경 .. 실제로에 날려 무엇 라인 그것은 비슷한 문제를 해결 .. – MethodMan
@MethodMan 질문을 특정 줄로 업데이트했습니다. –
두 컴퓨터에서 파일이 동일합니까? 오류는 dataTable.Load 호출에서 발생합니다. – Steve