ReSharper使用SqlDataReader显示警告

时间:2010-06-14 07:28:53

标签: 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()上显示警告,并告诉读者可以null

但在什么情况下它可以为空?据我所知,如果命令没有返回任何读者不为空,它只有什么都没有。

2 个答案:

答案 0 :(得分:5)

鉴于在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>

答案 1 :(得分:1)

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