有这样一段代码
public SqlDataReader getAllByDataReader()
{
String strSQL="Exec usp_tblAddress_sel";
SqlCommand cmd=new SqlCommand(strSQL,conn);
cmd.CommandType=CommandType.Text;
try
{
if(conn.State==ConnectionState.Closed)
{
conn.Open();
}
return cmd.ExecuteReader();
}
catch(Exception ex)
{
sqlError=ex.Message.ToString();
//throw ex;
}
}
问题主要集中在catch语句中,只要我把throw ex;这个语句注销掉,系统提示我“并非所有的代码都有返回值”,但是要使不注销这一句,可以正常运行,怎么回事呢
感谢

解决方案 »

  1.   

    public SqlDataReader getAllByDataReader()
    {
    String strSQL="Exec usp_tblAddress_sel";
    SqlCommand cmd=new SqlCommand(strSQL,conn);
    cmd.CommandType=CommandType.Text;
    try
    {
    if(conn.State==ConnectionState.Closed)
    {
    conn.Open();
    }

    }
    catch(Exception ex)
    {
    sqlError=ex.Message.ToString();
    //throw ex;
    }
    return cmd.ExecuteReader();
    }把return cmd.ExecuteReader();把到TRY外面就可以啦!
      

  2.   

    如果把return cmd.ExecuteReader();放置到外部,是不是就无法捕获cmd在执行时候的错误呢,我的问题是,为啥添加了throw ex就好了呢
      

  3.   

    如果要捕捉cmd.ExecuteReader();的错误信息,可以定义一个SqlDataReader来接收,
    SqlDataReader dr;
    try
    {
    dr = cmd.ExecuteReader();
    }
    ...
    return dr;
      

  4.   

    public SqlDataReader getAllByDataReader()
    {
    String strSQL="Exec usp_tblAddress_sel";
    SqlCommand cmd=new SqlCommand(strSQL,conn);
    cmd.CommandType=CommandType.Text;
    try
    {
    if(conn.State==ConnectionState.Closed)
    {
    conn.Open();
    }
    return cmd.ExecuteReader();
    }
    catch(Exception ex)
    {
    sqlError=ex.Message.ToString();
    return null;
    }
    }
      

  5.   

    定義成SqlDataReader 形式就需要返回值
      

  6.   

    我的问题是,为啥添加了throw ex就好了呢
    ---------------------------------------
    throw ex抛出异常, 已经是从这个函数中返回了, 所以就不需要return了.
      

  7.   

    哎,你对函数还不了解,
    你上面的函数返回一个SqlDataReader是吧,
    如果try{}里面的语句正常运行,那返回一个SqlDataReader是没错的,
    可是如果try{}语句出错,假设是conn.Open(); 这句出错啊,那会怎样呢,
    它会马上跳到 catch{}语句块,于是跳过了你的return语句,
    而你的catch{}语句块里没有return语句,自然就出错了,
    如果catch{}语句块里加上throw语句,你要明白throw语句是一种强制性的
    语句,它会中止程序运行,不管你在什么地方,一碰到throw语句,
    马上中止,它会向上寻找catch语句,这是编译器赋给throw的特殊功能,
    也就是说它的优先级最高,