程序不能编译通过,提示Not all code path return a value.

ScytheV 2009-10-20 01:41:08
(疑问:为啥以下程序不能编译通过,在第一行的ValidateUser下面有红色曲线,提示Not all code path return a value. 可是我明明每条code path都return了啊。)

public string ValidateUser(params string[] UserInfo)
{
if( UserInfo.Length < 2 ) return "Error: Need More Parameters.";
string strProvider = @"Data Source=(local)\SQLEXPRESS;Database=BD_Ningbo; Integrated Security = SSPI";
string UserName = UserInfo[0];
string Password = UserInfo[1];
OleDbConnection MyConn = new OleDbConnection(strProvider);
string strSelect = "select * from SX_USER where userdm='" + UserName + "'";
OleDbCommand MyComm = new OleDbCommand(strSelect, MyConn);
MyComm.Connection.Open();
OleDbDataReader MyReader = MyComm.ExecuteReader();
if( MyReader.Read() )
{
if( (string)MyReader["userdm"] != Password )
{
return "Password Invalid!";
}
if( (int)MyReader["Step"] < 1 )
{
try
{
int ValidateCode = Int32.Parse(UserInfo[2]);
if( (int)MyReader["ValidateCode"] != ValidateCode )
{
return "Error: Validate Code Wrong.";
}
}
catch( Exception e )
{
return "Error: This is your first time to login, please input the validate code.";
}
_Step = ( (int)MyReader["Step"] + 1 ).ToString();
_Email = MyReader["Email"].ToString();
_Age = MyReader["Age"].ToString();
_HomePage = MyReader["HomePage"].ToString();
MyComm.Connection.Close();
string strUpdate = "update SX_USER set Step=Step+1 Where userdm ='" + UserName + "'";
OleDbCommand UpdateComm = new OleDbCommand(strUpdate, MyConn);
UpdateComm.Connection.Open();
UpdateComm.ExecuteNonQuery();
UpdateComm.Connection.Close();
return "Succeed";

}
else
{
return "Error: Invalid UserName.";
}
}
}


...全文
326 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
闪亮的人生 2009-10-20
  • 打赏
  • 举报
回复
支持1L和5L
夏脑 2009-10-20
  • 打赏
  • 举报
回复
不是所有的分支都能返回值,或说函数可能不返回任何值
先定义一个变量,
所有要输出的值均赋给它,
最后return 这个变量
Helling 2009-10-20
  • 打赏
  • 举报
回复
你定义的函数是返回字符串的,但是你的函数的所有流程里面,有的流程没有返回字符串。
zhong2006 2009-10-20
  • 打赏
  • 举报
回复
支持一楼!~
最开始定义一个string err="";
中间赋值,最后return err;
chen_ya_ping 2009-10-20
  • 打赏
  • 举报
回复
对于这个if( MyReader.Read() )

加个else
{
return "没有读到数据!";
}
楼主你的代码排版好点,这样大家才看的清楚些
hssg44 2009-10-20
  • 打赏
  • 举报
回复
你既然返回的都是字符串,那不如在一开头自己定义一个
string errorMsg = "";

然后在中间程序中给 errorMsg赋值
在最后写上
return errorMsg

这样子简单明了

62,046

社区成员

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

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

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

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