我已经定义了以下函数,该函数将从表中返回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()':并非所有代码路径都返回值
我很困惑我哪里出错了。有人可以指导我吗?
答案 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)
在try
和catch
阻止后放置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
块的返回值