为什么我写的这个方法报错!高手进来看看

冷月孤峰 2004-01-29 03:57:16
报错:
C:\Inetpub\wwwroot\Business\SheetNo.cs(34): “Business.SheetNo.CreateSheetNo(decimal, string, string, decimal, out string)” : 并非所有的代码路径都返回值
原代码:
public int CreateSheetNo(decimal cllyid,string clly, string jzy,decimal employeeid,out string retStr )
{//生成送货单编号(材料来源ID+用户ID+结帐月+4位流水号)
OleDbConnection cnn=null;
OleDbDataReader retRecord=null;
OleDbCommand objCmd=null;
string sqlStr=null;

retStr="";
if(jzy.Length!=6)
{
_ErrMsg="记帐月位数不够";
return -1;
}
else
{
try
{
cnn=new OleDbConnection(_cnnStr);
cnn.Open();
sqlStr="select max(sheetno) from twsheet where ifs is null and clly=?clly and jzy=?jzy and employeeid=?employeeid";
objCmd=new OleDbCommand(sqlStr,cnn);
objCmd.Parameters.Add("?clly",OleDbType.Numeric);
objCmd.Parameters.Add("?jzy",OleDbType.VarChar,10);
objCmd.Parameters.Add("?employeeid",OleDbType.Numeric);

objCmd.Parameters["?clly"].Value=cllyid;
objCmd.Parameters["?jzy"].Value=jzy ;
objCmd.Parameters["?employeeid"].Value=employeeid;
retRecord=objCmd.ExecuteReader();
while(retRecord.Read())
{
if(retRecord.Read())
{
System.Int64 xsl=Convert.ToInt64( retRecord.GetString(0))+1;
string xslxh=Convert.ToString(xsl);
retStr =clly+ employeeid + jzy + xslxh.Substring(xslxh.Length-4,4) ;
return 0;
}
else
{
retStr=clly + employeeid + jzy+"0001";
return 0;
}
}
}
catch(Exception e)
{
_ErrMsg=e.Message;
return -1;
}
finally
{
if(retRecord!=null)
retRecord.Close();
if(objCmd!=null)
objCmd.Dispose();
if(cnn!=null)
cnn.Close();
}
}
}
...全文
86 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
James880 2004-01-29
  • 打赏
  • 举报
回复
就是楼上说的.
像这样的问题,在这个方法体的内部最好是设一个变量,作返回用能减少或者避免你这样的小问题:
例如: int _resultValue = 0;
while( retRecord.Read())
{
if( retRecord.Read())
{
// something..
_resultValue = 0;
}
else
{
// something..
_resultValue = 0;
}
return _resultValue;
}
l_clove 2004-01-29
  • 打赏
  • 举报
回复
哎,这个问题...
while(retRecord.Read())
{
if(retRecord.Read())
{
System.Int64 xsl=Convert.ToInt64( retRecord.GetString(0))+1;
string xslxh=Convert.ToString(xsl);
retStr =clly+ employeeid + jzy + xslxh.Substring(xslxh.Length-4,4) ;
return 0;
}
else
{
retStr=clly + employeeid + jzy+"0001";
return 0;
}
}
return 0; //如果第一次while不成功当然没有返回值了
冷月孤峰 2004-01-29
  • 打赏
  • 举报
回复
to wangier:
我照你说的加了,但是报错:
提示: 控制不能离开 finally 子句主体
巍巍清风 2004-01-29
  • 打赏
  • 举报
回复
else 分支里如果没有执行 while() 和 catch 里的语句,没有值返回。
在finally里最后加一句:return 0;

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