У меня возникла проблема с подключением 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 на моем жестком диске:
con.ToString()
Также дает следующее:
Data Source="G:\POS\odabrane_skole novo_mod.xlsx";Driver="{Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}"
Я действительно не понимаю, почему люди избивают себя. Используйте 'microsoft.ace.oledb' для работы с Excel –
@ T.S. Спасибо за идею. Я определенно попробую это в какой-то момент, но мне все еще интересно, почему это не работает. – AbyPhantom
@AbyPhantom: Как указано [здесь] (http://stackoverflow.com/questions/31344178/saving-data-from-spss-to-excel-custom-sheet-name) в комментариях, вам может потребоваться совместимость между битовой версией Office и приложением, которое вы используете, чтобы изменить файл excel (бит нуба сам по себе, так что это может не иметь особого смысла, но у меня такая же ошибка) –