Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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# 存储过程获取正确的行,但SqlDataAdapter不填充相同数量的行_C#_Sql_Sql Server_Ado.net_Sqldataadapter - Fatal编程技术网

C# 存储过程获取正确的行,但SqlDataAdapter不填充相同数量的行

C# 存储过程获取正确的行,但SqlDataAdapter不填充相同数量的行,c#,sql,sql-server,ado.net,sqldataadapter,C#,Sql,Sql Server,Ado.net,Sqldataadapter,我有一个VS2010.NET4.0Web服务,它应该返回记录的数据表。到今天为止,它似乎一直工作得很好。如果我通过SQLServerManagementStudio将5个参数(3个int和2个datetimes)传递给它,我将得到预期的所有行。但是,当我运行服务并检查ds.Fill(MyTable)行上的变量时,有些行将不显示 我刚刚注意到一些奇怪的事情,当我搜索标记号为1-270的项目时,我得到了SSMS和.Fill中的所有行。每当我尝试返回标记号介于271和300之间的项目时,所有这些行都显

我有一个VS2010.NET4.0Web服务,它应该返回记录的数据表。到今天为止,它似乎一直工作得很好。如果我通过SQLServerManagementStudio将5个参数(3个int和2个datetimes)传递给它,我将得到预期的所有行。但是,当我运行服务并检查ds.Fill(MyTable)行上的变量时,有些行将不显示

我刚刚注意到一些奇怪的事情,当我搜索标记号为1-270的项目时,我得到了SSMS和.Fill中的所有行。每当我尝试返回标记号介于271和300之间的项目时,所有这些行都显示在SSM中,但没有一行返回到.Fill中。我已经检查了300多个项目,这两个项目都符合预期

这是我的存储过程。我看不出有什么特别的

ALTER PROCEDURE [dbo].[FetchLicenseReceiptData] (
    @ForYear INT,
    @StartNumber INT,
    @EndNumber INT,
    @StartDate DATETIME,
    @EndDate DATETIME
)
AS
BEGIN
-- Also update udf GetLicenseReceiptData

SELECT
    DISTINCT
    -- License Fields
    l.BarCode,
    l.TagNumber,
    l.Issued,
    l.ForYear,
    l.Fee,
    l.WebOrderNumber,
    lts.Name AS TagStyle,
    CAST(CAST((l.ForYear + 1) AS VARCHAR) + '-01-31' AS DATETIME) AS RenewalDate,
    -- Dog Fields
    d.Name AS DogName,
    d.BirthDate,
    d.SpayNeuter,
    d.Deceased,
    lb.Name AS Breed,
    lhl.Name AS HairLength,
    lpc.Name AS PrimaryColor,
    lsc.Name AS SecondaryColor,
    lx.Name AS Sex,
    -- Owner Fields
    lt.Name AS Title,
    o.FirstName,
    o.Initial,
    o.LastName,
    -- Address Fields
    a.Address1,
    a.Address2,
    a.City,
    a.County,
    ls.Abbreviation AS State,
    a.ZipCode,
    -- Contact Fields
    jpi.PhoneNumber AS PrimaryPhoneNumber,
    jpi.PhoneType AS PrimaryPhoneType,
    jei.EmailAddress AS PrimaryEmail,
    jei.EmailType AS PrimaryEmailType
FROM
                    data.License      AS   l
    LEFT OUTER JOIN data.Dog          AS   d ON l.DogID = d.ID
    LEFT OUTER JOIN data.Owner        AS   o ON d.OwnerID = o.ID
    LEFT OUTER JOIN data.Address      AS   a ON o.AddressID = a.ID
    LEFT OUTER JOIN lookup.Title      AS  lt ON o.TitleID = lt.ID
    LEFT OUTER JOIN lookup.State      AS  ls ON a.StateID = ls.ID
    LEFT OUTER JOIN lookup.TagStyle   AS lts ON l.TagStyleID = lts.ID
    LEFT OUTER JOIN lookup.Breed      AS  lb ON d.BreedID = lb.ID
    LEFT OUTER JOIN lookup.HairLength AS lhl ON d.HairLengthID = lhl.ID
    LEFT OUTER JOIN lookup.Color      AS lpc ON d.PrimaryColorID = lpc.ID
    LEFT OUTER JOIN lookup.Color      AS lsc ON d.SecondaryColorID = lsc.ID
    LEFT OUTER JOIN lookup.Sex        AS  lx ON d.SexID = lx.ID
    LEFT OUTER JOIN (
        SELECT
            p.Number AS PhoneNumber,
            lpt.Name AS PhoneType,
            op.OwnerID AS OwnerID
        FROM
                            data.OwnerPhone  AS  op
            LEFT OUTER JOIN data.Phone       AS   p ON op.PhoneID = p.ID
            LEFT OUTER JOIN lookup.PhoneType AS lpt ON p.PhoneTypeID = lpt.ID
        WHERE
            p.IsPrimary = 1
    ) AS jpi ON o.ID = jpi.OwnerID
    LEFT OUTER JOIN (
        SELECT
            e.Address AS EmailAddress,
            let.Name AS EmailType,
            oe.OwnerID AS OwnerID
        FROM
                            data.OwnerEmail  AS  oe
            LEFT OUTER JOIN data.Email       AS   e ON oe.EmailID = e.ID
            LEFT OUTER JOIN lookup.EmailType AS let ON e.EmailTypeID = let.ID
        WHERE
            e.IsPrimary = 1
    ) AS jei ON o.ID = jei.OwnerID
