не могу понять, почему я получаю System.Data.OleDb.OleDbException для файла Excel - PullRequest
1 голос
/ 12 декабря 2011
    OpenFileDialog openFileDialog1 = new OpenFileDialog();
    openFileDialog1.Filter = "Excel files (*.xls)|*.xls|All files (*.*)|*.*";
    openFileDialog1.FilterIndex = 2;
    openFileDialog1.RestoreDirectory = true;

    // Show the dialog and get result.
    DialogResult result = openFileDialog1.ShowDialog();
    if (result == DialogResult.OK) // Test result.
    {
        labelFilePath.Text = openFileDialog1.FileName;
        string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + labelFilePath.Text.Trim() + ";Extended Properties=\"Excel 8.0;HDR=YES\"";
        using (var conn = new System.Data.OleDb.OleDbConnection(connString)) 
        { 
            conn.Open(); 
            try
            {
                using (OleDbCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "Select * From [Sheet1]";
                    using (OleDbDataReader reader = cmd.ExecuteReader())
                    {
                        int firstNameOrdinal = reader.GetOrdinal("First Name");
                        int lastNameOrdinal = reader.GetOrdinal("Last Name");
                        while (reader.Read())
                        {
                            Console.WriteLine("First Name: {0}, Last Name: {1}", reader.GetString(firstNameOrdinal), reader.GetString(lastNameOrdinal));
                        }
                    }
                }
            }
            catch (OleDbException odbe)
            {
                Console.WriteLine(odbe.Errors.ToString());
                Console.WriteLine(odbe.Message.ToString());
            }
        } 

    }
    Console.WriteLine(result); // <-- For debugging use only.

}

Я получаю ошибку в OleDbDataReader reader = cmd.ExecuteReader()

Вот вывод

Первое случайное исключение типа 'System.Data.OleDb.OleDbException' произошло вSystem.Data.dll System.Data.OleDb.OleDbErrorCollection Механизм базы данных Microsoft Jet не смог найти объект «Sheet1».Убедитесь, что объект существует, и что вы правильно написали его имя и путь.ОК

Ответы [ 2 ]

2 голосов
/ 12 декабря 2011

Попробуйте изменить следующую строку (обратите внимание на $):

cmd.CommandText = "Select * From [Sheet1$]";

В этом случае вы выбираете все на листе, однако эта запись расширяется для выбора именованных диапазонов следующим образом:

cmd.CommandText = "Select * From [Sheet1$NamedRange]";
0 голосов
/ 12 декабря 2011

Просто мысль: у меня были исключения oledb в драйверах Excel, когда я использовал их в проекте, в котором была выбрана 64-битная целевая платформа. Попробуйте перейти к настройкам проекта и изменить целевую платформу на вкладке Build на x86.

...