#asp.net #function #shared
#asp.net #функция #общий
Вопрос:
привет, ребята, у меня есть веб-сайт, который содержит много работы с базой данных для отображения данных на странице, поэтому я создал общедоступный класс VB под App_Code.
Теперь у меня есть все методы и функции в этом классе, которые являются общими (статическими), также у меня есть переменная connection, которая также является статической.
Клиент жалуется, что иногда на странице появляется ошибка, одна из этих ошибок заключается в том, что имя поля не принадлежит таблице Table, я не понимаю, по этому поводу, поскольку это очень редко, если нет поля с именем, то это должно происходить каждый раз, один из моих коллег говорит, что не должно быть общих методов или функций… правильно ли это..
Ответ №1:
Со статическим методом нет проблем с «безопасностью». Ваш коллега в замешательстве. Должен ли написанный вами код быть статическим или методами экземпляра, зависит от того, что именно он делает. Но использование их в качестве статических методов не является «опасным».
Я предлагаю вам отследить запрос, который вызывает проблему, потому что статический метод, безусловно, не является проблемой.
Что касается вашего соединения, я бы не рекомендовал сохранять его в качестве статической переменной. Я предполагаю, что это 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
s, SqlConnection
s, Font
s и т.д.
Комментарии:
1. Я хочу знать, следует ли делать объект connection статическим и вызывать его на другой странице через класс, подобный: custom.connection есть ли какие-либо проблемы с тем, чтобы сделать переменную connection статической.
Ответ №2:
Мне кажется, что у вас есть редко используемая инструкция SQL, которая ссылается на столбец, которого не существует в таблице.
Например, предположим, что у вас был SQL следующим образом
SELECT Col4 FROM Table2
и Col4 не был членом Table2. Вы получите ошибку, которую вы описываете.
Если вы создаете SQL динамически (что сложно), вы можете столкнуться с этим.
Но я не думаю, что это имеет какое-либо отношение к безопасности вашего метода.’
Комментарии:
1. Согласен. @Abbas, тебе нужно перехватить и записать ошибку. Это может быть
IF
условием в sproc, о существовании которого вы забыли.