C# 并非所有代码路径都返回值错误
如果数据存在,我将读取以下代码。我想返回true或false,但C编译器说:并非所有代码路径都返回一个值,并在方法名ReadDV上显示红色错误行 代码是:C# 并非所有代码路径都返回值错误,c#,C#,如果数据存在,我将读取以下代码。我想返回true或false,但C编译器说:并非所有代码路径都返回一个值,并在方法名ReadDV上显示红色错误行 代码是: public bool ReadDV(string ReadCommand) { try { SqlConnection SCO = ConnectionClass.getconnection(); SqlCommand delCmd = new SqlCommand(ReadCommand,
public bool ReadDV(string ReadCommand)
{
try
{
SqlConnection SCO = ConnectionClass.getconnection();
SqlCommand delCmd = new SqlCommand(ReadCommand, SCO);
if (SCO.State != ConnectionState.Open)
SCO.Open();
SqlDataReader r = delCmd.ExecuteReader();
if (r.Read())
{
if (SCO.State != ConnectionState.Closed)
SCO.Close();
r.Close();
return true;
}
}
catch (Exception ex)
{
return false;
}
}
getconnection代码是返回连接字符串的方法的一部分,它工作正常。
我将添加调用此方法的代码的第二部分:read为null时它不起作用
string RUSERSSV = @"select * from USERSSV where Users = ........;
DB db = new DB(); // calling method
if (comboBox1.Text != "")
{
if (db.ReadDV(RUSERSSV)==true) // this is the mention part
{
string IUSERSSV = @"update USERSSV set Users = // insert fired if read is true
db.insert(IUSERSSV);
Save.Form(this);
}
else
{
string IUSERSSV = @"insert into USERSSV // update fired if read false
db.insert(IUSERSSV);
Save.Form(this);
}
如果返回语句可以执行,也可以不执行,那么应该有一条必须执行的返回语句。如果错误被无条件执行,那么将return放在catch之后可能会删除错误。您可以使用bool变量存储要返回的值并返回该变量
bool success = false;
try
{
SqlConnection SCO = ConnectionClass.getconnection();
SqlCommand delCmd = new SqlCommand(ReadCommand, SCO);
if (SCO.State != ConnectionState.Open) SCO.Open();
SqlDataReader r = delCmd.ExecuteReader();
if (r.Read())
{
if (SCO.State != ConnectionState.Closed) SCO.Close();
r.Close();
success = true;
}
}
catch (Exception ex)
{
return false;
}
return success;
如果返回语句可以执行,也可以不执行,那么应该有一条必须执行的返回语句。如果错误被无条件执行,那么将return放在catch之后可能会删除错误。您可以使用bool变量存储要返回的值并返回该变量
bool success = false;
try
{
SqlConnection SCO = ConnectionClass.getconnection();
SqlCommand delCmd = new SqlCommand(ReadCommand, SCO);
if (SCO.State != ConnectionState.Open) SCO.Open();
SqlDataReader r = delCmd.ExecuteReader();
if (r.Read())
{
if (SCO.State != ConnectionState.Closed) SCO.Close();
r.Close();
success = true;
}
}
catch (Exception ex)
{
return false;
}
return success;
将return语句放在if r.Read块之外
基本上,在函数结束之前应该有一个return语句。将return语句放在if r.Read块之外
基本上,函数结束之前应该有一个return语句。当ifr.Read为false时,代码没有返回任何内容。 您可以通过以下方式修复代码:
public bool ReadDV(string ReadCommand)
{
bool returnValue = false;
try
{
SqlConnection SCO = ConnectionClass.getconnection();
SqlCommand delCmd = new SqlCommand(ReadCommand, SCO);
if (SCO.State != ConnectionState.Open) SCO.Open();
SqlDataReader r = delCmd.ExecuteReader();
if (r.Read())
{
if (SCO.State != ConnectionState.Closed) SCO.Close();
r.Close();
returnValue = true;
}
}
catch (Exception ex)
{
returnValue = false;
}
return returnValue;
}
当r.Read为false或捕捉到异常时,上述代码现在总是返回false。当ifr.Read为false时,代码不会返回任何内容。 您可以通过以下方式修复代码:
public bool ReadDV(string ReadCommand)
{
bool returnValue = false;
try
{
SqlConnection SCO = ConnectionClass.getconnection();
SqlCommand delCmd = new SqlCommand(ReadCommand, SCO);
if (SCO.State != ConnectionState.Open) SCO.Open();
SqlDataReader r = delCmd.ExecuteReader();
if (r.Read())
{
if (SCO.State != ConnectionState.Closed) SCO.Close();
r.Close();
returnValue = true;
}
}
catch (Exception ex)
{
returnValue = false;
}
return returnValue;
}
当r.Read为false或捕获异常时,上面的代码现在总是返回false。我建议这样做,这是一个更干净的解决方案,它将防止类似您的问题:
public bool ReadDV(string ReadCommand)
{
bool result = false;
try
{
SqlConnection SCO = ConnectionClass.getconnection();
SqlCommand delCmd = new SqlCommand(ReadCommand, SCO);
if (SCO.State != ConnectionState.Open) SCO.Open();
SqlDataReader r = delCmd.ExecuteReader();
if (r.Read())
{
if (SCO.State != ConnectionState.Closed) SCO.Close();
r.Close();
result = true;
}
}
catch (Exception ex)
{
result = false;
}
return result;
}
我建议这样做,这是一个更干净的解决方案,它将防止像您这样的问题:
public bool ReadDV(string ReadCommand)
{
bool result = false;
try
{
SqlConnection SCO = ConnectionClass.getconnection();
SqlCommand delCmd = new SqlCommand(ReadCommand, SCO);
if (SCO.State != ConnectionState.Open) SCO.Open();
SqlDataReader r = delCmd.ExecuteReader();
if (r.Read())
{
if (SCO.State != ConnectionState.Closed) SCO.Close();
r.Close();
result = true;
}
}
catch (Exception ex)
{
result = false;
}
return result;
}
尝试初始化变量中的返回值,然后根据代码路径更改该值,最后只有一个返回语句,这样就不需要有多个返回语句。错误是因为您错过了该函数的return语句-每个可能的代码路径都应该为该函数返回一个值
尝试初始化变量中的返回值,然后根据代码路径更改该值,最后只有一个返回语句,这样就不需要有多个返回语句。错误是因为您错过了该函数的return语句-每个可能的代码路径都应该为该函数返回一个值
我是这样做的:
公共bool ReadDVstring ReadCommand
{
布尔结果=假;
尝试
{
SqlConnection SCO=ConnectionClass.getconnection;
SqlCommand delCmd=新SqlCommandReadCommand,SCO;
如果SCO.State!=ConnectionState.Open SCO.Open;
SqlDataReader r=delCmd.ExecuteReader
if (r.Read()==true)
{
if (SCO.State != ConnectionState.Closed) SCO.Close();
r.Close();
result = true;
}
else if (r.Read() == false)
{
if (SCO.State != ConnectionState.Closed) SCO.Close();
r.Close();
result = false;
}
}
catch (Exception ex)
{
result = false;
}
return result;
}
谢谢大家
我是这样做的:
公共bool ReadDVstring ReadCommand
{
布尔结果=假;
尝试
{
SqlConnection SCO=ConnectionClass.getconnection;
SqlCommand delCmd=新SqlCommandReadCommand,SCO;
如果SCO.State!=ConnectionState.Open SCO.Open;
SqlDataReader r=delCmd.ExecuteReader
if (r.Read()==true)
{
if (SCO.State != ConnectionState.Closed) SCO.Close();
r.Close();
result = true;
}
else if (r.Read() == false)
{
if (SCO.State != ConnectionState.Closed) SCO.Close();
r.Close();
result = false;
}
}
catch (Exception ex)
{
result = false;
}
return result;
}
返回的是r.Read返回false?您忘记了在“if r.Read”的情况下返回true或return false有关更多信息,请阅读它应该返回true谢谢,以下所有答案都可以并删除了我的错误,但在我打电话后,它不起作用返回的是r.Read返回false?您忘记了在else cas中返回true或return false“if r.Read”的e有关更多信息,请阅读它应该返回true谢谢,下面的所有答案都可以,并且删除了我的错误,但在我调用之后,它不起作用。您的代码将方法的行为修改为意外行为,因为即使没有读取数据,它也会返回true。同意。这里应该使用一个标志。我想说的是用户应该在if块之外有一个return语句。这甚至不是真的。如果…{…return true;}否则{return false;},他当然可以这样做我两个都这么做了,但如果数据库没有数据,它将不返回任何内容,我希望读取sql表的2个字段,如果它为null或未找到,则插入已激发的语句,否则更新已激发的语句不确定提供的解决方案为何不起作用。您可以共享更多代码吗?您的代码将方法的行为修改为意外行为,因为它将即使没有读取数据,我也会返回true。同意。这里应该使用一个标志。我想说的是,用户应该在if块之外有一个return语句。这甚至不是真的。如果…{…return true;}或者{return false;}我都这样做了,但是如果数据库
e没有数据,它将不返回任何内容,我希望读取sql上表的2个字段,如果它为null或未找到,则触发insert语句,否则更新FIREDNO不确定提供的解决方案为何不起作用。你能分享更多的代码吗?返回结果;不在if范围内,且返回总是false关于r的内容是什么。读取此返回的内容是什么?返回结果;是的,它总是返回false,如果语句是denaied,它总是返回false,如果语句是denaied,它总是返回false,如果语句是denaied