Статические методы класса SqlServer - безопасность потоков - PullRequest
1 голос
/ 13 декабря 2011

Я создал класс, чтобы упростить использование сервера SQL в моем приложении.

public static class SqlServer
{        
    public static void QueryNoReturn(string ConnectionString, string Query, SqlParameter[] Parameters, bool IsStoredProcedure)
    {
        using (SqlConnection conn = new SqlConnection(ConnectionString))
        {
            // Create the command to run
            SqlCommand command = new SqlCommand(Query, conn);

            // If we are running a stored procedure
            if (IsStoredProcedure)
                command.CommandType = System.Data.CommandType.StoredProcedure;

            // Add parameters if they exist
            if (Parameters != null)
                command.Parameters.AddRange(Parameters);

            try
            {
                // Open the connection to the database
                conn.Open();

                // Execute the command and assign to the result object
                command.ExecuteNonQuery();

                conn.Close();

                command.Parameters.Clear();
            }
            catch (SqlException sqlex)
            {
                throw new Exception(
                    string.Format("{0} \"{1}\"", IsStoredProcedure ? "Procedure" : "Query", Query),
                    sqlex);
            }
        }
    }
}

Если я вызываю этот статический метод много раз в секунду (около 50), то у меня возникнут проблемы сбезопасность потока?

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

Ответы [ 2 ]

2 голосов
/ 13 декабря 2011

Поскольку вы не используете какие-либо общие ресурсы класса, это выглядит как "поточно-ориентированный".

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

Вы должны также обернуть создание SqlCommand в using заявления.

Поскольку вы создаете SqlConnection в операторе using, вам не нужно явно вызывать Close для него, как это будет сделано при удалении соединения.

1 голос
/ 13 декабря 2011

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

Кстати, переместите conn.Close(); в предложение finally, чтобы соединение закрывалось, даже если вы получаете исключение.

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