【问题标题】:Stored Procedure Not Accepting Integer Parameter存储过程不接受整数参数
【发布时间】:2019-01-11 16:33:00
【问题描述】:

我一直在使用由我们的数据库人员创建的存储过程,他恰好下周不在城里。 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

任何帮助将不胜感激。提前致谢。

【问题讨论】:

  • 如果您尝试从 SQL Server Management Studio 运行存储过程会发生什么情况?
  • 我只在更改表结构但某些查询仍引用旧列名或尝试INSERT 时未指定正确的列数时看到该错误消息。您确定这是引发异常的地方吗?
  • 真正奇怪的是,据我所知,try 块之外没有表引用。您确定您正在与正确的服务器和数据库交谈吗?我会将 sproc 回滚到以前的版本(当然,愉快地保存在源代码管理中)以修复您的错误,并比较两个版本。
  • 这个过程必须比所显示的更多。您在代码顶部有一个无与伦比的BEGIN,您的局部变量没有用于任何事情,并且您的调用代码显然需要一个结果集。
  • Management studio 上也出现了这个错误,所以它似乎是存储过程中的一个错误。现在我们的数据库人员已经更正了它。感谢大家的帮助!

标签: c# sql asp.net stored-procedures


【解决方案1】:

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

EXEC [dci].[webDonorStatistics] 2018

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

【讨论】:

  • Management Studio 中也发生了错误,因此这是我们的数据库人员现已修复的存储过程中的错误。感谢您的帮助!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多