c# - ReSharper 使用 SqlDataReader 显示警告

标签 c# .net resharper sqldatareader

当我写这样的东西时:

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

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

最佳答案

鉴于这在 YouTrack 上被报告为错误(两次 - herehere),看起来 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>

关于c# - ReSharper 使用 SqlDataReader 显示警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3035593/

相关文章:

c# - 具有多个联接的 LINQ to SQL 加载

c# - 如何将 groupBox 的角更改为尖角而不是圆形 C# .NET WPF

c# - WPF View 给出错误

.net - 为什么我要在公共(public)方法中使用代码契约?

c# - 如何串行运行 NUnit 测试装置?

c# - UWP 打印需要扩展到多个页面的长数据网格

c# - 纬度经度对的正则表达式

c# - IDX10501 : Signature validation failed. 尝试的 key : 'System.IdentityModel.Tokens.X509AsymmetricSecurityKey'

c# - 将 VS 代码片段与 Resharper 结合使用

c# - 如何停止 Resharper 在 Enumerable.ToList 和 Select 建议之间切换