WHERE
        l.ForYear = @ForYear
    AND l.TagNumber >= @StartNumber
    AND l.TagNumber <= @EndNumber
    AND l.Issued >= @StartDate
    AND l.Issued <= @EndDate
ORDER BY
    l.TagNumber
因此,在SSMS中,当我运行以下命令时:

FetchLicenseReceiptData 2013、270、271、“2012-01-01”、“2012-12-31”

我有两张唱片。当通过.Fill运行时,我只得到一个(270)

当我在SSMS中运行以下命令时:

FetchLicenseReceiptData 2013,271300,'2012-01-01','2012-12-31'

我得到全部30行。但通过.Fill,它不会返回任何值

最后,如果我运行以下命令:

FetchLicenseReceiptData 2013、301、310、“2012-01-01”、“2012-12-31”

我在SSM和.Fill中都得到了10分

作为返回数据的示例,这里是在SSMS中返回的270和271数据。我用波浪号(~)字符替换了选项卡

01CA2013T00270~270~2012-12-12 16:10:58.273~2013~20.00~NULL~Standard~2014-01-31 00:00:00.000~Theo~2008-02-13 00:00:00.000~0~0~Shar Pei~Short~aprict~White~Male~Unknown~CCCCCCCCCCKKKKKKK~4444 RICHLAND AVE.~xxxxxx~~OH~4444444~5555555~Home~NULL~NULL~NULL

01CA2013T000271~271~2012-12-13 08:44:58.670~2013~20.00~NULL~Standard~2014-01-31 00:00:00.000~SAMSON~1999-12-12 00:00:00.000~1~0~拉布拉多猎犬~中等~黑色~未知~雄性~Ms~xxxxx~~XXXXXXXXXXXXX~4444吉尔大道~xxxxxx~~噢~44444~5555555~家~xxxxxx~私人

这个很奇怪。希望你们中的一位大师能帮助我

解决方案: 感谢@EJBrennan对SQL分析器的建议。我以前从未使用过它,但它为我指明了正确的方向。以下是实际发送到SQL的数据:

exec FetchLicenseReceiptData@ForYear=2013、@StartNumber=270、@EndNumber=271、@StartDate='2012-01-01 00:00:00'、@EndDate='2012-12-13 00:00:00'

当我跑的时候,它给了我1排而不是2排。基本上,除了时间的00:00:00之外,这些值是相同的。最后,我将以下内容添加到存储过程的顶部,以强制执行正确的操作:

SET @StartDate = DATEADD(DAY, DATEDIFF(DAY, 0, @StartDate), 0) -- Beginning of given Date
SET @EndDate   = DATEADD(DAY, DATEDIFF(DAY, 0, @EndDate),   1) -- End of given Date
这将获取传入的@StartDate并将其强制为当天的0:0:0。然后将@EndDate设置为第二天,并将时间设置为0:0:0


同样在WHERE子句中SP的底部,我更改了“您应该使用SQL事件探查器跟踪和复制/粘贴从应用程序发送到SQL server的SQL”。捕获后,将其粘贴到SSMS中,查看结果是否与手动键入SSMS的结果相同或不同-您需要排除“用户”错误。您还需要确保应用程序运行的数据库和服务器与SSMS运行的数据库和服务器相同,而不是数据库的测试或开发版本。例如,请尝试填充数据集而不是数据表,然后查看数据集中的内容。特别是,检查数据集以查看是否创建了多个表。
SET @StartDate = DATEADD(DAY, DATEDIFF(DAY, 0, @StartDate), 0) -- Beginning of given Date
SET @EndDate   = DATEADD(DAY, DATEDIFF(DAY, 0, @EndDate),   1) -- End of given Date