存储过程不接受整数参数



我一直在使用一个由我们的数据库管理员创建的存储过程,他下周正好不在城里。SP曾经工作过,但在他离开之前,DB人员编辑了SP,导致我的代码抛出了一个服务器错误:"列名或提供的值的数量与表定义不匹配"。他在离开SP之前声称应该基本相同,所以我不知道为什么它不再匹配。

这是c#代码:

System.Data.SqlClient.SqlCommand objCmd = new 
System.Data.SqlClient.SqlCommand("dci.webDonorStatistics", objConn);
objCmd.CommandTimeout = 950;
objCmd.CommandType = System.Data.CommandType.StoredProcedure;
objCmd.Parameters.Add(new 
System.Data.SqlClient.SqlParameter("@FiscalYear", 2018));
GridView1.DataSource = objCmd.ExecuteReader();
GridView1.DataBind();

这是SP的声明:

ALTER PROCEDURE [dci].[webDonorStatistics] @FiscalYear INT
AS
BEGIN
--DECLARE @FiscalYear INT = 2018
DECLARE
@StartDate DATE = CONVERT(DATE, '01-OCT-' + CONVERT(CHAR(4), @FiscalYear - 1))
, @EndDate DATE = DATEADD(DAY, -1, GETDATE())
IF @EndDate >= CONVERT(DATE, '30-SEP-' + CONVERT(CHAR(4), @FiscalYear))
SELECT @EndDate = CONVERT(DATE, '30-SEP-' + CONVERT(CHAR(4), @FiscalYear))
ELSE
SELECT @EndDate = DATEADD(DAY, -1, CONVERT(DATE, '01-' + DATENAME(MONTH, GETDATE()) + '-' + CONVERT(CHAR(4), YEAR(GETDATE()))))  -- End of previous month
IF DATEDIFF(DAY, @StartDate, @EndDate) < 0
SELECT @EndDate = GETDATE()
BEGIN TRY
DROP TABLE #webDonorStatistics
END TRY
BEGIN CATCH
END CATCH

如有任何帮助,我们将不胜感激。提前谢谢。

第一步是隔离错误。您的错误是从应用程序代码还是数据库代码中抛出的?如果你听从3Dave的建议,你会得到什么?假设您指向了正确的数据库服务器。尝试运行:

EXEC [dci].[webDonorStatistics] 2018

如果上面的调用没有返回任何错误,我会检查应用程序代码。

您的错误表明您试图插入表中的数据无效。您必须右键单击存储过程,然后单击执行存储过程,在那里您可以插入会计年度的参数。执行应该失败。然后用不同的名称创建同一存储过程的副本,并更改会计年度的数据类型,看看这是否能解决问题,并在执行存储过程时为您提供结果。此外,在您拥有的存储过程中,我没有看到任何插入命令。如果有任何尝试,请检查您试图插入的数据类型和表架构中存在的数据类型。如果不匹配,则可以相应地进行更改。

相关内容

最新更新