我一直在寻找这个问题的解决方案,虽然我看到其他用户遇到很多类似的问题但是他们似乎都没有相同的解决方案。或者至少没有一个解决方案似乎符合我的需求。所以现在我正在添加自己的混合物以及如何获得可行的解决方案。
我有一个外部程序正在访问的存储过程。为了隐私目的,我更改了代码中的一些名称。我可以通过visual studios 2010在调试中运行程序代码,同样我可以通过Sql Server 2008手动运行存储过程作为查询。但是应该通过使用Sql Server代理/作业活动监视器来访问该程序。当它在这里失败时,它会吐出以下错误
Unhandled Exception: System.Exception:
UIExtract::dl_UIExtract::CreateFile - Procedure or function ExtractSet has too many arguments specified
at UIExtract.dl_UIExtract.CreateFile(String strExtrActFile)
at UIExtract.Program.Main(String[] args). Process Exit Code -532459699. The step failed.
所以下面我在程序和存储过程中包含与此相关的代码。 如果有人能帮我弄清楚造成这个错误的原因以及如何解决它或者至少指出我正确的方向我会很高兴。
程序代码 private SqlCommand GetSelectAccountsSP() {
//SqlParameter param = new SqlParameter();
SqlCommand cmdExtract = new SqlCommand("ExtractSet");
cmdExtract.CommandType = CommandType.StoredProcedure;
SqlParameter param = new SqlParameter();
param.ParameterName = "@DateStart";
param.DbType = DbType.DateTime;
DateTime dtNow = DateTime.Now;
string strToday = dtNow.ToShortDateString().ToString();
strToday += " " + ConfigurationManager.AppSettings["CutOffTime"];
DateTime dtToday = Convert.ToDateTime(strToday);
param.Value = dtToday;
param.Direction = ParameterDirection.Input;
cmdExtract.Parameters.Add(param);
param = null;
return cmdExtract;
}
这是存储过程ExtractSet
USE [DirectDeposit]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[ExtractSet]
@DateStart DATETIME
AS
BEGIN
DECLARE @statusConfirmed AS CHAR(1)
SET @statusConfirmed = '1'
SELECT
AI.ID
,AI.PType
,AI.AccountNbr
,AI.Name
,AI.RNbr
,AI.AccountType
,AI.RequestDate
,AI.CreateDate
FROM AcctInfo AI
WHERE
AI.RequestStatus = @statusConfirmed -- Request Confirmed
AND AI.CreateDate =( SELECT Max(AI2.CreateDate)
FROM AcctInfo AI2
WHERE AI2.ID=AI.ID AND AI2.RequestStatus = @statusConfirmed AND AI2.CreateDate <= @DateStart)
ORDER BY ID
END
正如我之前所说,我可以将这些组件单独运行而不会发生意外。只有在通过Sql Server Agent / Job activity Monitor的预期进程激活它们时,才会出现此错误。 请帮帮我。
和P.S.其中大部分是遗留的遗留代码,我不得不支持我自己写的东西