Итак, я использую этот старый код, который запускает простую команду ExecuteNonQuery для вызовов базы данных. Я использую DbConnection, DbTransaction и другие команды System.Data.Common.
Кажется, я получаю много ошибок Null Reference всякий раз, когда использую функцию в определенных частях проекта, хотя в других частях это кажется нормальным. Я думаю, что это связано с открытием соединений вручную или какой-то проблемой с вызовом, но мне интересно, изначально ли сама функция плохо спроектирована (не должен ли быть способ исправить какие-либо проблемы в том, как она вызывается?)
Я чувствую, когда в транзакциях участвуют эти ошибки с нулевой ссылкой чаще, я думаю, что ошибка, которую я получаю, является нулевым исключением при "_ command = _db.GetStoredProcCommand (StoreProcedure);" внутри следующей функции , Но эта хранимая процедура существует, поэтому она не имеет смысла.
public List<OutputParameter> execute(String storedProcedure, StoredProcedureParameter[] sqlParameters)
{
try
{
List<OutputParameter> outputParameters = new List<OutputParameter>();
_command = _db.GetStoredProcCommand(storedProcedure);
for (int x = 0; x < sqlParameters.GetLength(0); x++)
{
if (sqlParameters[x] != null)
{
StoredProcedureParameter sqlParameter = sqlParameters[x];
String param = sqlParameter.ParameterName;
DbType dbType = sqlParameter.DbType;
object value = sqlParameter.Value;
if (sqlParameter.IsOutputParam)
{
_db.AddOutParameter(_command, param, dbType, 32);
OutputParameter outputParameter = new OutputParameter(param);
outputParameters.Add(outputParameter);
}
else
_db.AddInParameter(_command, param, dbType, value);
}
}
if (_transaction == null)
_db.ExecuteNonQuery(_command);
else
_db.ExecuteNonQuery(_command, _transaction);
foreach (OutputParameter op in outputParameters)
{
op.ParameterValue = _db.GetParameterValue(_command, op.ParameterName);
}
return outputParameters;
}
catch (SqlException sqle)
{
throw new DataAccessException(sqle.ToString());
}
catch (Exception e)
{
throw new DataAccessException(e.ToString());
}
}