【发布时间】:2012-02-08 17:17:38
【问题描述】:
我尝试了多种方法,但都没有运气。使用 Microsoft Visual Studio 和 SQL Server 2005 这是c#代码和sql代码
List<SqlParameter> _params3 = new List<SqlParameter>();
_params3.Add(new SqlParameter("@startdate", txtDateFrom.Text));
_params3.Add(new SqlParameter("@enddate", txtDateTo.Text));
_params3.Add(new SqlParameter("@days", extendedDays));
extendedDays = Convert.ToInt32(DAL.executeStoredProcedureScalar(
"Time_Difference_Calc", _params3));
SQL 代码:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[Time_Difference_Calc]
-- Add the parameters for the stored procedure here
@startdate datetime,
@enddate datetime,
@days int output
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
set @days = (Select RawDays
- NumWeeks * 2
+ CASE WHEN StartWD = 1 THEN 1 ELSE 0 END
- CASE WHEN EndWD = 7 THEN 1 ELSE 0 END
+ 1
AS Result
FROM
(SELECT Datepart(dw,@startdate) as StartWD,
Datepart(dw,@enddate) as EndWD,
DateDiff(d,@startdate,@enddate) as RawDays,
DateDiff(wk,@startdate,@enddate) as NumWeeks
) A)
--SET @ReturnValue = @days
RETURN @days
END
我可以在数据库上运行它就好了..将 2 个日期放入.. 可以满足我的需要..
但每当我实际在页面中运行它时......总是得到
System.NullReferenceException:对象引用未设置为 对象的实例。”
源错误:返回 cmd.ExecuteScalar().ToString();
感谢任何帮助。几乎我的想法是我只想获得与存储过程返回的时间相等的延长天数。
【问题讨论】:
-
你能把更多的C#代码放在这里吗..我可以立即看到一些错误的东西..还有你使用的是什么版本的VS...? List
_params3 = new List ();当您应该使用 SQLCommand 对象和 SQLConnection 对象时,为什么要这样做?? -
什么是 DAL.executeStoredProcedureScalar?你能把那个代码贴出来吗?
-
而不是发布 DAL.executeStoredProcedureScalar 的代码。我会说至少删除该方法,并可能删除整个 DAL 类定义并切换到以正确的方式做事。
标签: c# sql-server-2005 stored-procedures