Я опубликовал свой новый веб-сайт, на моем компьютере он работает нормально и без проблем, но на Сервере 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;
}
}