【发布时间】: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