3

ExcelファイルからAccessデータベースにデータを読み込むC#プロジェクトに取り組んでいます。type の例外が発生し続けOleDbExceptionます。問題は、そのエラーが発生する理由ではなく、それを処理する方法です。アップロードするファイルをユーザーに決定させ、一部のファイルのヘッダーまたは形式が正しくない可能性があるため、エラーが発生します。私が使用しているコードは次のとおりです。

** のある行は、例外をスローするものです。私は使用してみました:

  1. catch (OleDbException)
  2. catch {}
  3. catch (Exception)

しかし、例外が私の catch 句にスローされることはないようです。

public UploadGrades(string filename, OleDbConnection con)
{
    this.filename = filename;
    this.con = con;
    //connect to the file and retrive all data.
    excelconn = new OleDbConnection(
     @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"");;
   
    try
    {
        excelconn.Open();
        OleDbCommand command = new OleDbCommand("SELECT temp, name, score, submitdate, test from [sheet1$]", excelconn);
        **reader = command.ExecuteReader();**
    }
    catch 
    {
        MessageBox.Show("The File " + filename + " cann't be read.  It is either in use by a different user \n or it doen't contain the " +
            "correct columns.  Please ensure that column A1 is temp B1 is Name C1 is Score D1 is Submitdate and E1 is Test.");
    }
 }
4

1 に答える 1

1

接続文字列に問題があるか、ACE.OLEDB ライブラリがインストールされていないため、OleDB が適切なプロバイダーを見つけられない可能性があります。別の接続文字列については、このページを参照してください。または、ここからプロバイダーをダウンロードできるはずです。

次のことを試してみてください。

try
{

       using(OleDbConnection excelConnection = new OleDbConnection(String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"", filename)))
       {
        excelConnection .Open();     
          using(OleDbCommand command = new OleDbCommand("SELECT columbia_uni, name, score, submitdate, test from [sheet1$]", excelconn))
          {     
                 command.CommandType = CommandType.Text;
                 using(IDataReader reader = command.ExecuteReader())
                 {
                    while(reader.Read())
                    {
                      //Do something
                    }
                 }    
          }
       }


}
catch(Exception e)
{
    MessageBox.Show("The File " + filename + " cann't be read.  It is either in use by a different user \n or it doen't contain the correct columns.  Please ensure that column A1 is Columbia_UNI B1 is Name C1 is Score D1 is Submitdate and E1 is Test.\r\n The actual exception message is: " + e.Message);
}

using は try/finally と同等であり、接続、コマンド、および IDataReader オブジェクトが適切にクリーンアップされるようにします。catch ブロックは、このコードによって生成されたすべての例外を (ほとんど) キャッチする必要があります。

于 2012-04-05T21:15:55.870 に答える