безопасны статические методы в asp.net - PullRequest
0 голосов
/ 13 мая 2011

Эй, ребята, у меня есть веб-сайт, который содержит много работы с БД для отображения данных на странице, поэтому я создал общедоступный класс VB под App_Code.

Теперь у меня есть все методы ифункции этого класса - Shared (Static), также у меня есть переменная подключения, которая также является статической.

Клиент жалуется, что когда-то появляется ошибка на странице, одна из этих ошибок - Имя поля не принадлежитТаблица Таблица, я не понимаю, об этом, так как это очень редко, если нет поля с именем, то это должно происходить каждый раз, один из моих коллег говорит, что не должно быть общих методов или функций ... этоправильный ..

Ответы [ 2 ]

1 голос
/ 13 мая 2011

Нет проблемы "безопасности" со статическим методом.Ваш коллега в замешательстве.Должен ли написанный вами код быть статическим или методы экземпляра зависят от того, что именно он делает.Но использование их в качестве статических методов не является «опасным».

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

Наскольковаше соединение идет, я бы не рекомендовал хранить его как статическую переменную.Я предполагаю, что это SqlConnection или что-то подобное.В этом случае, если вы сохраняете это как статическую переменную, возможно следующее:

  • Ваше соединение никогда не закрывается, даже после того, как вы закончили его использовать.
  • У вас будут проблемы, если у вас есть несколько запросов, пытающихся использовать соединение одновременно.

Поэтому я рекомендую использовать следующий шаблон, чтобы ваши соединения оставались открытыми только до тех пор, пока они

public void DoSomething()
{
    //Doing some work that doesn't need a connection.

    //Now ready to submit or fetch data from the database.
    using (SqlConnection connection = new SqlConnection(...))
    {
        using (SqlCommand command = new SqlCommand(..., connection))
        {
            //Now, working with the connection and command.
        }
    }

    //Done with the connection, doing more work now.
}

Оператор using работает со всем, что является IDisposable.Ваша переменная connection будет автоматически закрыта и уничтожена в закрывающей скобке оператора using.Я рекомендую вам использовать его для всего, что вы можете.Stream с, SqlConnection с, Font с и т. Д.

1 голос
/ 13 мая 2011

Мне кажется, что у вас есть нечасто используемый оператор SQL, который ссылается на столбец, который не существует в таблице.

Например, предположим, что у вас SQL такой, как

SELECT Col4 FROM Table2

и Col4 не был членом таблицы 2.Вы получите сообщение об ошибке, которую вы описали.

Если вы создаете SQL динамически (что выглядит странно), вы можете столкнуться с этим.

Но я не думаю, что это имеет какое-либо отношение кваш метод 'безопасность.'

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