连接状态问题

发布于 2024-08-31 04:44:06 字数 3724 浏览 2 评论 0原文

我已经发布了我的新网站,在我的计算机中它工作正常并且没有问题,但是在服务器中我当某些用户同时连接时它崩溃了。
我发现这个方法有一个错误:

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;
    }
}

I've published my new website , In my computer it works fine and no problem , But in the Server I when some user connect at the same time it crash .

I found out There is a error at this Method :

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

When i trace it , It says ConnectionState is not open , and it's doing opening . Here are my questions :
1- Is it a problem if while ConnectionState is doing opening , we Open the connection again ?
2- What I've missed , that i receive this error ?


Edit

For more information I past some part of my code here :

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

    }

And i invote that like :

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;
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

清风疏影 2024-09-07 04:44:07

如果当 ConnectionState 正在打开时,我们再次打开连接,会出现问题吗?

是的,它可以抛出异常。

直接来自 MSDN:SqlConnection.Open 方法

InvalidOperationException
如果不指定数据源或服务器,则无法打开连接。

连接已打开

(您是否使用单个共享连接在不同线程上执行该方法?)

Is it a problem if while ConnectionState is doing opening , we Open the connection again?

Yes, it can throw an exception.

Straight from MSDN: SqlConnection.Open method

InvalidOperationException:
Cannot open a connection without specifying a data source or server.
or
The connection is already open

(are you executing the method on different threads with a single shared connection?)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文