我遇到了應該連接到Excel表的ODBC連接的問題,並使用它進行操作。我已經在網上閱讀了很多關於它的東西,但沒有一個解決方案對我有幫助(包括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] [微軟] [ODBC驅動程序管理器]數據源名稱未 發現並沒有指定默認驅動程序」 ,這很奇怪,因爲我有 那些在字符串中指定的命名爲con。
還值得一提的是,在ODBC數據源管理器中,我可以清楚地看到,我已經安裝並運行了這些驅動程序。
還有一個奇怪的部分。當我把下面的方法我在計算器返回我的驅動程序下面的列表中發現:
- 「司機達微軟對arquivos texto(* .TXT,* .CSV)」
- 「驅動程序做的Microsoft Access(* .mdb)中」
- 「驅動程序做的dBase微軟(* .DBF)」
- 「驅動程序做的Microsoft Excel(* .xls)的」
- 「驅動程序做微軟的Paradox(* .db的)」
- 「Microsoft Access Driver(* .md B) 「
- 」的Microsoft Access-二極管驅動器(* .mdb)中「
- 」微軟dBase驅動程序(* .DBF)「
- 」微軟的dBase-二極管驅動器(* .DBF)「
- 」 Microsoft Excel中驅動器(* .xls) 「
- 」微軟Excel的二極管驅動器(的* .xls)「
- 」微軟ODBC的Oracle「
- 」微軟Paradox驅動程序(* .db的)「
- 」 微軟Paradox- Treiber(* .db)「
- 「Microsoft Text Driver(.txt;的.csv)」
- 「微軟文本二極管驅動器(* .TXT,* .CSV)」
- 的 「SQL Server」
- 「SQL服務器本機客戶端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的這方面,所以請保持你的答案愚蠢的,所以我可以真正理解發生了什麼事情。謝謝!
編輯: 有朋友指出我應該提供更多的信息,所以這裏是註冊表編輯器,ODBC數據源管理器的屏幕截圖,而且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文件的應用程序之間的兼容性(一個小我自己這個東西,所以這可能沒有多大意義,但我有同樣的錯誤) –