我知道如何使用代码将访问查询导入Excel工作簿,但是如何将SQL Server查询嵌入到Excel工作表中。手动执行此操作的步骤是单击“数据”选项卡,“从其他来源”,“从SQL Server”并输入服务器名称,然后选择表格,然后单击“完成”。然后单击属性,定义选项卡,命令类型为SQL,命令文本是您要运行的sql语法。好的,好的,好的。我无法弄清楚如何在C#中复制这个过程,有人可以帮我解决这个问题吗?!
编辑 - 对不起,我应该发布我正在处理的代码...但不管它在哪里。抛出我以前从未见过的奇特信息......
QueryTables oTables;
QueryTable oTable;
Range oRng;
Sheets oSheets;
Excel._Workbook oWB;
Excel._Worksheet oWS;
Excel.Application oXL
try
{
oSheets = oWB.Sheets;
oWS = (Excel._Worksheet)(oWB.ActiveSheet);
oRng = Global.Variables.GlobalVariables.oWS.get_Range("A1");
oTables = oWS.QueryTables;
object aStrSQL = "SELECT * FROM dbo.tableproductInfo;
object connection = "Data Source=ServerName;Initial Catalog=DatabaseName;Integrated Security=True;MultipleActiveResultSets=True";;
oTable = oTables.Add(connection, oRng, aStrSQL);
oTable.RefreshStyle = XlCellInsertionMode.xlInsertEntireRows;
oTable.Refresh(true);
oXL.UserControl = true;
}
catch (Exception e) { MessageBox.Show(e.ToString()); }
编辑---问题发生在代码到达
时oTable = oTables.Add(connection, oRng, aStrSQL);
显示的消息是: System.Runtime.InteropServices.COMException(0x800A03EC)来自HRESULT的异常:0x800A03EC,位于Microsoft.Office.Interop.Excel.QueryTables的System.RuntimeType.ForwardCallToInvokeMember(字符串memberName,BindingFlags标志,Object target,Int32 [] aWrapperTypes,messageData& msgData) .Add(对象连接,范围,目标,对象Sql)
编辑---
为OLEDB添加提供程序会生成此