Sto riscontrando un problema con la connessione ODBC che si suppone possa connettersi a una tabella di Excel e utilizzarla. Ho già letto molte cose su internet, ma nessuna delle soluzioni mi ha aiutato (incluso lo stackoverflow).Errore di connessione ODBC a Excel
Quindi in pratica sono in un punto in cui sto cercando di aprire una connessione a un tavolo.
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;
}
Quando chiamo il metodo excel.Open()
, ottengo OdbcException
con il messaggio:
nome ERRORE [IM002] [Microsoft] [Gestione driver ODBC] Fonte dei dati non trovato e nessun driver predefinito specificato" , il che è strano perché ho quelle specificate nella stringa di nome con.
vale anche la pena di ricordare che in amministratore origine dati ODBC, Posso vedere chiaramente che ho quei driver installati e funzionanti.
C'è anche un'altra parte dispari. Quando chiamo il seguente metodo che ho trovato su StackOverflow mi restituisce il seguente elenco di driver:
- "Driver da Microsoft para Arquivos Texto (* .txt; * .csv)"
- "Driver fare Microsoft Access (* .mdb)"
- "driver do Microsoft dBase (* .dbf)"
- "driver do Microsoft Excel (*. xls)"
- "driver do Microsoft Paradox (* DB)"
- "Driver Microsoft Access (* .md b) "
- "Microsoft Access-Treiber (* .mdb)"
- "Driver Microsoft dBase (* .dbf)"
- "Microsoft dBase-Treiber (* .dbf)"
- " Microsoft Excel driver (* .xls) "
- "Microsoft Excel-Treiber (* .xls)"
- "Microsoft ODBC per Oracle"
- "driver Microsoft Paradox (* DB)"
- " Microsoft Paradox- Treiber (* .db) "
- "Driver di testo Microsoft (.txt; .csv)"
- "Microsoft Text-Treiber (* .txt; * .csv)"
- "SQL Server"
- "SQL Server Native Client 11.0"
Nessuno di quelli hanno il "* .xlsx" in loro, che è il formato di un file che sto cercando di leggere.
Il metodo è il seguente:
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;
}
Va notato che quando ho effettivamente vado al regedit
e trovare quei valori vedo chiaramente:
"Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)".
Mi sto perdendo qualcosa di ovvio? Per favore aiutatemi :)
A proposito, sono abbastanza nuovo su questo lato di .NET quindi per favore mantieni le risposte senza parole in modo da poter effettivamente capire cosa sta succedendo. Grazie!
EDIT: Un amico ha sottolineato che dovrei dare maggiori informazioni, ecco lo screenshot del regedit, Amministratore origine dati ODBC e la prova che l'ACEODBC.DLL esiste realmente sul mio disco rigido:
anche il con.ToString()
ha pronunciato la seguente:
Data Source="G:\POS\odabrane_skole novo_mod.xlsx";Driver="{Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}"
Non capisco davvero perché la gente picchia. Usa 'microsoft.ace.oledb' per lavorare con Excel –
@ T.S. Grazie per l'idea. Ci proverò sicuramente ad un certo punto, ma sono ancora curioso del perché questo non funziona. – AbyPhantom
@AbyPhantom: come indicato [qui] (http://stackoverflow.com/questions/31344178/saving-data-from-spss-to-excel-custom-sheet-name) nei commenti, potrebbe essere necessario avere compatibilità tra la versione bit di Office e l'applicazione che stai utilizzando per modificare il file excel (un po 'di noob a me stesso, quindi potrebbe non avere molto senso, ma ho lo stesso errore) –