ReSharper 使用 SqlDataReader 显示警告

发布于 2024-09-05 12:26:47 字数 443 浏览 6 评论 0原文

当我写这样的内容时:

using (var connection = new SqlConnection("ConnectionString"))
{
    using(var cmd= new SqlCommand("Command"))
    {
        using (var reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
            }
        }
    }
}

ReSharper 在 reader.Read() 上显示警告,并告诉 reader 可以为 null

但什么情况下可以为空呢?据我所知,如果命令返回任何内容 reader 不为空,则它什么也没有。

When I write something like this:

using (var connection = new SqlConnection("ConnectionString"))
{
    using(var cmd= new SqlCommand("Command"))
    {
        using (var reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
            }
        }
    }
}

ReSharper shows warning on reader.Read(), and tells that reader can be null.

But in what cases can it be null? As I know if command returns nothing reader is not null, it only have nothing.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

雨的味道风的声音 2024-09-12 12:26:47

鉴于此在 YouTrack 上被报告为错误(两次 - 此处此处),看起来 R# 附带的无效注释在这方面存在缺陷。

查看您的 ReSharper_installation_dir\Bin\ExternalAnnotations 文件夹 - 这是注释文件的安装位置。对于我来说,在 v5 中,这里有一个文件 System.Data\System.Data.Nullness.xml ,其中包含以下注释:

<member name="M:System.Data.SqlClient.SqlCommand.ExecuteReader">
  <attribute ctor="M:JetBrains.Annotations.CanBeNullAttribute.#ctor" />
</member>

如果通过您自己的检查,您认为这是错误的,并且SqlCommand.ExecuteReader 永远不会返回 null,您应该将其更改为

<member name="M:System.Data.SqlClient.SqlCommand.ExecuteReader">
  <attribute ctor="M:JetBrains.Annotations.NotNullAttribute.#ctor" />
</member>

Given that this is reported on YouTrack as a bug (twice - here and here), it looks like the nullity annotations that are shipped with R# are deficient in this respect.

Have a look in your ReSharper_installation_dir\Bin\ExternalAnnotations folder - this is where the annotations files get installed. For me, with v5, there is in here a file System.Data\System.Data.Nullness.xml which contains this annotation:

<member name="M:System.Data.SqlClient.SqlCommand.ExecuteReader">
  <attribute ctor="M:JetBrains.Annotations.CanBeNullAttribute.#ctor" />
</member>

If by your own inspection you are satisfied that this is wrong, and that SqlCommand.ExecuteReader never returns null, you should change this to

<member name="M:System.Data.SqlClient.SqlCommand.ExecuteReader">
  <attribute ctor="M:JetBrains.Annotations.NotNullAttribute.#ctor" />
</member>
撩动你心 2024-09-12 12:26:47

我认为它不能为 null - 但 resharper 不知道 SqlCommand.ExeuteReader() 永远不会返回 null。
据我所知,他们使用一些 xml 来告诉女巫函数可能会或可能不会返回 null,并且可以在那里设置它。
但我不知道 xml 的名称和位置。

I think it cannot be null - but resharper does not know that SqlCommand.ExeuteReader() will never return null.
As far as I know there is some xml they use to tell witch functions may or may not return null and it can be set there.
I do not know the name and location of the xml though.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文