-2

「すべてのコードパスが値を返すわけではありません」というコンパイルエラーが発生し続ける理由がわかりません。アカウントが使用可能な場合は true を返し、アカウントが使用できないか null/空の場合は false を返す単純なクラス メソッドを作成しています。メソッドのコードは次のとおりです。

public static bool AccountAvailable(int AccountId)
{
    try
    {            
        bool accountavailable;

        string queryTransaction = "Select Count(AccountID) FROM Accounts WHERE AccountID = " + AccountId.ToString() + " AND AccountUsed = 0";

        //grab a connection to the database
        Database database = DatabaseFactory.CreateDatabase();

        //create an instance of the command
        DbCommand command = database.GetSqlStringCommand(queryTransaction);

        object dataobject = command.ExecuteScalar();

        if (dataobject == null || string.IsNullOrEmpty(Convert.ToString(dataobject)))
        {
            accountavailable = false;
        }

        else if (Convert.ToInt32(dataobject) == 0)
        {
            accountavailable = false;
        }

        else if (Convert.ToInt32(dataobject) > 0)
        {
            accountavailable = true;
        }

        else
        {
            accountavailable = true;
        }

        return accountavailable;
    }

    catch
    {

    }
}

これに関するヘルプやアドバイスをいただければ幸いです。ありがとう!!

4

3 に答える 3

2

値を返す前にコードで例外がスローされた場合、制御はcatchブロックに移動します。その後、何も返さずにメソッドの最後に到達します。

catch ブロック内または後に何かを返します。

于 2013-09-03T20:33:19.593 に答える
0

このコードを試すことをお勧めします

public static bool AccountAvailable(int AccountId)
{
    bool accountavailable = false;
    try
    {            

        string queryTransaction = "Select Count(AccountID) FROM Accounts WHERE AccountID = " + AccountId.ToString() + " AND AccountUsed = 0";

        //grab a connection to the database
        Database database = DatabaseFactory.CreateDatabase();

        //create an instance of the command
        DbCommand command = database.GetSqlStringCommand(queryTransaction);

        object dataobject = command.ExecuteScalar();

        if (dataobject == null || string.IsNullOrEmpty(Convert.ToString(dataobject)))
        {
            accountavailable = false;
        }

        else if (Convert.ToInt32(dataobject) == 0)
        {
            accountavailable = false;
        }

        else if (Convert.ToInt32(dataobject) > 0)
        {
            accountavailable = true;
        }

        else
        {
            accountavailable = true;
        }

    }

    catch
    {

    }
    return accountavailable;
}
于 2013-09-03T20:34:43.097 に答える