我有一个Access ADP绑定到SQL Server 2005后端。我正在尝试实现一个存储过程来更新客户端的地址,这要求我使用xp_cmdshell
从命令行执行程序。该过程在SSMS中运行良好,但是当我从Access VBA通过ADO Connection对象调用它时,它会产生以下“错误”:
运行时错误'-2147217900'(80040e14):配置选项'show 高级选项'从0更改为1.运行RECONFIGURE语句 安装。
这不是一个真正的错误 - 它是SQL Server在执行sp_configure
时产生的标准消息。存储过程会调用RECONFIGURE
,但由于某种原因,Access会将消息解释为错误。
知道如何让它停下来吗?
对于它的价值,这里是我正在使用的一些代码。这是启用/禁用xp_cmdshell
的存储过程:
ALTER PROCEDURE [dbo].[spEnableXpCmdShell]
(@enabled bit)
WITH EXECUTE AS 'NKA\jrosenberg'
AS
SET NOCOUNT ON
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
EXEC sp_configure 'xp_cmdshell', @enabled
RECONFIGURE
EXEC sp_configure 'show advanced options', 0
RECONFIGURE
这是从我的主sp调用的,这个很长,就像这样:
EXEC [dbo].[spEnableXpCmdShell] 1
最后,这是一个有点删节版本的违规VBA代码:
Public Function DoNCOA(con, Optional caseId = Null, _
Optional docId = Null) As Integer
'Call the NCOAProces stored procedure asynchronously.
'Returned integer is not success or failure, but position in the queue
On Error GoTo ErrHandler
Dim cmd As New ADODB.Command, _
prm As ADODB.Parameter
With cmd
.ActiveConnection = con
.CommandText = "spNCOAProcess"
.CommandType = adCmdStoredProc
.CommandTimeout = 1800
Set prm = .CreateParameter("CaseID", adInteger, adParamInput, , caseId)
.Parameters.Append prm
Set prm = .CreateParameter("DocID", adInteger, adParamInput, , docId)
.Parameters.Append prm
.Execute Options:=adAsyncExecute, adExecuteNoRecords
End With
[...That's all the important stuff]
End Function
任何帮助都会非常感激!
答案 0 :(得分:0)
如何在try / catch块中运行sp_configure,以便不向客户端返回任何消息? http://msdn.microsoft.com/en-us/library/ms175976(v=sql.90).aspx