检测到无法访问的代码

hab*_*o95 2 .net c# oledb ado.net

我在下面的代码中的con.close()处在Visual Studio中收到"无法访问代码检测到"消息.你能发现我做错了什么吗?

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();    
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*off 28

返回1或0时退出该函数(当您返回任何内容时,退出,但在您的情况下为1或0 ); 所以没有办法con.Close()可以调用.

在您发布的代码中,您保证返回,因为您在if语句的两个分支中都有return语句.如果只有一个分支有一个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
}      
Run Code Online (Sandbox Code Playgroud)


aba*_*hev 7

你的代码可能是这样的:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)