返回给出错误的数据集值

时间:2013-08-14 06:04:39

标签: c# asp.net dataset sqldataadapter

我已经定义了以下函数,该函数将从表中返回3列。

public DataSet GetFunc()
    {
        int iRet = 0;
        DataSet ds = new DataSet();
        SqlConnection sqlConnection = new SqlConnection();
        try
        {
            iRet = connect(ref sqlConnection);
            if (DB_SUCCESS_CONNECT == iRet)
            {
                SqlCommand sqlCommand = new SqlCommand("", sqlConnection);                   
                String strQuery = "Select ID, Did, FirstName from Users";
                sqlCommand.CommandText = strQuery;

                SqlDataAdapter adaptor = new SqlDataAdapter(sqlCommand);
                adaptor.Fill(ds);
                sqlConnection.Close();
                return ds;                    
            }

        }
        catch (Exception e)
        {
            disconnect(ref sqlConnection);
        }
    }

但是当我尝试构建它时,我收到了错误:

  

错误172'GetFunc()':并非所有代码路径都返回值

我很困惑我哪里出错了。有人可以指导我吗?

7 个答案:

答案 0 :(得分:5)

在try块中你在catch块中给出了一个返回类型,没有返回类型。 当编译器找不到合适的返回值时,通常会发生此错误。 尝试在catch

中返回ds

但请确保在逻辑中进一步检查ds是否为空检查

答案 1 :(得分:2)

public DataSet GetFunc()
{
    int iRet = 0;
    DataSet ds = new DataSet();
    SqlConnection sqlConnection = new SqlConnection();
    try
    {
        iRet = connect(ref sqlConnection);
        if (DB_SUCCESS_CONNECT == iRet)
        {
            SqlCommand sqlCommand = new SqlCommand("", sqlConnection);                   
            String strQuery = "Select ID, Did, FirstName from Users";
            sqlCommand.CommandText = strQuery;

            SqlDataAdapter adaptor = new SqlDataAdapter(sqlCommand);
            adaptor.Fill(ds);
            sqlConnection.Close();
            return ds;                    
        }

    }
    catch (Exception e)
    {
        disconnect(ref sqlConnection);
    }
    return null;
}

并非所有代码路径都返回值,但必须返回。如果DB_SUCCESS_CONNECT!=iRet您将不会返回结果。尝试返回一些默认值,如上所述可能为null。另一个问题是,如果抛出异常,则不返回值。抛出异常时,您将断开连接并且不返回任何值。

答案 2 :(得分:2)

try块中只有return语句,不能保证它会因编译器假定的异常而一直执行。添加另一个返回 null dataset的return语句,然后尝试不会出错。您只能有一个return语句而不是两个或三个。

public DataSet GetFunc()
{
    int iRet = 0;
    DataSet ds = null;
    SqlConnection sqlConnection = new SqlConnection();
    try
    {
        iRet = connect(ref sqlConnection);
        if (DB_SUCCESS_CONNECT == iRet)
        {
            SqlCommand sqlCommand = new SqlCommand("", sqlConnection);                   
            String strQuery = "Select ID, Did, FirstName from Users";
            sqlCommand.CommandText = strQuery;

            SqlDataAdapter adaptor = new SqlDataAdapter(sqlCommand);
            ds = new DataSet();
            adaptor.Fill(ds);
            sqlConnection.Close();                
        }         
    }
    catch (Exception e)
    {
        disconnect(ref sqlConnection);
    }
   return ds;
}

答案 3 :(得分:2)

这是因为以下情况没有返回路径: - DB_SUCCESS_CONNECT != iRet

答案 4 :(得分:2)

如果在try ... catch块中抛出异常,则没有指定返回值。

添加:

return ds;

在catch块之后的函数末尾。

答案 5 :(得分:1)

您的代码失败,因为如果条件为true,您只返回值。如果条件失败或者发生某些异常,则表示方法没有返回任何内容。

还请注意,您没有正确处理连接。您需要关闭或处置连接对象。我会改变你的方法如下

public DataSet GetFunc()
{
    string strQuery = "Select ID, Did, FirstName from Users";
    DataSet ds = new DataSet();
    using (var sqlConnection = new SqlConnection())
    using (var sqlCommand = new SqlCommand(strQuery, sqlConnection))
    using (var adaptor = new SqlDataAdapter(sqlCommand))
    {
        adaptor.Fill(ds);
    }
    return ds;
}

答案 6 :(得分:1)

trycatch阻止后放置return语句,尝试使用以下代码:

public DataSet GetFunc()
{
    int iRet = 0;
    DataSet ds = new DataSet();
    SqlConnection sqlConnection = new SqlConnection();
    try
    {
        iRet = connect(ref sqlConnection);
        if (DB_SUCCESS_CONNECT == iRet)
        {
            SqlCommand sqlCommand = new SqlCommand("", sqlConnection);                   
            String strQuery = "Select ID, Did, FirstName from Users";
            sqlCommand.CommandText = strQuery;

            SqlDataAdapter adaptor = new SqlDataAdapter(sqlCommand);
            adaptor.Fill(ds);
            sqlConnection.Close();                    
        }
    }
    catch (Exception e)
    {
        disconnect(ref sqlConnection);
    }
   return ds;
}

如果函数有返回类型,它应该在所有情况下返回一些东西,因此函数应该具有Try块的返回值以及Catch块的返回值