在Visual Studio中,我在下面代码中的con.close()点上收到了一条“检测到无法访问的代码”的消息。你能发现我做错了什么吗?
private int chek1(String insert)
{
OleDbConnection con = new OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=d:\\sdb.mdb");
OleDbCommand com = new OleDbCommand("select count(*) from sn where sn='" + insert + "\'", con);
con.Open();
int po = (int)com.ExecuteScalar();
if (po > 0)
return 1;
else
return 0;
con.Close();
}发布于 2010-05-25 01:06:38
您的代码可能如下所示:
private int check(string sn)
{
using (OleDbConnection connection = new OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=d:\\sdb.mdb"))
using (OleDbCommand command = connection.CreateCommand())
{
command.CommandText = "SELECT COUNT(*) FROM sn WHERE sn=?";
command.Parameters.Add("@sn", sn));
con.Open();
return ((int)com.ExecuteScalar() > 0) ? 1 : 0;
}
}发布于 2010-05-25 01:00:50
函数在返回1或0时退出(返回任何值,本例中只返回1或0);因此无法调用con.Close()。
在您发布的代码中,您肯定会返回,因为在if语句的两个分支中都有一个return语句。如果只有一个分支有返回语句,仍然可以访问con.Close()。
但是无论如何您都不应该以这种方式使用Close --您应该使用using语句。
using (OleDbConnection con = new OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=d:\\sdb.mdb"))
using (OleDbCommand com = new OleDbCommand("select count(*) from sn where sn='" + insert + "\'", con))
{
con.Open();
int po = (int)com.ExecuteScalar();
if (po > 0)
return 1;
else
return 0;
// con.Close and con.Dispose will be called automatically at the end of the using block
} 发布于 2010-05-25 01:01:19
上面有一个总是会触发return的if / else
if (po > 0)
return 1;
else
return 0;因此,在这段代码之后,任何代码都不可能执行。
https://stackoverflow.com/questions/2898694
复制相似问题