Параллелизм в статических классах - PullRequest
1 голос
/ 22 марта 2012

Может кто-нибудь предложить мне, будет ли этот код вызывать параллелизм или нет.

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

Это включает в себя вызов статическогоФункция со страниц asp.net и передача параметров в качестве типа ссылки.

Я использую ссылочный тип.

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

Вот код из моего примера класса.

public static class DataClass
{

  static SqlConnection con = new SqlConnection(
      ConfigurationManager.ConnectionStrings["sqlserverconnectionstring"]
                                                .ConnectionString);

    public static string  GetCon()

    {

     return ConfigurationManager.ConnectionStrings["sqlserverconnectionstring"].ConnectionString;

    }
    public static void Conn(ref SqlConnection con)
    {
        if (con.State == ConnectionState.Closed)
        {
            con.Open();
        }
    }
    public static DataSet GetDataSet(string qry)
    {
        SqlDataAdapter adp = new SqlDataAdapter(qry, con);
        DataSet ds = new DataSet();
        adp.Fill(ds);
        return ds;
    }
    public static bool ExecuteCommand(ref SqlCommand cmd)
    {
        bool i =true;
        cmd.Connection = con;
        Conn(ref con);
        SqlTransaction trans =con.BeginTransaction(); 
        cmd.Transaction = trans;
        try
        {
            cmd.ExecuteNonQuery();
            trans.Commit();
        }
        catch
        {
            trans.Rollback();
            i = false;
        }
        finally
        {
            cmd.Dispose();
            con.Close(); 
        }
        return i;
    }
}

Ответы [ 2 ]

1 голос
/ 22 марта 2012

Да, это не поточно-ориентированный / Однако, поскольку SqlClient по умолчанию использует пул соединений, вы можете просто сбросить статическое соединение, и каждый раз использовать что-то вроде:

using(var conn = OpenConnection()) {
    ...//code
}

, где OpenConnection возвращает new SqlConnection каждый раз. Это не то же самое, что различное базовое соединение каждый раз, и вы обычно (в форме win) обнаруживает очень небольшое количество используемых соединений (1, если вам действительно повезло).

1 голос
/ 22 марта 2012

Поскольку вы определили статическое SQLConnection, я полагаю, что это может вызвать проблемы параллелизма.

static SqlConnection con = new SqlConnection (ConfigurationManager.ConnectionStrings["sqlserverconnectionstring"].ConnectionString);

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

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