请问各位大侠,这段代码中的Throw 为什么报错 ,删除也提示说没有返回值: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;
            }
        }

解决方案 »

  1.   

    catch 里加 
    return null;
      

  2.   

    catch (Exception e)
      {
      Console.WriteLine(e.Message);   
      throw e;
      }
      }这里边加RETURN NULL。TRY和CATCH是分支结构
      

  3.   

    报错提示:对象不能从 DBNull 转换为其他类型。
      

  4.   

    1、业务实体:
    namespace Wangzl.eProfessorPF.Bo
    {
        [Serializable()]
        public class Article
        {
            private int _articleId;        private int _channelId; 
          
            private string _title;
            private string _articleDetails;         public int ArticleId
            {
                get { return _articleId; }
                set { _articleId = value; }
            }        
            public int ChannelId
            {
                get { return _channelId; }
                set { _channelId = value; }
            }
            public string Title
            {
                get { return _title; }
                set { _title = value; }
            }
            public string ArticleDetails
            {
                get { return _articleDetails; }
                set { _articleDetails = value; }
            }
                }
    }
      

  5.   

    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;
                               }
            }
      

  6.   

    GetReader 定义的参数 是不是int?呀? 可能传的参数有问题
      

  7.   

    GetReader 参数是对的, 加这个依然报错
    catch (Exception e)
                {
                    Console.WriteLine(e.Message);                
                    throw e;
                    return null;
                }
      

  8.   

    /// <summary>
            /// 执行有参SQL语句,并返回SqlDataReader
            /// </summary>
            public static SqlDataReader GetReader(string sql, params SqlParameter[] values)
            {
                SqlCommand cmd = new SqlCommand(sql, Connection);
                cmd.Parameters.AddRange(values);
                SqlDataReader reader = cmd.ExecuteReader();
                return reader;
            }
      

  9.   

    报错提示:对象不能从 DBNull 转换为其他类型。
      

  10.   

    [code=C#]SqlParameter[] parameters = {new SqlParameter("@articleId", SqlDbType.Int32,11)};
    parameters[0].Value = id;
    using (SqlDataReader reader = SqlHelper.GetReader(sql,parameters))
      {
      if (reader.Read())
      {
      return FillRecord(reader);
      }
      else
      {
      return null;
      }
      

  11.   

    你的数据库中的数据是不是有问题啊,在从一个NULL向非NULL数据做赋值操作的时候出错了,建议你数据库中只留一条数据做个测试。
      

  12.   

    这样写也可以呀 ,类似于
     string sql = "select * from article where isPost=@isPost and channelId=@channelId order by dateCreated  desc";
                try
                {
                    SqlParameter[] para = new SqlParameter[]
                    {   
                        new SqlParameter("@isPost",flag),
                        new SqlParameter("@channelId",id)                    
                    };                using (SqlDataReader reader = SqlHelper.GetReader(sql, para))
                    {
                        if (reader.Read())
                        {
                            return FillRecord(reader);
                        }
                        else
                        {
                            return null;
                        }
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    throw e;
                }
      

  13.   

    关键是提供Throw 错误呢 哥哥
      

  14.   

    Throw 就是 抛给上层catch处理的。 你外层没有接受的把
      

  15.   

    是你自己代码逻辑有问题。 catch抓住异常 你不处理,还Throw  什么呀
      

  16.   

    你的这个方法中 private static Article FillRecord(SqlDataReader reader)
    把赋值的地方都加上判断if(reader["articleId"]!=DBNull.value)
    {
       a.ArticleId = Convert.ToInt32(reader["articleId"]);
    }//其它的自己加上上个帖子的
    1.赋值之前判断下本身库中的值是不是“Null”
    2.数据库中的“null”和程序中的不同
    3.判断数据库中的是不是“null”用DBNull.Value判断