Подтвердить что ты не робот

Подключение ODBC к ошибке Excel

У меня возникла проблема с подключением ODBC, которое должно подключаться к таблице Excel и делать с ней что-то похожее. Я уже много читал в интернете об этом, но ни одно из решений не помогло мне (включая stackoverflow).

Так что в основном я нахожусь в точке, где я пытаюсь открыть соединение с таблицей.

private static SortedList<string, School> generateSchoolListExcel(string listFilePath)
{
    StringBuilder con = new StringBuilder();

    OdbcConnectionStringBuilder.AppendKeyValuePair(con, "Data Source", listFilePath);
    OdbcConnectionStringBuilder.AppendKeyValuePair(con, "HDR", "yes");
    OdbcConnectionStringBuilder.AppendKeyValuePair(con, "Format", "xlsx");
    OdbcConnectionStringBuilder.AppendKeyValuePair(con, "Driver", "{Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}");
   //I have tried to specify driver without parentheses {} but it still the same

    List<School> schoolList = new List<School>();

    using (OdbcConnection excel = new OdbcConnection(con.ToString()))
    {
        excel.Open();
        //doing actuall stuff
    }

        return schoolList;
}

Когда я вызываю метод excel.Open(), я получаю OdbcException с сообщением:

ОШИБКА [IM002] [Microsoft] [Менеджер драйверов ODBC] Имя источника данных не найдено и не указан драйвер по умолчанию ", что является нечетным, потому что у меня есть те, которые указаны в строке с именем con.

Также стоит упомянуть, что в ODBC Data Source Administrator я могу ясно видеть, что у меня установлены и запущены эти драйверы.

Есть и другая нечетная часть. Когда я вызываю следующий метод, который я нашел в stackoverflow, он возвращает мне следующий список драйверов:

  • "Драйвер da Microsoft для arquivos texto (*.txt; *.csv)"
  • "Драйвер делает Microsoft Access (*.mdb)"
  • "Драйвер do Microsoft dBase (*.dbf)"
  • "Драйвер делает Microsoft Excel (*. xls)"
  • "Драйвер делает Microsoft Paradox (*.db)"
  • "Microsoft Access Driver (*.mdb)"
  • "Microsoft Access-Treiber (*.mdb)"
  • "Microsoft dBase Driver (*.dbf)"
  • "Microsoft dBase-Treiber (*.dbf)"
  • "Драйвер Microsoft Excel (*.xls)"
  • "Microsoft Excel-Treiber (*.xls)"
  • "Microsoft ODBC для Oracle"
  • "Microsoft Paradox Driver (*.db)"
  • "Microsoft Paradox-Treiber (*.db)"
  • "Microsoft Text Driver (.txt;.csv)"
  • "Microsoft Text-Treiber (*.txt; *.csv)"
  • "SQL Server"
  • "Собственный клиент SQL Server 11.0"

Ни один из них не имеет в них "*.xlsx", который является форматом файла, который я пытаюсь прочитать.

Метод следующий:

public static List<String> GetSystemDriverList()
{
    List<string> names = new List<string>();
    // get system dsn's
    Microsoft.Win32.RegistryKey reg = (Microsoft.Win32.Registry.LocalMachine).OpenSubKey("Software");
    if (reg != null)
    {
        reg = reg.OpenSubKey("ODBC");
        if (reg != null)
        {
            reg = reg.OpenSubKey("ODBCINST.INI");
            if (reg != null)
            {

                reg = reg.OpenSubKey("ODBC Drivers");
                if (reg != null)
                {
                    // Get all DSN entries defined in DSN_LOC_IN_REGISTRY.
                    foreach (string sName in reg.GetValueNames())
                    {
                        names.Add(sName);
                    }
                }
                try
                {
                    reg.Close();
                }
                catch { /* ignore this exception if we couldn't close */ }
            }
        }
    }

    return names;
}

Следует отметить, что когда я действительно перехожу к regedit и нахожу те значения, которые я четко вижу:

"Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)".

Я пропустил что-то очевидное? Пожалуйста, помогите мне:)

Кстати, я довольно новичок в этой стороне .NET, поэтому, пожалуйста, держите свои ответы в тупике, чтобы я мог понять, что происходит. Спасибо!

EDIT: Друг указал, что я должен предоставить дополнительную информацию, так что вот скриншот Regedit, ODBC Data Source Administrator и доказательство того, что ACEODBC.DLL на самом деле существует на моем жестком диске:

дополнительная_info

Также con.ToString() дает следующее:

Data Source="G:\POS\odabrane_skole novo_mod.xlsx";Driver="{Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}"
4b9b3361

Ответ 1

Убедитесь, что вы загрузили и установили Microsoft Access Database Engine 2010 Redistributable....

И измените строку подключения на...

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=G:\POS\odabrane_skole novo_mod.xlsx;Extended Properties="Excel 12.0;HDR=YES; IMEX=1;";

Ответ 2

Как об использовании OleDbConnection, и вам сначала нужно установить Microsoft Access Database Engine 2010.

string path = @"c:\sample.xlsx";
string strCon = " Provider = Microsoft.ACE.OLEDB.12.0 ; Data Source = " + path + ";Extended Properties='Excel 12.0;'";
OleDbConnection objConn = new OleDbConnection(strCon);

string strCom = " SELECT * FROM [a$] ";
objConn.Open();

Ответ 3

Похоже, ваше приложение представляет собой приложение x86 (32bit), и вы смотрите на 64-битный драйвер ODBC. Проверьте, установлен ли 32-разрядный драйвер ODBC....