gpt4 book ai didi

c# - 查询结果超过1000条时Dapper抛出System.Data.SqlClient.SqlException

转载 作者:太空宇宙 更新时间:2023-11-03 23:40:24 25 4
gpt4 key购买 nike

下面的方法调用失败并显示消息“将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。”:

public IEnumerable<SomeResult> GetResults(SqlConnection connection, string attribute)
{
var sql = string.Format(@"
SELECT TOP 2000
r.Id
,r.LastName
,r.FirstName
,r.Ssn
,r.CurrentId
,BeginDate = case when isdate(rli.BeginDate) = 1 then convert(datetime, rli.BeginDate) else NULL end
,EndDate = case when isdate(rli.EndDate) = 1 then convert(datetime, rli.EndDate) else NULL end
,rli.LcknTyCd
,rli.ProvId
FROM
[dbo].[Span] rli
INNER JOIN [dbo].Recipient r
ON rli.SysId = r.SysId
INNER JOIN [dbo].ValidRecipient lc
ON r.SysId = lc.SysId
WHERE
BeginDate <= GETDATE()
AND EndDate >= GETDATE()
AND rli.LcknTyCd = @LcknTyCd);

return connection.Query<SomeResult>(sql, new { LcknTyCd = attribute}).ToList();
}

public struct SomeResult
{
public string Id{ get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public string Ssn { get; set; }
public string CurrentId{ get; set; }
public DateTime? BeginDate { get; set; }
public DateTime? EndDate { get; set; }
public string LcknTyCd{ get; set; }
public string ProvId{ get; set; }
}

如果结果集包含 1000 条(或更少)记录,则代码可以正常工作。当我在 SQL Server Management Studio(2014 版)中执行查询时,我也没有收到错误。即使我从选择中删除 TOP 并在 SSMS 中执行它,也不会发生错误(如预期的那样返回 12,000 多条记录)。

我应该做什么而不是上面的实现来成功检索超过 1000 行的结果集?在这种情况下,存储过程会更合适吗?

最佳答案

听起来您的日期字段存储在 varchar 列中。理想情况下,您应该将它们更改为日期时间字段。如果这不是一个选项,请将您的 WHERE 子句更改为如下所示:

WHERE 
case when isdate(rli.BeginDate) = 1 then convert(datetime, rli.BeginDate) else NULL end <= GETDATE()
AND case when isdate(rli.EndDate) = 1 then convert(datetime, rli.EndDate) else NULL end >= GETDATE()
AND rli.LcknTyCd = @LcknTyCd);

它在您的前 1000 条查询中成功的原因可能是因为找到的前 1000 条记录都包含有效日期。

关于c# - 查询结果超过1000条时Dapper抛出System.Data.SqlClient.SqlException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29243394/

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