请问各位大侠,C#代码中的Throw 为什么报错 ,注释提示说没有返回值,该怎么修改呢:1、业务实体:
   public class Article
  {
      private int _articleId;       public int ArticleId
  {
  get { return _articleId; }
  set { _articleId = value; }
  }   

}
2、调用通用的SQLHelper ,数据访问如下:
 public static Article GetArticleByArticleId(int id)
  {
  string sql = "select * from article where articleId=@articleId";
  try
  {
  using (SqlDataReader reader = SqlHelper.GetReader(sql, new SqlParameter("@articleId", id)))
  {
  if (reader.Read())
  {  return FillRecord(reader);  }
  else
  {  return null;  }
  }
  }
  catch (Exception e)
  {
  Console.WriteLine(e.Message);     throw e;
  }
  }3、业务逻辑
public static class ArticleManager
    {
        public static Article GetArticlesByArticleId(int id)
        {
            return ArticleService.GetArticleByArticleId(id);
        }    }[b]程序运行显示 数据访问错误显示:
throw e处;   对象不能从 DBNull 转换为其他类型。请各位指示

解决方案 »

  1.   


     using(SqlDataReader reader = SqlHelper.GetReader(sql, new SqlParameter("@articleId", id)))
      {
       if (reader.Read() !=null)
       { 
        return FillRecord(reader);
       }
       else
       {
        return null; }
       }
      }
      catch (Exception e)
      {
        Console.WriteLine(e.Message);
       throw e;
      }
     }
      

  2.   

    打断点看看、reader、根据id获得的reader对象是不是也为null!
      

  3.   

    FillRecord里面处理每行数据的时候,某字段中的数据有NULL,导致你类型转换失败。
      

  4.   

    应该是FillRecord方法中读取数据的时候,有数据为null,在赋值之前要判断一下
    例如if(reader[2]!=System.DBNull.Value)
    {
        string s=reader[2].ToString();
    }
      

  5.   

     /// <summary>
            /// 实体对象填充业务对象公共方法
            /// </summary>
            /// <param name="reader"></param>
            /// <returns></returns>
            private static Article FillRecord(SqlDataReader reader)
            {
                Article a = new Article();            a.ArticleId = Convert.ToInt32(reader["articleId"]);
                a.ChannelId = Convert.ToInt32(reader["channelId"]);
                a.Title = Convert.ToString(reader["title"]);
                a.ArticleDetails = Convert.ToString(reader["articleDetails"]);            a.ReadTotal = Convert.ToInt32(reader["readTotal"]);
                a.CommentTotal = Convert.ToInt32(reader["commentTotal"]);
                a.ShareTotal = Convert.ToInt32(reader["shareTotal"]);            a.DateCreated = Convert.ToDateTime(reader["dateCreated"]);
                a.CreatedBy = Convert.ToInt32(reader["createdBy"]);            a.IsPost = Convert.ToBoolean(reader["isPost"]);
                a.PostDate = Convert.ToDateTime(reader["postDate"]);
                a.PostBy = Convert.ToInt32(reader["postBy"]);            return a;
            }
      

  6.   

    回复yuan521929
      错误依然!
      

  7.   


     if(reader["articleId"]!=null)
    {
    a.ArticleId = Convert.ToInt32(reader["articleId"]);
    }所有全加if  肯定有空的 
      

  8.   


    if(reader["articleId"]!=DBNull。value)
    {
       a.ArticleId = Convert.ToInt32(reader["articleId"]);
    }都加上这个判断
      

  9.   


    错了 是这个if(reader["articleId"]!=DBNull.value)
    {
       a.ArticleId = Convert.ToInt32(reader["articleId"]);
    }都加上这个判断
      

  10.   

    1、
      catch (Exception e)
      {
          Console.WriteLine(e.Message);
          throw e;
      }
      这里throw e 要改成throw
      不然的话调试的时候会人为错误是从 throw e;这行代码中产生的。
    2、
       你说提示无将DBNull 转换成其他类型,说明你查询的数据中有字段是为null的。这个时候要人为的进行转换。
       因为数据库中存储null值和程序中存储null值是有区别的
      

  11.   


    if(reader["articleId"]!=DBNull.value)
    {
       a.ArticleId = Convert.ToInt32(reader["articleId"]);
    }赋值之前判断下本身库中的值是不是“Null”
    数据库中的“null”和程序中的不同
    判断数据库中的是是不是“null”用DBNull.Value判断