从Excel运行SQL Server存储过程

我一直在使用这个http://mikesknowledgebase.com/pages/SQLServer/RunStoredProcedureFromExcel.htm作为一个框架,试图从VBA运行一个存储过程,以便将数据直接导入到一个Excel工作表中。 到目前为止,我的问题是应该连接到SQL Server的线。

我目前有这样的:

con.Open "Provider=SQLOLEDB;Data Source=domain\serverName;Initial Catalog=databaseName;Integrated Security=SSPI;Trusted_Connection=Yes;" 

但是这给我一个错误,说它不存在,或访问被拒绝。 我一直在试图find一个更好的例子,实际上显示了我将如何连接到SQL Server,但一直没能find任何东西。 我错过了什么明显的? 是否有另一种方式连接到SQL Server来运行存储过程?

除此之外,通过查看代码,我不确定存储过程的参数是如何被存储过程读取的。 例如,我有两个参数@endDate@beginDate

我有这个:

 cmd.Parameters.Append cmd.CreateParameter("@beginDate", adDate, adParamInput, 10, Range("J3").Text) cmd.Parameters.Append cmd.CreateParameter("@endDate", adDate, adParamInput, 10, Range("J4").Text) 

但他们没有在别的地方使用过。 所有这些都需要连接来自Excel的input和存储过程中的参数? 我只是想了解它是如何工作的。

编辑:我的语法是错误的数据库,需要更多的信息在那里。 我的新问题是,当创build参数,我得到一个错误

应用程序使用当前操作的错误types的值。

我想这是因为我试图把文本变成一个date,它可能是更好的只是将其存储为一个varchar ? 他们都需要匹配SQL Server中的date时间列。

编辑2:显然我错了,因为参数现在工作。 不知道为什么不是,但它现在。

当我试图做同样的事情时,我发现这个网站非常有帮助。 使用dynamic参数从Excel运行SQL存储过程

VBA代码看起来像这样; 使用友好名称将查询分配为“Query1”,单元格将inputRange中的参数。

 Sub RefreshQuery() With ActiveWorkbook.Connections("Query1").OLEDBConnection .CommandText = "EXECUTE dbo.StoredProcedureName '" & _ Sheets("Parmeters").Range("J3").Value & "','" & _ Sheets("Parmeters").Range("J4").Value & "'" End With ActiveWorkbook.Connections("Query1").Refresh End Sub 

如果您在存储过程中使用临时表,那么请确保在开始处包含“SET NOCOUNT ON”,并在sp的末尾包含“SET NOCOUNT OFF”。