Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 存储过程不接受整数参数_C#_Sql_Asp.net_Stored Procedures - Fatal编程技术网

C# 存储过程不接受整数参数

C# 存储过程不接受整数参数,c#,sql,asp.net,stored-procedures,C#,Sql,Asp.net,Stored Procedures,我一直在使用由我们的DB人员创建的存储过程,他下周正好不在城里。SP过去可以工作,但在离开之前,DB guy编辑了SP,导致我的代码抛出一个服务器错误:列名或提供的值的数量与表定义不匹配。他在离开SP之前声称基本上应该是相同的,所以我不明白为什么它不再匹配 下面是c代码: System.Data.SqlClient.SqlCommand objCmd = new System.Data.SqlClient.SqlCommand("dci.webDonorStatistics",

我一直在使用由我们的DB人员创建的存储过程,他下周正好不在城里。SP过去可以工作,但在离开之前,DB guy编辑了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

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

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

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

EXEC [dci].[webDonorStatistics] 2018

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

如果尝试从SQL Server Management studio运行存储过程,会发生什么情况?我只在表结构更改但某些查询仍引用旧列名时看到过该错误消息,或尝试在未指定正确列数的情况下插入。你确定这就是抛出异常的地方吗?真正奇怪的是,据我所知,try块之外没有表引用。你确定你在找正确的服务器和数据库吗?我当然会将存储过程回滚到上一个版本,很高兴保存在源代码管理中以修复错误,并比较两个版本。您的代码顶部有一个不匹配的开头,您的局部变量没有被用于任何用途,并且您的调用代码显然期望得到一个结果集。错误也发生在Management studio上,因此它似乎是存储过程中的一个错误。我们的DB人员现在已经纠正了。谢谢你的帮助!错误也发生在ManagementStudio中,所以我们的DB人员现在已经修复了存储过程中的一个bug。谢谢你的帮助!