0

Excelファイルからデータを読み取るコードを書いています。以前、Excel ファイルを既に開いていた場合、コードは 'Catch()' ブロックに入り、例外をスローしました。現在、例外はスローされませんが、読み取りに非常に長い時間がかかります。「Catch()」ブロックに入らない理由を知りたいです。

コード:

DataTable VendorCodesTable = new DataTable("VendorCodesData");
DataTable ForSheetName = new DataTable("ForSheetName");
string SheetName = "Sheet1$";
try
{
    ExcelConnectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", fileName);
    OleDbConnection conn = new OleDbConnection();
    conn.ConnectionString = ExcelConnectionString;
    conn.Open();
    ForSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
    if (ForSheetName != null)
    {
        SheetName = ForSheetName.Rows[0]["TABLE_NAME"].ToString();
    }
    conn.Close();
    OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM ["+SheetName+"]", ExcelConnectionString);
    adapter.Fill(VendorCodesTable);
}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString(), "Exception");
}
return VendorCodesTable;

このコードを追加したところ、エラーがスローされなくなり、ファイルのロードに非常に長い時間がかかりました。

OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = ExcelConnectionString;
conn.Open();
ForSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
if (ForSheetName != null)
{
    SheetName = ForSheetName.Rows[0]["TABLE_NAME"].ToString();
}
conn.Close();

今、上記の行にコメントしても、「Catch()」には入りません

4

1 に答える 1

0

ファイルが開いている場合にクエリが失敗するかどうかはわかりません。単に待機するだけかもしれません...次のようにこの状態をテストできます: VB.NET コード:

Private Function FileIsReadable(Path As String) As Boolean
Dim RV As Boolean = True

'tests if the file is open. Returns true if the file is not opened by excel.

Dim stream As IO.FileStream = Nothing
Try
    stream = IO.File.Open(Path, IO.FileMode.Open, IO.FileAccess.ReadWrite, IO.FileShare.None)
Catch ex As Exception

    If TypeOf ex Is IO.IOException AndAlso IsFileLocked(ex) Then
        RV = False
    End If
Finally
    If IsNothing(stream) = False Then
        stream.Dispose()
    End If

End Try

Return RV

終了機能

于 2012-11-20T07:24:21.443 に答える