C # как получить свойство родительского класса из дочернего класса - PullRequest
0 голосов
/ 05 февраля 2019

Может быть, я немного тупой, но мне нужно взять значение параметра базового класса из дочернего класса.Как я могу это сделать?

Мой код:

using (OracleConnection connection = new OracleConnection(ConnStr)) {
  connection.Open();
  using (OracleCommand cmd = connection.CreateCommand()) {
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "Package.StoredProcedure";

    cmd.Parameters.Add(DbParam("in_id", OracleDbType.Int32, id));
    cmd.Parameters.Add(DbOutParam("out_success", OracleDbType.Int32, 1));

    cmd.ExecuteNonQuery();
    int out_success = cmd.Parameters.GetIntValue("out_success");
    connection.Close();
  }
}

И я написал расширение GetIntValue для OracleParameterCollection

private static int GetIntValue(this OracleParameterCollection parameter, string parameterName) {
  bool success = int.TryParse(parameter[parameterName].Value.ToString(), out int response);
  if (success == false) {
    Console.Out.WriteLine($"TryParse parameter: {parameterName}");
    throw new Exception("Unhandled Exception");
  }
  return response;
}

И мне нужно войти врасширение GetIntValue свойство cmd.CommandText для печати в консоли - как это возможно?

1 Ответ

0 голосов
/ 05 февраля 2019

Если вам нужно сослаться на команду, разрешите методу расширения принимать экземпляр команды вместо параметров:

private static int GetIntValue(this OracleCommand command, string paramName)
{
    var parameters = command.Parameters;

    if (!parameters.Contains(parameterName))
        throw new ArgumentException(
            $"{command.CommandText} does not contain param {parameterName}");

    if (!int.TryParse(parameters[paramName].Value.ToString(), out int response))
        throw new FormatException(
            $"could not parse {paramName} in {command.CommandText}");

    return response;
}

Обратите внимание, что выгрузка текстов команд для исключений может быть плохой идеей с точки зрения безопасности.

...