Каковы потенциальные проблемы с использованием этого статического класса - PullRequest
4 голосов
/ 27 мая 2011

Вот мой пример кода:

public static class MySqlHelper
{
    private static string constring = ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString;

    public static int ExecuteNonQuery(string mysqlquery)
    {
        SqlConnection conn = new SqlConnection(connString);
        SqlCommand cmd = new SqlCommand(mysqlquery, conn);
        int result;

        try
        {
            conn.Open();
            result= cmd.ExecuteNonQuery();
        }
        finally
        {
            conn.Close();
        }
        return result;
    }
}

Использование: MySqlHelper.ExecuteNonQuery("select * from customers");

Я хотел бы знать о проблемах с использованием этого статического класса.

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

Спасибо за любые вводимые данные.

Редактировать: Обновлен код.Имеет ли это значение в ответах?Извините, я должен был опубликовать в начале.

Ответы [ 7 ]

7 голосов
/ 27 мая 2011

Я предполагаю, что строка соединения не изменяется во время выполнения (вы можете сделать это только для чтения).Поскольку в этом вопросе не указано другое общее состояние, реальных проблем не возникает.

Однако, если у вас есть какое-либо общее состояние, у вас возникает огромная проблема с многопоточностью.И если у вас есть общие соединения , у вас есть еще большая проблема.

Но, как написано, без значительных статических полей: нет проблем.

4 голосов
/ 27 мая 2011

Я думал, что он довольно ясно ответил.

Написание собственного класса провайдера в ASP.NET

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

2 голосов
/ 27 мая 2011

Статические классы сложно проверить.

В вашем вопросе упоминается, что для разнообразия вам придется сменить класс на паре веб-сайтов. Если бы ваши веб-сайты были подключены к интерфейсу, то реализация была бы относительно простой.

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

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

Очевидные недостатки:

  • жестко закодированная строка соединения
  • без пула соединений в драйвере, это очень плохо: // open conn + // close conn

1) может быть безобразно решен при использовании одиночного символа в качестве имени строки подключения

2) не может быть решена в статическом классе без введения общих данных: т.е. не сажая нож в спину.

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

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

0 голосов
/ 11 сентября 2011

Если вы собираетесь пойти по этому пути, многие захотят воспользоваться предложением Microsoft DAAB SqlHelper v2. Он использует ту же концепцию, но гораздо надежнее. Он также кеширует SqlParameters. Код вышел примерно в 2001 году и постоянно использовался многими разработчиками.

http://www.microsoft.com/download/en/details.aspx?id=435

0 голосов
/ 11 сентября 2011

Знаете ли вы, что MySQL Connector для .NET теперь имеет класс MySqlHelper (вы можете проверить его в источнике здесь )?

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