作为我正在开发的 Excel 帮助实用程序的一部分,我正在将大型常用 Excel 电子表格移动到 MS SQL 以提高性能以及通过 SSIS 包进一步验证数据。
作为其中的一部分,我编写了一个基本的数据库连接类,它模仿数据 --> 从其他来源 --> 从 SQL Server 按钮。我使用 Office 2013 的副本在家中进行了这项工作,并且我预计会出现一些转换问题,主要是 Excel 互操作 API 已更改并且无法选择升级到 Office 2010 或更高版本。我的主要问题似乎是新命令 AddEx 的转换:
MyListObjects.AddEx(ExcelAPI.XlListObjectSourceType.xlSrcQuery, MyConnection, Type.Missing, ExcelAPI.XlYesNoGuess.xlYes,StartRange);
到 2003/2007 版本按照 MSDN 添加(https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.listobjects.add(v=office.11 ).aspx )
//2007 命令//
ExcelAPI.ListObject CurrentTable = MyListObjects.Add(ExcelAPI.XlListObjectSourceType.xlSrcExternal, MyConnection,Type.Missing,ExcelAPI.XlYesNoGuess.xlYes,StartRange);
我得到的例外是:
An exception of type 'System.ArgumentException' occurred in mscorlib.dll but was not handled in user code Additional information: The parameter is incorrect. (Exception from HRESULT: 0x80070057 (E_INVALIDARG))
我最初的想法是更改 ExcelAPI.XlYesNoGuess 枚举,所以我尝试手动设置值,但随后遇到编译器错误。我尝试一次删除一个参数Type.Missing
来跟踪罪魁祸首,但这似乎导致的错误多于解决的错误,尽管 MSDN 声明这些都是可选的。
连接字符串组成如下:
String FullString = "OLEDB;Provider=SQLOLEDB.1;Data Source= " + PCNameOrIP + @"\" + InstanceName + @";Initial Catalog=" + DatabaseName + @";User ID=" + DatabaseUserName + @";Password=" + DatabasePassword;
方法测试调用参数:
Globals.ThisAddIn.DM.EstablishConnection("BREWL14H58107", "SQLEXPRESS", "TestDB", "sa", "Password0", "SELECT * FROM TestDB.dbo.Test", "Demo File", "Testing");
完成后对此进行了更多研究。看来我的代码在家工作得很好,修改后的添加。但是从工作中我仍然得到:
An exception of type 'System.ArgumentException' occurred in mscorlib.dll but was not handled in user code. Additional information: The parameter is incorrect. (Exception from HRESULT: 0x80070057 (E_INVALIDARG))