2017-02-05 8 views
2

Я создал производную строку IDbCommand, которую я хочу использовать для упрощения доступа Sql-DB.Создать преобразование для производного класса IDbCommand

internal class Prozedur : IDbCommand 
{ 
    private SqlCommand command = new SqlCommand(); 
    private SqlConnection connection; 
    string commandtext; 
    CommandType commandType; 
    ... 

Теперь я хочу, чтобы расширить этот класс, чтобы обработать присвоение значения из выходных параметров SQL-процедуры свойств локального класса, как это:

Prozedur p = new Prozedur(); 
object.Name = p.Parameters["@Name"].Value; 

Это, очевидно, не будет работайте, потому что для этого нет конверсии. Я знаю, что использование

object.Name = (string)p.Parameters["@Name"].Value; 

будет работать. Как я должен расширить класс Prozedur, так что я буду иметь возможность использовать

object.Name = p.Parameters["@Name"].Value; 

и делать другие вещи, как проверка значений параметров или проверить нулевые значения?

ответ

2

Реализовать метод доступа этих значений и вернуть их уже набранный:

public TValue GetValue<TValue>(string parameterName) 
{ 
    // Do stuff here before returning the parameter value... 
    return (TValue)Parameters[$"@{parameterName}"]?.Value; 
} 

Позже вы будете получить доступ к значениям своих параметров следующим образом:

string name = proc.GetValue<string>("name"); 

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

public object GetValue(string parameterName) 
{ 
    // Do common stuff here to any parameter value type 
    return Parameters[$"@{parameterName}"]?.Value; 
} 

public string GetString(string parameterName) 
{ 
    // Do common stuff here to string parameters only 
    return (string)GetValue(parameterName); 
} 
+0

Конечно, иногда y ou просто застрять и полностью забыть очевидное ...;) Спасибо! –

+0

@ Mister832 Нет проблем, иногда нам тоже нужно слышать очевидное: D –