Connection.State Issue - PullRequest
       12

Connection.State Issue

0 голосов
/ 02 мая 2010

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

public static DbDataReader ExecuteReader(DbCommand dbCommand, CommandBehavior commandBehavior)
{
    if (dbConnection.State != ConnectionState.Open)
        dbConnection.Open();
    return dbCommand.ExecuteReader(commandBehavior);
}

Когда я отслеживаю его, он говорит, что ConnectionState не открыт, и он делает открытие. Вот мои вопросы:
1. Есть ли проблема, если во время открытия ConnectionState мы снова открываем соединение?
2- Что я пропустил, что я получаю эту ошибку?


Редактировать
Для получения дополнительной информации я прошёл некоторую часть моего кода здесь:

public class DbProviderHelper
    {
        private static DbProviderFactory dbProviderFactory;

        private static DbConnection dbConnection;

        #region dbConnexion

        public static DbConnection GetConnection()
        {
            if (dbConnection == null)
            {
                ConnectionStringsSection connectionStringsSection = GetConnectionStringsSection();
                dbProviderFactory = DbProviderFactories.GetFactory(connectionStringsSection.ConnectionStrings[1].ProviderName);
                dbConnection = dbProviderFactory.CreateConnection();
                dbConnection.ConnectionString = connectionStringsSection.ConnectionStrings[1].ConnectionString;
            }
            return dbConnection;
        }
        public static ConnectionStringsSection GetConnectionStringsSection()
        {
            return ConfigurationManager.GetSection("connectionStrings") as ConnectionStringsSection;
        }

        #endregion dbConnexion

        #region  dbCommand

        public static DbCommand CreateCommand(String commandText, CommandType commandType)
        {
            DbCommand dbCommand = dbProviderFactory.CreateCommand();
            dbCommand.Connection = dbConnection;
            dbCommand.CommandType = commandType;
            dbCommand.CommandText = commandText;


            return dbCommand;
        }

        #endregion  dbCommand

        #region dbParameter

        public static DbParameter CreateParameter(string parameterName, DbType dbType, object value)
        {
            DbParameter oDbParameter = dbProviderFactory.CreateParameter();
            oDbParameter.ParameterName = parameterName;
            oDbParameter.DbType = dbType;
            oDbParameter.Value = value;

            return oDbParameter;
        }

        #endregion dbParameter

        #region Operations

        public static DbDataReader ExecuteReader(DbCommand dbCommand)
        {
            if (dbConnection.State != ConnectionState.Open)
                dbConnection.Open();
            return dbCommand.ExecuteReader(CommandBehavior.CloseConnection);
        }
        public static int ExecuteNonQuery(DbCommand dbCommand)
        {
            try
            {
                if (dbConnection.State != ConnectionState.Open)
                    dbConnection.Open();
                return dbCommand.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                dbConnection.Close();
            }
        }
        #endregion Operations

    }

И я призываю это как:

public class Configuration
{
    public Configuration()
    {
        DbProviderHelper.GetConnection();
    }
    public DbDataReader GetTabsParent(int tabId)
    {
        DbCommand oDbCommand = DbProviderHelper.CreateCommand("Portal_TabsGetParent", CommandType.StoredProcedure);
        oDbCommand.Parameters.Add(DbProviderHelper.CreateParameter("@TabID", DbType.Int32, tabId));
        DbDataReader oDbDataReader = DbProviderHelper.ExecuteReader(oDbCommand);
        return oDbDataReader;
    }
}

1 Ответ

1 голос
/ 02 мая 2010

Есть ли проблема, если во время открытия ConnectionState мы снова открываем соединение?

Да, это может вызвать исключение.

Прямо от MSDN: SqlConnection.Open метод

InvalidOperationException:
Невозможно открыть соединение без указания источника данных или сервера.
или
Соединение уже открыто

(выполняете ли вы метод в разных потоках с помощью одного общего подключения?)

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