gpt4 book ai didi

c# - 存储过程和 C# SqlDataReader 返回的行数少于预期

转载 作者:行者123 更新时间:2023-12-02 21:30:05 25 4
gpt4 key购买 nike

我被要求将网站应用程序从一台服务器迁移到另一台服务器。该代码是由以前的开发人员编写的。

他使用以下内容创建了一个存储过程:[参数]

            @SurveyPeriodConfigID int = -1,
@StartDate DATETIME = NULL,
@EndDate DATETIME = NULL,
@StartTime DATETIME = [9:00:00],
@EndTime DATETIME = [19:00:00],
@Category INT = -1,
@SubcategoryID INT = -1,
@ReportType VARCHAR(50) = null,
@DepartmentID INT = -1,
@FloorID INT = -1,
@RoomID INT = -1,
@IsLazyLoad BIT = 0,
@Day INT = -1

和[WHERE caluse]:

            SELECT [fields]
FROM [tables]
WHERE
(DATEPART(dw, rsdm.DateCreated)) != 7 AND (DATEPART(dw, rsdm.DateCreated)) !=1
AND rsdm.DateCreated BETWEEN @StartDate AND @EndDate
AND (CONVERT(VARCHAR(8),rsdm.DateCreated,108) BETWEEN @StartTime AND @EndTime)
AND (@Category = -1 OR rsdm.CategoryCodeID = @Category)
AND (@SubcategoryID = -1 OR rsdm.SubcategoryID = @SubcategoryID)
AND (@DepartmentID =-1 OR rsdm.DepartmentID = @DepartmentID)
AND (@FloorID =-1 OR rsdm.FloorID = @FloorID)
AND (@RoomID =-1 OR rsdm.RoomID = @RoomID)
AND (@Day =-1 OR DATEPART(dw, rsdm.DateCreated) = @Day)

C# 代码:

            SqlDataReader sqlDataReader = thisCommand.ExecuteReader(CommandBehavior.CloseConnection);

...调用存储过程并返回SqlDataReader。

到目前为止一切顺利。

现在的问题...以前旧网站返回 8200 行,但现在新网站返回 6500 行!!!

我在我的电脑上的 sql 数据库副本上设置了代码和网站...它返回正确的值 8200。然后我更改了 web.config 以指向新网站 sql server...6500 行!!!

我备份了实时站点 SQL 数据库,并在我的 PC 上本地恢复了相同的数据库并进行了测试...8200 行!!!

旧站点有 Sql server 2005,我的 PC 有开发人员 SQL 2012,而实时服务器有 SQL 2012。

然后我在新站点 Sql Server 上运行 sql profiler,提取脚本并在相同的 sql 数据库 8200 条记录上运行脚本!!!

过去我花了 1-2 天的时间来解决这个问题,但仍然不知道为什么实时 Sql Server 通过 sqldatareader 返回 6500 行。

如有任何建议,我们将不胜感激。

最佳答案

我会检查选项在不同服务器上的配置是否不同,特别是 ANSI_NULLS(请参见下面的脚本)。请注意,当您在 SSMS 中运行脚本时,默认选项可能与使用 ADO.NET 时有效的选项不同(请参阅 SSMS 工具/选项/查询执行/SQL Server/ANSI)。这通常可以解释 SSMS 和 ADO.NET 之间的行为差​​异。

DECLARE @options INT 
SELECT @options = @@OPTIONS

PRINT @options
IF ( (1 & @options) = 1 ) PRINT 'DISABLE_DEF_CNST_CHK'
IF ( (2 & @options) = 2 ) PRINT 'IMPLICIT_TRANSACTIONS'
IF ( (4 & @options) = 4 ) PRINT 'CURSOR_CLOSE_ON_COMMIT'
IF ( (8 & @options) = 8 ) PRINT 'ANSI_WARNINGS'
IF ( (16 & @options) = 16 ) PRINT 'ANSI_PADDING'
IF ( (32 & @options) = 32 ) PRINT 'ANSI_NULLS'
IF ( (64 & @options) = 64 ) PRINT 'ARITHABORT'
IF ( (128 & @options) = 128 ) PRINT 'ARITHIGNORE'
IF ( (256 & @options) = 256 ) PRINT 'QUOTED_IDENTIFIER'
IF ( (512 & @options) = 512 ) PRINT 'NOCOUNT'
IF ( (1024 & @options) = 1024 ) PRINT 'ANSI_NULL_DFLT_ON'
IF ( (2048 & @options) = 2048 ) PRINT 'ANSI_NULL_DFLT_OFF'
IF ( (4096 & @options) = 4096 ) PRINT 'CONCAT_NULL_YIELDS_NULL'
IF ( (8192 & @options) = 8192 ) PRINT 'NUMERIC_ROUNDABORT'
IF ( (16384 & @options) = 16384 ) PRINT 'XACT_ABORT'

关于c# - 存储过程和 C# SqlDataReader 返回的行数少于预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22535012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com