2015-10-04 4 views
11

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

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

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's 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 с сообщением:

имя ERROR [IM002] [Microsoft] [ODBC Driver Manager] Источник данных не найден и не указан драйвер по умолчанию» , что странно, потому что у меня те, которые указаны в строке с именем кон.

стоит также отметить, что в администраторе источников данных ODBC, Я ясно вижу, что у меня установлены и запущены эти драйверы.

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

  • «Драйвер да Microsoft пункт arquivos Texto (* .txt, * .csv)»
  • «Драйвер сделать Microsoft Access (* .mdb)»
  • "Драйвер сделать Microsoft Dbase (* .dbf)"
  • "Драйвер сделать Microsoft Excel (*. XLS)"
  • "Драйвер сделать Microsoft Paradox (* .db)"
  • "Microsoft Access Driver (* .md б) "
  • "Microsoft Access-Treiber (* .mdb)"
  • "Microsoft Dbase Driver (* .dbf)"
  • "Microsoft Dbase-Treiber (* .dbf)"
  • " Microsoft Excel Driver (* .xls) "
  • "Microsoft Excel-Treiber (* .xls)"
  • "Microsoft ODBC для Oracle"
  • "Microsoft Paradox Driver (* .db)"
  • " Microsoft парадоксов Treiber (* .db) "
  • "Microsoft Text Driver (.txt; .csv)»
  • "Microsoft Text-Treiber (* .txt, * .csv)"
  • "SQL Server"
  • "SQL Server Native Client 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: друг указал, что я должен дать больше информации, так вот скриншот смерзаться, ODBC Data Source Administrator и доказательство того, что на самом деле существует ACEODBC.DLL на моем жестком диске:

additional_info

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

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

Я действительно не понимаю, почему люди избивают себя. Используйте 'microsoft.ace.oledb' для работы с Excel –

+0

@ T.S. Спасибо за идею. Я определенно попробую это в какой-то момент, но мне все еще интересно, почему это не работает. – AbyPhantom

+0

@AbyPhantom: Как указано [здесь] (http://stackoverflow.com/questions/31344178/saving-data-from-spss-to-excel-custom-sheet-name) в комментариях, вам может потребоваться совместимость между битовой версией Office и приложением, которое вы используете, чтобы изменить файл excel (бит нуба сам по себе, так что это может не иметь особого смысла, но у меня такая же ошибка) –

ответ

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;"; 
1

Как об использовании 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(); 
1

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

Смежные вопросы