返回数据集值给出错误
Posted
技术标签:
【中文标题】返回数据集值给出错误【英文标题】:Returning dataset values giving an error 【发布时间】:2013-08-14 06:04:38 【问题描述】:我定义了以下函数,它将从表中返回 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()':并非所有代码路径都返回值
我很困惑我哪里出错了。有人可以指导我吗?
【问题讨论】:
【参考方案1】:在 try 块中你给了一个返回类型,而在 catch 块中没有返回类型。 当编译器没有找到合适的返回值时,通常会发生此错误。 尝试在 catch 中返回 ds
但请确保在您的逻辑中进一步检查 ds 是否有空检查
【讨论】:
【参考方案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。另一个问题是,如果抛出异常,您不会返回值。当抛出异常时,您将断开连接并且不返回任何值。
【讨论】:
【参考方案3】:这是因为没有返回路径的情况:-DB_SUCCESS_CONNECT != iRet
【讨论】:
返回在try - catch
:)【参考方案4】:
如果在 try ... catch
块内引发异常,则没有指定返回值。
添加:
return ds;
在你的函数末尾的 catch 块之后。
【讨论】:
【参考方案5】:try
块中只有 return 语句,由于编译器假定的异常,不能保证它总是会执行。添加另一个 return 语句返回 null 或 dataset
out of try 那么你不会得到错误。您只能有一个 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;
【讨论】:
最后一个return null
就够了:)
感谢您的指点,只有一个回报就足够了,而不是你有两个。【参考方案6】:
您的代码失败,因为您仅在条件为真时才返回值。如果条件失败或发生某些异常,则您的方法不会返回任何内容。
另外请注意,您没有正确处理连接。您需要关闭或处置连接对象。我会改变你的方法如下
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;
【讨论】:
【参考方案7】:在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
块的返回值
【讨论】:
以上是关于返回数据集值给出错误的主要内容,如果未能解决你的问题,请参考以下文章
如何将指数平滑模型预测值获取到 POWER BI/POWER Query 数据集?
SqlDataAdapter.Fill 方法不会给出任何错误,但也不会返回任何数据以用于长时间运行的查询 ado.net core SQL Server