.net 如何让ExecuteReader()高效地向List添加项目?

iaqfqrcu  于 2023-01-18  发布在  .NET
关注(0)|答案(1)|浏览(106)

我在UI中有一个按钮,用于显示表中的所有剩余记录。
为了处理这个问题,在我的控制器中,我有一个简单的SQL SELECT * 语句,它带有LIMIT和OFFSET。我的ExecuteReader当前正在从SQL命令返回我的数据,我将它添加到一个List中。该列表包含我的自定义Run类的示例。
在SSMS中,无论LIMIT I请求有多大,SQL查询都会毫无例外地执行,如果我的限制大于表中的行数,它只返回所有行。
但是在webAPI中,当我的限制大于200时,它返回异常。否则,当小于200时,它返回运行列表,没有异常。我试图调试当我试图返回所有数据时发生的异常,但当它传递到catch块时,异常为null。这很奇怪。
所以,我想我遗漏了一个步骤。也许我不应该在Reader流式传输时将数据转换到Run类中。如果我验证了SQL命令是准确的,那么这似乎是导致错误的步骤。也许转换数据会使阅读器超时?我不知道我对ExecuteReader的理解不够好,无法弄清楚如何将所有数据传递到List,然后在关闭连接后将该列表中的数据转换为Run。而且我甚至不知道这是否能解决问题。
除了对潜在的SQL注入和缺少dbContext等问题的担忧之外,我如何利用ExecuteReader()从数据库返回所有记录?
谢谢。
编辑以添加:
catch块中的异常值为{" Data is Null.无法对Null值调用此方法或属性。"}。
在调试器输出中,我抛出了异常Exception:在Microsoft.Data.SqlClient.dll中出现"系统.数据. SqlTypes. SqlNullValue异常"。
编辑以注解解决方案。
Ann L.解决了这个问题。我有来自数据库的空值。我从她和PSGuy那里了解到我可以使用DbNull检查空值。谢谢!
注意-一个容易出错的地方是你的类必须允许null,否则VS将不允许你检查控制器中的方法是否为null。

qcuzuvrc

qcuzuvrc1#

下面是您需要使用的语法的一种方法(尽管还有 * 很多 * 其他方法:请参阅here以获得大量的替代方案!)

shoeAge = reader.IsDBNull(13) ? null : reader.GetInt64(13)

这里假设shoeAge是一个可以为空的Int64,如果不是,你会得到另一个错误,因为你不能给它赋值null

相关问题