Как использовать строку подключения в этом методе? - PullRequest
0 голосов
/ 04 мая 2020
public async Task<ActionResult> Login(Login model)
{
    ClaimsIdentity identity = null;
    bool isAuthenticated = false;
    StoredProcedure sp = new StoredProcedure(_connectionString);
    if (ModelState.IsValid)
    {
        var user = model.user.ToUpper();
        bool isUserBlackListed = model.blacklistedUser;
        DateTime banDateTime = model.blacklistedUserBanDateTime;
        sp.Check_BlackList(_connectionString, user, out isUserBlackListed, out banDateTime);

Последняя строка вызывает у меня головную боль. Я не могу понять, почему?

public static void Check_BlackList(string _connectionString, string Employee_Email, out bool isBlackListed, out DateTime blackListDateTime)
{
    DataTable dt = new DataTable();
    blackListDateTime = DateTime.Now.AddDays(1);
    try
    {                
        using (OracleConnection con = new OracleConnection(_connectionString))
        {
            OracleCommand cmd = new OracleCommand();
            OracleDataAdapter da = new OracleDataAdapter();
            cmd.Connection = con;
            cmd.CommandText = "CHECK_BLACKLIST";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("T1_Cursor", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            cmd.Parameters.Add("P_EMPLOYEE_USERNAME", OracleDbType.Varchar2).Value = (Employee_Email);

            da.SelectCommand = cmd;
            da.Fill(dt);
            if (dt.Rows.Count > 0)
            {
                isBlackListed = true;                        
                DateTime.TryParse(dt.Rows[0]["ACCOUNT_STATUS_LAST_UPDATE"].ToString(), out blackListDateTime);
            }
            isBlackListed = false;                    
        }
    }
    catch (OracleException ex)
    {
        Console.WriteLine(ex.ToString());
        isBlackListed = false;
    }
}

Код серьезности Описание Ошибка состояния подавления строки файла проекта CS0176 Член 'StoredProcedure.Check_BlackList (строка, строка, out bool, out DateTime)' недоступна со ссылкой на экземпляр; вместо этого укажите имя типа Controllers \ AuthenticationController.cs 40 Active

1 Ответ

1 голос
/ 04 мая 2020

Понятно, вы вызываете свой метод stati c, используя объект, который вы создали из класса StoredProcedure, и назвали его sp. Но при доступе к методу stati c вам не нужно создавать экземпляр класса, просто вы можете вызвать метод с именем класса, не создавая объект класса.

В вашем случае, ваш метод находится в классе StoredProcedure, и вам нужно вызвать его так:

StoredProcedure.Check_BlackList(_connectionString, user, out isUserBlackListed, out banDateTime);

Итак, модифицированный метод будет выглядеть следующим образом:

public async Task<ActionResult> Login(Login model)
{
        ClaimsIdentity identity = null;
        bool isAuthenticated = false;
        StoredProcedure sp = new StoredProcedure(_connectionString); //  I do not think you will need this line of code here.
        if (ModelState.IsValid)
        {

            var user = model.user.ToUpper();
            bool isUserBlackListed = model.blacklistedUser;
            DateTime banDateTime = model.blacklistedUserBanDateTime;
            StoredProcedure.Check_BlackList(_connectionString, user, out isUserBlackListed, out banDateTime);
            // other code...
        }
}

Надежда это помогает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...